<!-- 动态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();
}