一、增

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. Delphi TcxTreelist 设置scrollbars 不起作用的原因

    最近设置TcxTreelist的滚动条,发现水平的不起作用, 即使设置 sboth也不起作用. 查找,发现设置的一些属性导致了这个原因, 建立备忘,如下图: 1.属性, 这个页面,设置的表格,怎么也看 ...

  2. Codeforces Round #327 (Div. 1) D. Top Secret Task

    D. Top Secret Task time limit per test 3 seconds memory limit per test 256 megabytes input standard ...

  3. 揭开枚举类的面纱(Unlocking the Enumeration/enum Mystery)

    枚举给用户定义固定数据组提供了方便.枚举类就是一系列常量整型值,这也就意味着枚举类型不能被修改. 这里我们将要讨论C语言中枚举类型的用法和限制. 枚举通过枚举关键值定义,类似结构体定义 语法(Synt ...

  4. XSS初体验

    主要内容 什么是XSS? XSS的危害有哪些? 常见的XSS漏洞 如何防范XSS?   什么是XSS? 跨站脚本攻击(Cross Site Scripting),是一种 Web 应用程序的漏洞,当来自 ...

  5. poj 1742 Coins(dp之多重背包+多次优化)

    Description People in Silverland use coins.They have coins of value A1,A2,A3...An Silverland dollar. ...

  6. springmvc4+hibernate4分页查询功能

    Springmvc+hibernate成为现在很多人用的框架整合,最近自己也在学习摸索,由于我们在开发项目中很多项目都用到列表分页功能,在此参考网上一些资料,以springmvc4+hibnerate ...

  7. 安装centos6.3

    废话少说,今天安装镜像文件.版本为centos6.3 1.首先,我们已经创建了一个空的虚拟机,此时,打开虚拟机,选择的镜像文件,点击ok自己下载 2.点击绿色的三角箭头,你会看到下面页面.(如果报错T ...

  8. C#调用Java代码

    c#直接调用java代码,需要ikvmbin-0.44.0.5.zip.下载地址: http://pan.baidu.com/share/link?shareid=3996679697&uk= ...

  9. onblur判断数字

    window.onload = function () { document.getElementById('text1').onblur = function () { if (isNaN(docu ...

  10. java二维不定长数组测试

    package foxe; import javax.swing.JEditorPane;import javax.swing.JFrame; /** * @author fooxe * * @see ...