一、增

1.1 单条

<insert id="addUser" parameterType="com.xxx.model.UserInfo" useGeneratedKeys="true" keyProperty="id">
INSERT INTO
user_info(user_name, account, password)
values
(#{userName},#{account},#{password})
</insert>

  

1.2 批量

<insert id="insert" useGeneratedKeys="true" keyProperty="id">
INSERT INTO
my_table(name,create_time,update_time)
VALUES
<foreach collection="list" item="item" separator=",">
(#{item.name},now(),now())
</foreach>
ON DUPLICATE KEY UPDATE name=VALUES(name),update_time=now()
</insert>

二、删

<delete id="deleteUser">
delete from user where id=#{id}
</delete>

  

三、改

3.1 set

<update id="updateAuthorIfNecessary">
update Author
<set>
<if test="username != null">username=#{username},</if>
<if test="password != null">password=#{password},</if>
<if test="email != null">email=#{email},</if>
<if test="bio != null">bio=#{bio}</if>
</set>
where id=#{id}
</update>

  set标签的好处时,可以根据需要动态的更新某些字段。set也会自动消除无关的逗号。

<update id="updateBatch" parameterType="java.util.List">
<foreach collection="list" item="item" index="index" open="" close="" separator=";">
UPDATE my_test
<set>
sex = #{item.sex},
age = #{item.age}
</set>
WHERE
name = #{item.name}
AND
tt = #{item.tt}
</foreach>
</update>

  

四、查

4.1 批量查询

 WHERE id IN
<foreach collection="ids" open="(" close=")" separator="," item="item" index="index">
#{item}
</foreach>
<if test="tags!=null">
AND
<foreach collection="tags" index="index" item="tag" open=" (" separator=" OR " close=")">
d.tag LIKE CONCAT('%', #{tag}, '%')
</foreach>
</if>

  

 

传入参数为任何可迭代对象(如列表、集合等)和任何的字典或者数组对象。列表时,index为索引值,item为元素;map时,index为key,item为value。

4.2 时间比较

WHERE create_time <![CDATA[>=]]> #{startTime} AND create_time <![CDATA[<=]]> #{endTime}
WHERE create_time BETWEEN #{startTime} AND #{endTime}
WHERE create_time BETWEEN CONCAT(DATE(#{startDate})," 00:00:00") AND CONCAT(DATE(#{endDate})," 23:59:59")
WHERE create_time BETWEEN DATE(#{startDate}) AND DATE_ADD(DATE(#{endDate}),INTERVAL 1 DAY)

   

4.3 if判断

WHERE
1=1
<if test="startTime != null and startTime != ''">
AND create_time <![CDATA[>=]]> #{startTime}
</if>
<if test="opType == 1">
AND my_filed = 1
</if>
<if test="isTop == true">
AND status = 1
</if>
<if test="orderBy != null">
ORDER BY ${orderBy}
</if>
<if test="isDesc">
DESC
</if>
<if test="limit != null">
LIMIT #{limit.length} OFFSET #{limit.offset}
</if>

  

4.4 choose

<choose>
<when test="status == 1">
AND status = 1
</when >
<when test="status == 2">
AND status = 2
</when >
<otherwise>
AND status = 0
</otherwise>
</choose>

  

4.5 bind

<select id="selectBlogsLike" resultType="Blog">
<bind name="pattern" value="'%' + title + '%'" />
SELECT * FROM BLOG
WHERE title LIKE #{pattern}
</select>

 

name LIKE CONCAT('%', #{name},'%')

4.6 where

<select id="findActiveBlogLike" resultType="Blog">
SELECT * FROM BLOG
<where>
<if test="state != null">
state = #{state}
</if>
<if test="title != null">
AND title like #{title}
</if>
<if test="author != null and author.name != null">
AND author_name like #{author.name}
</if>
</where>
</select>

  where标签的好处是,当没有符合的条件时,MyBatis会自动把where去掉。并且<where>会忽略掉子句首的“AND”和"OR"。

4.7 trim

神器!作用是非空子句首尾词的替换。

参数说明:

  • prefixOverrides:子句首的命中词列表,以|分隔,忽略大小写。如果命中(轮询命中词,最多只命中一次),会删除子句首命中的词;没命中就算了。
  • prefix:如果处理子句首词后,子句非空,就在子句最前边加上单个空格+prefix。
  • suffixOverrides:子句尾的命中词列表,以|分隔,忽略大小写。如果命中(轮询命中词,最多只命中一次),会删除子句尾命中的词;没命中就算了。
  • suffix:如果处理子句尾词后,子句非空,就在子句最后边加上单个空格+suffix。
WHERE user_name = #{userName}
<trim prefix="AND(" prefixOverrides="OR" suffix=")">
<if test="sex != -1">
OR sex = #{sex}
</if>
<if test="age != -1">
OR age = #{age}
</if>
</trim>

 命中的语句有:

WHERE user_name = ?
WHERE user_name = ? AND( sex = ? )
WHERE user_name = ? AND( age = ? )
WHERE user_name = ? AND( sex = ? OR age = ? )

  

 

4.7 #{}与${}

  默认情况下,使用#{}格式的语法会使 MyBatis 创建预处理语句属性并安全地设置值(比如?)。这样做更安全,更迅速,通常也是首选做法,不过有时你只是想直接在 SQL 语句中插入一个不改变的字符串。比如,像 ORDER BY,你可以这样来使用:ORDER BY ${columnName},这里 MyBatis 不会修改或转义字符串。

  注意:以这种方式接受从用户输出的内容并提供给语句中不变的字符串是不安全的,会导致潜在的 SQL 注入攻击,因此要么不允许用户输入这些字段,要么自行转义并检验。

  

end  

 

 

mybatis常用操作的更多相关文章

  1. [Mybatis]Mybatis常用操作

    Mybatis是目前国内比较流行的ORM框架,特点是可以写灵活的SQL语句,非常适合中小企业的面向数据库开发. 本文总结自己开发过程中常用的Mybatis操作. 一.插入操作 主键自增插入单条 < ...

  2. Mybatis常用操作 专题

    parameterType:即将传入的语句参数的完全限定类名和别名.这个属性是可选项的,因为MyBatis可以推断出传入语句的具体参数,因此不建议配置该属性flushCache:默认值为true,任何 ...

  3. Spring Boot入门系列(十九)整合mybatis,使用注解实现动态Sql、参数传递等常用操作!

    前面介绍了Spring Boot 整合mybatis 使用注解的方式实现数据库操作,介绍了如何自动生成注解版的mapper 和pojo类. 接下来介绍使用mybatis 常用注解以及如何传参数等数据库 ...

  4. 最全ElasticSearch6.5白金版本从构建ELK、集群搭建到和Mybatis结合操作详细讲解

    1.安装ElasticSearch6.5.1 解压相关的ElasticSearch6.5.1的tar包到目录下,如果我们需要使用JDBC来连接的话是需要到白金版以上的,以下为将基础版破解为白金版的方法 ...

  5. 【三】用Markdown写blog的常用操作

    本系列有五篇:分别是 [一]Ubuntu14.04+Jekyll+Github Pages搭建静态博客:主要是安装方面 [二]jekyll 的使用 :主要是jekyll的配置 [三]Markdown+ ...

  6. php模拟数据库常用操作效果

    test.php <?php header("Content-type:text/html;charset='utf8'"); error_reporting(E_ALL); ...

  7. Mac OS X常用操作入门指南

    前两天入手一个Macbook air,在装软件过程中摸索了一些基本操作,现就常用操作进行总结, 1关于触控板: 按下(不区分左右)            =鼠标左键 control+按下        ...

  8. mysql常用操作语句

    mysql常用操作语句 1.mysql -u root -p   2.mysql -h localhost -u root -p database_name 2.列出数据库: 1.show datab ...

  9. nodejs配置及cmd常用操作

    一.cmd常用操作 1.返回根目录cd\ 2.返回上层目录cd .. 3.查找当前目录下的所有文件dir 4.查找下层目录cd window 二.nodejs配置 Node.js安装包及源码下载地址为 ...

随机推荐

  1. 前端模拟发送数据-Chrome下的REST Client

    1)确定需要POST的数据 2)拼接数据,POST给服务器 3)查看服务器响应及结果

  2. Linux企业级项目实践之网络爬虫(7)——DNS解析

    DNS 是Domain Name Service的缩写.域名系统为Internet上的主机分配域名地址和IP地址.IP地址不易于记忆,然而域名地址相比较而言是方便于记忆的.用户如果使用域名地址,当想获 ...

  3. Android数据库信息显示在listview上

    Key Points: 1.使用SimpleCursorAdapter将Android数据库信息显示在listview上 adapter = new SimpleCursorAdapter(this, ...

  4. 浅谈c语言中的堆

    操作系统堆管理器管理: 堆管理器是操作系统的一个模块,堆管理内存分配灵活,按需分配. 大块内存: 堆内存管理者总量很大的操作系统内存块,各进程可以按需申请使用,使用完释放. 程序手动申请&释放 ...

  5. <php>文件操作*(重要)

    //touch("./3.txt");//创建文件:在当前目录下创建3.txt文件 //copy("./3.txt","./touxiang/5.ph ...

  6. 第25讲 UI组件之 AlertDialog 的各种实现

    第25讲 UI组件之AlertDialog 的各种实现 对话框(Dialog)是程序运行中的弹出窗口,例如当用户要删除一个联系方式时,会弹出一个对话框. Android提供了多种对话框:警告对话框(A ...

  7. C# 二分查询

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  8. inline-block及解决空白间距

    參考:http://www.jb51.net/css/76707.html http://www.webhek.com/remove-whitespace-inline-block/ inline-b ...

  9. linux自动交互工具expect,tcl安装和安装包,以及自动互信脚本

    linux自动交互工具expect,tcl安装,以及自动互信脚本 工作中需要对几十台服务器做自动互信,无意中发现expect命令,研究一番. 在网上找了许多资料也没有安装成功,摸索着总算成功了.现分享 ...

  10. [Javascript] The JSON.stringify API

    JSON (JavaScript Object Notation) is a standard method to serialize JavaScript objects and is common ...