mybatis常用操作
一、增
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常用操作的更多相关文章
- [Mybatis]Mybatis常用操作
Mybatis是目前国内比较流行的ORM框架,特点是可以写灵活的SQL语句,非常适合中小企业的面向数据库开发. 本文总结自己开发过程中常用的Mybatis操作. 一.插入操作 主键自增插入单条 < ...
- Mybatis常用操作 专题
parameterType:即将传入的语句参数的完全限定类名和别名.这个属性是可选项的,因为MyBatis可以推断出传入语句的具体参数,因此不建议配置该属性flushCache:默认值为true,任何 ...
- Spring Boot入门系列(十九)整合mybatis,使用注解实现动态Sql、参数传递等常用操作!
前面介绍了Spring Boot 整合mybatis 使用注解的方式实现数据库操作,介绍了如何自动生成注解版的mapper 和pojo类. 接下来介绍使用mybatis 常用注解以及如何传参数等数据库 ...
- 最全ElasticSearch6.5白金版本从构建ELK、集群搭建到和Mybatis结合操作详细讲解
1.安装ElasticSearch6.5.1 解压相关的ElasticSearch6.5.1的tar包到目录下,如果我们需要使用JDBC来连接的话是需要到白金版以上的,以下为将基础版破解为白金版的方法 ...
- 【三】用Markdown写blog的常用操作
本系列有五篇:分别是 [一]Ubuntu14.04+Jekyll+Github Pages搭建静态博客:主要是安装方面 [二]jekyll 的使用 :主要是jekyll的配置 [三]Markdown+ ...
- php模拟数据库常用操作效果
test.php <?php header("Content-type:text/html;charset='utf8'"); error_reporting(E_ALL); ...
- Mac OS X常用操作入门指南
前两天入手一个Macbook air,在装软件过程中摸索了一些基本操作,现就常用操作进行总结, 1关于触控板: 按下(不区分左右) =鼠标左键 control+按下 ...
- mysql常用操作语句
mysql常用操作语句 1.mysql -u root -p 2.mysql -h localhost -u root -p database_name 2.列出数据库: 1.show datab ...
- nodejs配置及cmd常用操作
一.cmd常用操作 1.返回根目录cd\ 2.返回上层目录cd .. 3.查找当前目录下的所有文件dir 4.查找下层目录cd window 二.nodejs配置 Node.js安装包及源码下载地址为 ...
随机推荐
- ActionBarActivity & FragmentActivity
1 ActionBarActivity 是FragmentActivity的一个子类 2 ActionBarActivity 加入了对actionBar的操作, 比如getSupportActionB ...
- dedecms 在php7.0无法安装
dedecms 需要mysql扩展的支持!而php7.0已废弃mysql扩展.所以我讲7.0改回了5.6然后就可以顺利安装了. 总结了一个经验:没有绝对实力,不要尝试新东西
- Python闭包与函数对象
1. Python闭包是什么 在python中有函数闭包的概念,这个概念是什么意思呢,查看Wikipedia的说明如下: “ In programming languages, closures (a ...
- n%i之和
题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1168 题意:给定一个n,注意这里n小于10^12,求 分析:早些时 ...
- git删除未跟踪文件
# 删除 untracked files git clean -f # 连 untracked 的目录也一起删掉 git clean -fd # 连 gitignore 的untrack 文件 ...
- CentOS 恢复 rm -rf * 误删数据(转)
一. 将磁盘分区挂载为只读 这一步很重要,并且在误删除文件后应尽快将磁盘挂载为只读.越早进行,恢复的成功机率就越大. 1. 查看被删除文件位于哪个分区 [root@localhost ~]# mo ...
- CSS样式之背景、文本
一.背景 1.背景颜色用background-color属性,例如:body{background-color:red} 2.用图像做背景用background-image属性,例如b ...
- ios按钮点击时的灰色框
a,button,input,textarea{-webkit-tap-highlight-color: rgba(0,0,0,0;)}
- SqlDbHelper备份,做项目时方便应用(目前不太全,把自己项目中的逐渐转移过来)
****************************************** 这是官网新闻左侧类别那部分用到的 **************************************** ...
- js改变div宽度
document.getElementById('Content_Right_id').style.width = document.documentElement.clientWidth - 250 ...