Mybatis的实用技巧

 

1、模糊查询

MySQL模糊查询一般是使用like条件,我们经常使用传入的变量作为like的条件。在MyBatis里面,like使用变量需要用到$或者concat。建议使用concat,#{}可以防止SQL注入。

like '%${value}%'

like concat('% ',#{value}, '%')

 

2、插入:存在则忽略

数据不存在则插入,数据已存在则忽略,可以使用MySQL ignore来实现。当primary key 或者unique key重复时会自动忽略本次插入操作。

insert ignore into webVisit (ip ) values(#{ipl})

 

3、插入:不存在则插入,存在则更新

数据不存在则插入,数据已存在则更新,可以使用MySQL on duplicate key update来实现。当primary key 或者unique key重复时会自动执行update。

insert into webVisit ( date , ip ,uri, count)
  values(#{date}, #{ip}, #{uri}, 1)
ON DUPLICATE KEY update count= count + 1

 

4、插入:存在则更新

数据不存在则插入,数据已存在则替换,可以使用MySQL replace into来实现。当primary key或者unique key重复时会自动替换已存在的数据。实际上是先删除原有数据,然后插入新数据。

replace into webVisit(date, ip, url, count)
values(#{date}, #{ip}, #{url}, 1)

 

 

5、MyBatis新增insert语句执行完返回该条记录自增的ID

<insert id="xxxxxxxx" parameterType="com.example.ProductPo">
    insert into product (name, type_id, price, create_time, update_time)
    value (#{name}, #{type_id}, #{price}, #{create_time}, #{update_time})
    <selectKey keyColumn="id" keyProperty="id" resultType="java.lang.Long" order="AFTER">
        select LAST_INSERT_ID() as id
    </selectKey>
</insert>

 

6、设置超时时间

通过timeout属性可以设置超时时间,也就是在抛出异常之前,驱动程序等待数据库返回请求结果的秒数。

<update id="demo" timeout="100"></update>

 

7、复用SQL片段

用sql标签可以定义SQL片段,用于SQL语句复用。

<sql id="Base_Column_List"> userld, email</sql>

<select id="selectByld" parameterType="java.lang.Long" resultMap="ResultMap"> 
    select <include refid="Base_Column_List" /> 
      from user where userld = #{userld}
</select>

 

8、批量插入数据

批量插入数据能够极大提升性能,曾经测试过多条数据插入时间从分钟级降低到秒级完成。批量插入主要用到 forEach标签,把批量数据转换成values语句。

 

foreach标签的属性主要有item,index,collection,open,separator,close。

item:集合中元素迭代时的别名;

index: 集合中元素迭代时的索引;

open:常用语where语句中,表示以什么开始,比如以('开始;

separator:表示在每次进行迭代时的分隔符;

close:用语where语句中,表示以什么结束;

collection:集合值;

<insert id="batchInsert" parameterType="java.util.List"> 
    insert into 'demo(userld, url) values 
    <foreach collection="list" item="item" separator=",">
        (#{item.userld}, #{item.url})
    </foreach>
</insert>

 

 

 

posted @ 2022-06-25 12:25  编程小白1024  阅读(236)  评论(0编辑  收藏  举报