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

1、插入时主键返回

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

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

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

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

或者如下的写法更简单:

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

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

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

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

2、别名的使用

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

  1. <configuration>
  2. <typeAliases>
  3. <typeAlias type="org.andy.shop.model.CourseUserInfo" alias="CourseUserInfo"/>
  4. </typeAliases>
  5. </configuration>

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

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

3、动态sql使用

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

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

4、sql片段

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

定义如下:

  1. <sql id="Base_Column_List" >
  2. id, name, url, priority, logo, img
  3. </sql>

引用该片段如下:

  1. <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

最新文章

  1. 汇编实现点亮Led灯(2440)
  2. 遍历 Input检测是否有重复的值
  3. advanced validation on purchase.
  4. MAXIMO移动解决方案在库存管理中的PDA应用系统
  5. Arc Engine 中添加气泡提示框
  6. ZOJ3527
  7. hdu-3790最短路径问题
  8. jQuery中对未来的元素绑定事件
  9. Sonar入门(五):使用 Sonar 进行代码质量管理
  10. 【CF 549G Happy Line】排序
  11. Go语言学习笔记(三)数组 &amp; 切片 &amp; map
  12. Android&#160;DVM
  13. 详解EBS接口开发之销售订单导入
  14. 【netty】(2)---搭建一个简单服务器
  15. 1.2低级线程处理API
  16. Android JNI 学习(九):Static Fields Api &amp; Static Methods Api
  17. echarts图表大小随着外部div大小变化
  18. vue及webpack在项目中的一些优化
  19. 【Python023/024--递归】
  20. kafka的advertised.host.name参数 外网访问配置

热门文章

  1. 洛谷 P1994 有机物燃烧
  2. Linux中 ps aux 命令
  3. Intersection between a 2d line and a conic in OpenCASCADE
  4. 高效的TCP数据拆包器
  5. JS实现队列效果,先进先出
  6. 突破极限 解决大硬盘上安装Unix新思路
  7. Linux 内建命令和系统命令
  8. 【Uva 10641】 Barisal Stadium
  9. HDU 3400 Line belt (三分再三分)
  10. 内存卡(TF或其它)的标准