Mybatis使用的细节

no.1

无论Interface Mapper里的方法有几个参数 

都要加上 @Param("xxx") 这个注解  

避免无法映射Mapper.XML的参数

no.2

#{} 解析为一个 JDBC 预编译语句(prepared statement)的参数标记符。

select * from user where name = #{name};

转换为

select * from user where name = ?;

可以看到#{}被解析为一个参数占位符?

${} 仅仅为一个纯碎的 string 替换,在动态 SQL 解析阶段将会进行变量替换

select * from user where name = ${name};

当我们传递参数“sprite”时,转换为

select * from user where name = "sprite";

no.3

like查询的方式

(1)'%${name}%'  不推荐

(2)CONCAT('%',CONCAT(#{name},'%'))     推荐 拼接时%必须加引号

(3)使用bind  强烈推荐

List<Person> selectBykeyWord(@Param("keyword") String keyword);

<select id="selectBykeyWord" parameterType="string" resultType="com.entity.Person">
  <bind name="pattern" value="'%' + keyword + '%'" />
    select * from person where name LIKE #{pattern}
</select>

no.4

mybatis foreach in 查询超过1000条解决办法

SELECT
		*
FROM
		${tabName} M
WHERE
		M.CODE_ID IN
		<foreach collection="list" item="id" index="index" open="(" close=")" separator=",">
			<if test="(index % 999) == 998"> NULL) OR M.CODE_ID IN(</if>#{id}
		</foreach>

                                                             
explain : 
   M.CODE_ID IN('......','998',NULL ) OR M.CODE_ID IN('999',.....  NULL) OR M.CODE_ID IN('.....')

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值