以下就总结一下Mybatis的使用中的一些不太注意的技巧,算是Mybatis的总结笔

1、插入时主键返回

我们向数据库插入一条记录是,使用Mybatis的<insert>是无法返回插入的主键的,而我们需要这个刚插入的主键,可以如下返回

自增主键:使用last_insert_id()查询刚插入的key的id,该方法需要和insert配合使用,是插入之后获取。

result返回的是插入成功条数,而主键id返回到CourseInfo的id属性中

<insert id="insert" parameterType="org.andy.shop.model.CourseInfo" >insert into course_info (id, cname, caddress)values (#{id,jdbcType=INTEGER}, #{cname,jdbcType=VARCHAR}, #{caddress,jdbcType=VARCHAR})<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">select last_insert_id()</selectKey></insert>

或者如下的写法更简单:

<insert id="insert" parameterType="org.andy.shop.model.CourseInfo" useGeneratedKeys="true" keyProperty="id">insert into course_info (id, cname, caddress)values (#{id,jdbcType=INTEGER}, #{cname,jdbcType=VARCHAR}, #{caddress,jdbcType=VARCHAR})</insert>

非自增主键:但我们的ID为uuid字符类型的32为长度时,我们使用mysql的uuid()查询主键,是在查询之后在插入。

<insert id="insert" parameterType="org.andy.shop.model.CourseInfo" ><selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">select uuid()</selectKey>insert into course_info (id, cname, caddress)values (#{id,jdbcType=VARCHAR}, #{cname,jdbcType=VARCHAR}, #{caddress,jdbcType=VARCHAR})</insert>

使用oracle数据库时:使用 序列名.nextval()函数获取。

2、别名的使用

一般定义别名,在Mapper配置的可以使用别名,定义单个别名如下

<configuration>
<typeAliases><typeAlias type="org.andy.shop.model.CourseUserInfo" alias="CourseUserInfo"/>
</typeAliases>
</configuration>

自动定义别名:Mybatis 将自动扫描包名下的po,别名就是类名(大写小写都可以)

<typeAliases><package name="org.andy.shop.model"/>
</typeAliases>

3、动态sql使用

一般我们会涉及多个动态查询条件,一般我们是通过 where 1 = 1,这样可以处理where后面对应全空的情况,我们可以使用<where>标签,该标签可以自动处理。

        <where><if test="name != nulll">and name like concat('%',trim(#{name,jdbcType=VARCHAR}),'%') </if></where>

4、sql片段

我们可以将常用的重复的sql定义sql片段

定义如下:

<sql id="Base_Column_List" >id, name, url, priority, logo, img</sql>

引用该片段如下:

<include refid="Base_Column_List" />

5、关联查询

一对一关联查询

一对多关联查询

6、延迟加载

延迟加载:先从单表查询,在需要时从关联表查询,可以大大的提高数据库性能,单表查询的性能要快于多表联合查询的速度。

而Mybatis的associate、collection就支持延迟加载功能。

开启延迟加载:

需要在Mybatis的核心配置文件中配置configuration开启setting两个配置

设置lazyLoadingEnabled为true, aggressiveLazyLoading为false

未完待续。

mybatis文档地址:http://www.mybatis.org/mybatis-3/zh/index.html

Mybatis使用技巧相关推荐

  1. MyBatis学习总结(14)——Mybatis使用技巧总结

    2019独角兽企业重金招聘Python工程师标准>>> 1. 区分 #{} 和 ${}的不同应用场景 1)#{} 会生成预编译SQL,会正确的处理数据的类型,而${}仅仅是文本替换. ...

  2. mybatis小技巧 11.28

    目录 1.#{}和${}区别(#{}占位符'XXX' ${}拼接XXX) 2.什么时候用${}(升序降序 拼接XXX) 3.拼接表名(log_${date}) 4.批量删除(or/in(x,x,x)/ ...

  3. # 后端开发技巧、常用规范

    后端开发技巧.常用规范 开发技巧 equals() 方法的使用 null.equals()会出报空指针,因该是非null的值.equals() 可以使用Objects的equals()方法避免空值,完 ...

  4. SpringBoot结合MyBatis 【超详细】

    1.SpringBoot+老杜MyBatis 一.简单回顾一下MyBatis 二.快速入门 ​三.简易插入删除更改 四.查询 ①.按其中一个字段查询 ②.按所有字段进行查询 ​五.详解MyBatis核 ...

  5. SSM框架-MyBatis(二)

    目录 1 手写MyBatis框架(理解原理) 2 在web中应用MyBatis(使用MVC架构模式) 2.1 准备数据库表 2.2 实现步骤 2.3 事务处理 2.4 生命周期 2.5 当前程序存在的 ...

  6. 对标阿里P8的MyBatis源码解析文档,面试/涨薪两不误,已献出膝盖

    移动互联网的特点是大数据.高并发,对服务器往往要求分布式.高性能.高灵活等,而传统模式的Java数据库编程框架已经不再适用了. 在这样的背景下,一个Java的持久框架MyBatis走入了我们的世界,它 ...

  7. 2.2基本算法之递归和自调用函数_你为什么学不会递归?读完这篇文章轻松理解递归算法...

    对于很多编程初学者来说,递归算法是学习语言的最大障碍之一.很多人也是半懂不懂,结果学到很深的境地也会因为自己基础不好,导致发展太慢. 可能也有一大部分人知道递归,也能看的懂递归,但在实际做题过程中,却 ...

  8. 数据库MYSQL学习系列二

    2.1-MySQL数据类型 Number不止一种 ××× 浮点型 ××× INT SMALLINT MEDIUMINT BIGINT type Storage Minumun Value Maximu ...

  9. 可能存在无限递归_你为什么学不会递归?读完这篇文章轻松理解递归算法

    对于很多编程初学者来说,递归算法是学习语言的最大障碍之一.很多人也是半懂不懂,结果学到很深的境地也会因为自己基础不好,导致发展太慢. 可能也有一大部分人知道递归,也能看的懂递归,但在实际做题过程中,却 ...

  10. Java学习成长路径

    JavaSE部分 1 JavaSE体系介绍 JDK安装与环境配置 2 变量 注释,Java数据类型,进位制转换,运算符 3 运算符 分支结构 4 分支结构循环结构 5 循环结构 一维数组 6 二维数组 ...

最新文章

  1. HDU 1754 I Hate It(线段树单点更改、区间查找最大值)
  2. nginx配置文件+本地测试请求转发到远程服务器+集群
  3. python向服务器请求压缩数据及解压缩数据
  4. spring mvc学习(8):springmvc常用注解代码
  5. python package 的两种组织方式
  6. c++真的比java难吗_开课吧Java课程怎么样?开课吧的Java课程真的那么好吗?
  7. 控制div的大小自适应_干货 | 浅谈模糊自适应PID控制
  8. 数据库服务器修改地址,数据库服务器修改地址吗
  9. 分享一个高清壁纸网站
  10. Elasticsearch6.3.0安装Ansj分词插件
  11. 谷歌或Edge浏览器在开始菜单页面不显示图标
  12. Elasticsearch 集群报错 master not discovered yet
  13. 网页加载慢,你知道几种原因?
  14. TSF微服务治理实战系列(二)——服务路由
  15. Android 静音检测
  16. 赠书福利|一本书是写给美国人看的书,告诉我们,美国科技为什么领先?
  17. java后端怎么入门,自学还是培训
  18. c语言求13为质数的代码,C语言求质数.doc
  19. qt调试android程序崩溃,使用qt5开发的Android应用程序合并了AWS C++库崩溃
  20. 显卡常识 电脑显卡基础知识普及

热门文章

  1. 图数据库实战 AWS Neptune Gremlin CloudFormation
  2. java kind con,java.lang.ClassNotFoundException:afu.com.sun.source.tree.tree$kind
  3. python 爬虫生成csv文件和图_Python简单爬虫导出CSV文件的实例讲解
  4. 242. Valid Anagram [easy] (Python)
  5. 295.数据流的中位数
  6. 多小区下小区上行速率的计算(3)
  7. linearlayout之margin和peddling
  8. 【生信进阶练习1000days】day4-Annotation包中mapIds函数的使用
  9. pdf 目录导入 macos
  10. Momentum, RMSprob and Adam