MyBatis总结(三)

本文详细介绍了MyBatis的动态SQL,包括if、where、set、trim、choose、when、otherwise和foreach元素的用法,以及在处理SQL拼接时的各种场景。此外,还讲解了一级缓存和二级缓存的概念,如何开启和配置二级缓存,以及缓存的相关属性设置。
摘要由CSDN通过智能技术生成

动态SQL

  1. if元素
    if元素是简单的条件判断,可用来实现简单的条件选择
    UserInfoMapper.xml映射文件
<select id="findUserInfoByUserNameWithIf" parameterType="UserInfo" resultType="UserInfo">
	select * from user_info ui
	<if test="userName!=null and userName!=''">
		where ui.userName like concat(concat('%'),#{userName}.'%')
	</if>
</select>

如果传入的查询条件成立,即userName非空,就会将where语句拼接的select语句中,反之忽略
UserInfoMapper接口

public interface UserInfoMapper{
   
	List<UserInfo> findUserInfoByUserNameWithIf(UserInfo ui);
}

测试类

@Test
public void testFindUserInfoByUserNameWithIf(){
   
	UserInfoMapper uim = sqlSession.getMapper(UserInfoMapper.class);
	//创建UserInfo对象,根据条件查询UserInfo对象
	UserInfo cond = new UserInfo();
	cond.setUserName("j");
	List<UserInfo> uis = uim.findUserInfoByUserNameWithIf(cond);
	for(UserInfo ui:uis){
   
		sout(ui.toString);
	}
}
  1. where,if元素
    当if元素较多时,可能会拼装成where and或者where or之类的关键字多余的错误SQL语句,where元素会自动剔除where关键字后面多余的or或and
    UserInfoMapper.xml
<select id="findUserInfoByUserNameAndStatus" parameterType="UserInfo" resultType="UserInfo">
	select * from user_info ui
	<where>
		<if test="userName!=null and userName!=''">
			ui.userName like concat(concat('%',#{userName}),'%')
		</if>
		<if test="status>-1">
			and ui.status = #{status}
		</if>
	</where>
</select>

UserInfoMapper接口

List<UserInfo> findUserInfoByUserNameAndStatus
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值