Mybatis框架,动态sql查询,修改。where,foreach,set

博客提及对mapper.java进行测试,涉及信息技术领域的代码测试相关内容。

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

<!-- 动态sql查询 -->
	<select id="findListByUser" parameterType="user" resultType="user">
		select * from user
		<!-- 包含的sql片段 -->
		<include refid="findUserWhere"></include>
		
	</select>
	<!-- SQL片段 -->
	<sql id="findUserWhere">
		<where>
			<if test="username!=null and username != ''">
				and username like '%${username}%'
			</if>
			<if test="sex != null and sex != ''">
				and sex = #{sex}
			</if>
			<if test="address != null and address != ''">
				and address = #{address}
			</if>
		</where>
	</sql>
	<!--mybatis in 语句  
	foreach可以遍历所有的可以迭代的对象,集合,数组,map等等。
	属性:index 当迭代对象是数组,列表时,表示的是当前迭代的次数
	item 当迭代对象是数组,列表时,表示的是当前迭代的元素
	collection 当前要遍历的对象 List -> list ,数组 -> array, map->Map的key
	separator 遍历完一次后,在末尾添加的字符等。
	open 遍历的sql以什么开头
	close 遍历的sql以什么结尾
	-->
	<select id="findUserByIds"  resultType="user">
	<!--      select * from user where id in ( , , .... ) -->
			select * from user where id in
			<foreach collection="list" item="id" open="(" separator="," close=")" >
				#{id}
			</foreach>
	</select>
	
	<update id="updateUserWheres" parameterType="user">
	<!-- 注意set 条件 后面的, 逗号别掉了 -->
		update user 
		<set>
			<if test="username != null and username != ''">
				username = #{username},
			</if>
			<if test="sex != null and sex != '' ">
				sex = #{sex},
			</if>
			<if test="address !=null and address !=''">
				address = #{address},
			</if>
		</set>
		where id = #{id}
	</update>

mapper.java

//动态sql,条件查询
	public List<User> findListByUser(User user);
	
	//动态sql in语句查询
	public List<User> findUserByIds(List<Integer> list);
	
	//动态sql 修改语句
	public void updateUserWheres(User user);
	

测试

//动态sql多条件查询
    @Test
    public void findListByUser() {
    	SqlSession sqlSession = sqlSessionFactory.openSession();
    	UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    	User user =new User();
    	user.setAddress("湖北");
    	// select * from user WHERE address = ? ,其他的值没有,就不会出现在sql中
    	List<User> user2 = mapper.findListByUser(user);
    	for (User user3 : user2) {
			System.out.println(user3);
		}
    	sqlSession.close();
    }
    
    //动态sql in语句查询
    @Test
    public void findUserByIds() {
    	SqlSession sqlSession = sqlSessionFactory.openSession();
    	UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    	List<Integer> ids=new ArrayList<Integer>();
    	ids.add(35);
    	ids.add(36);
    	List<User> userByIds = mapper.findUserByIds(ids);
    	for (User user : userByIds) {
			System.out.println(user);
		}
    	sqlSession.close();
    }
    
    //动态sql 修改语句
    @Test
    public void updateUserWheres() {
    	SqlSession sqlSession = sqlSessionFactory.openSession();
    	UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    	User user =new User();
    	user.setId(37);
    	user.setUsername("tom");
    	user.setAddress("美国");
    	mapper.updateUserWheres(user);
    	sqlSession.commit();
    	sqlSession.close();
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Exception.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值