博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mybatis的使用中的一些不太注意的技巧
阅读量:5365 次
发布时间:2019-06-15

本文共 2282 字,大约阅读时间需要 7 分钟。

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

1、插入时主键返回

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

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

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

        

[html]
  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.     
  5.      <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">  
  6.        select last_insert_id()  
  7.      </selectKey>  
  8.   </insert>  

或者如下的写法更简单:

[html]
  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()查询主键,是在查询之后在插入。

[html]
  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配置的可以使用别名,定义单个别名如下

[html]
  1. <configuration>  
  2. <typeAliases>  
  3.  <typeAlias type="org.andy.shop.model.CourseUserInfo" alias="CourseUserInfo"/>  
  4. </typeAliases>  
  5. </configuration>  
      自动定义别名:Mybatis 将自动扫描包名下的po,别名就是类名(大写小写都可以)
[html]
  1. <typeAliases>  
  2.   <package name="org.andy.shop.model"/>  
  3. </typeAliases>  

3、动态sql使用

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

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

4、sql片段

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

    定义如下:

    

[html]
  1. <sql id="Base_Column_List" >  
  2.     id, name, url, priority, logo, img  
  3.   </sql>  
   引用该片段如下:

  

[html]
  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

转载于:https://www.cnblogs.com/lykxqhh/p/5691185.html

你可能感兴趣的文章
The SortedMap Interface
查看>>
SniperOJ-leak-x86-64
查看>>
bzoj 4260: Codechef REBXOR (01 Trie)
查看>>
学好python
查看>>
css-IE中的border-radius和box-shadow
查看>>
利用bootstrap和webform的异步CRUD及分页
查看>>
HDUOJ 1879继续畅通工程(并查集)
查看>>
OC12_自动释放池
查看>>
Saiku资源帖
查看>>
解决手机页面中点击文本框,网页放大问题
查看>>
2-5
查看>>
牛客多校3 A-PACM Team(状压降维+路径背包)
查看>>
HDU - 4284 Travel(floyd+状压dp)
查看>>
1027 制作表格
查看>>
Android之Socket通信、List加载更多、Spinner下拉列表
查看>>
面向对象的介绍与特性
查看>>
typing-python用于类型注解的库
查看>>
20189215 2018-2019-2 《密码与安全新技术专题》第13周作业
查看>>
第四周作业
查看>>
一、HTML基础
查看>>