mybatis总结

本文总结了MyBatis在实际开发中的几个关键点:如何在SQL中插入和格式化当前时间,自由组合动态SQL,处理特殊符号,以及遇到的一个问题——当传入int类型值为0时动态SQL的处理方式。详细分析了错误动态SQL语句的原因,指出MyBatis会将0视为空字符串,因此建议在条件判断中使用`type != null`。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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、特殊符号

特殊字符   替代符号

&            &amp;

<            &lt;

>            &gt;

"            &quot;

'            &apos;

小于等于    a<=b                 a &lt;= b      a <![CDATA[<= ]]>b

大于等于    a>=b                 a &gt;= 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正常传入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值