1、标签
set标签
<dynamic prepend="set">
<isNotNull prepend="," property="name">
name=#name#
</isNotNull>
</dynamic>
查询条件标签
<isNotEmpty prepend="AND" property="name">
<![CDATA[name like '%$name$%']]> 模糊查询
</isNotEmpty>
<isNotEmpty prepend="AND" property="name">
name = #name# 精确查询
</isNotEmpty>
2、sql插入当前时间并格式化
insert into user(id,name,createdate)
values(#id#,#name#,DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s'))
3、自由组合
1、将表的一个字段的多行数据组合成一行一列[将查询结果集为数组的转变成一个字符串,用逗号隔开]
select GROUP_CONCAT(name(查询的字段) separator ',') from user
2、拼接字段
两个字段拼接
select CONCAT(name,age) AS nage from user //张三20
三个字段拼接
select CONCAT(CONCAT(name,'-'),CONCAT(age,sex)) as nasex from user //张三-20男
4、特殊符号
特殊字符 替代符号
& &
< <
> >
" "
' '
小于等于 a<=b a <= b a <![CDATA[<= ]]>b
大于等于 a>=b a >= b a <![CDATA[>= ]]>b
不等于 a!=ba <![CDATA[ <> ]]>b a <![CDATA[!= ]]>b
例子:<if test="provinceId != null">
AND <![CDATA[ province_id = #{provinceId} ]]>
</if>
<if test="id != null">
AND <![CDATA[ id <> #{id} ]]>
</if>
此条源自:https://blog.csdn.net/buyaoshuohua1/article/details/74991913
5、问题总结
最近在项目开发中遇到了这样一个问题!!!
当动态sql传入int类型的值为0时,不会被当成参数进行查询。
例如将对象User的某一属性类型为Integer的type的值设置为0,将它当成参数传入动态sql中,代码如下:
User user = new User();
user.setType(0);
List<User> list = userDao.findByUser(user);
mapper.xml文件中
正确的动态sql语句:
select * from User
where User 1=1
<if test="type != null">
and type = #{type}
</if>
错误的动态sql语句:
select * from User
where User 1=1
<if test="type != null and type !=''">
and type = #{type}
</if>
错误原因:当传入的是int类型的值为0时,mybatis会把它当成空字符串处理,因此动态sql不能将它拼接上。所以动态sql的条件判断写成type != null即可将0正常传入