版权声明:版权归JansonLin所有,转载请标明出处。 https://blog.csdn.net/Janson_Lin/article/details/83987399
介绍
通过mybatis提供的各种标签方法实现动态拼接sql
Mybatis动态sql---<sql>与<include>
<!-- 使用include标签加载sql片段;refid是sql片段id -->
<sql id="select">
select * from user
</sql>
<!--
在需要使用的地方使用include标签使用 在后面的动态sql标签中会使用到
这里的refid与<sql>中的select是一一对应的
-->
<include refid="select"/>
Mybatis动态sql---<if>标签
mapper接口
public List<User> findUserBySexAndName(User user);
<!--
动态SQL配置
有<if> 这里是可以做一个判断,配置上sql的值
<where> 这里是可以去掉语句中的就第一个前and
-->
<!-- 根据性别和名字来查询 -->
<select id="findUserBySexAndName" parameterType="User" resultType="User">
<include refid="select"/>
<where>
<if test="sex != null and sex !=''">
and sex = #{sex}
</if>
<if test="username!=null and username!=''">
and username like '%${username}%'
</if>
</where>
</select>
测试代码
@Test
public void testFindUserBySexAndName() throws Exception {
String resource = "SqlMapConfig.xml";
InputStream resourceAsStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = new User();
user.setSex("0");
user.setUsername("lin");
List<User> list = mapper.findUserBySexAndName(user);
for (User user2 : list) {
System.out.println(user2);
}
}
数据库中的数据
测试效果
Mybatis动态sql---<foreach>
<!-- findUserByUserVo输出类 -->
<select id="findUserByUserVolist" parameterType="UserVo" resultType="User">
<include refid="select"/>
<!-- foreach标签,进行遍历 -->
<!-- collection:遍历的集合,这里是QueryVo的ids属性 -->
<!-- item:遍历的项目,可以随便写,,但是和后面的#{}里面要一致 -->
<!-- open:在前面添加的sql片段 -->
<!-- close:在结尾处添加的sql片段 -->
<!-- separator:指定遍历的元素之间使用的分隔符 -->
<where>
id in
<foreach collection="list" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
</where>
</select>
UserVo代码
package com.janson.vo;
import java.io.Serializable;
import java.util.List;
import com.janson.pojo.User;
public class UserVo implements Serializable {
private static final long serialVersionUID = 1L;
private User user;
private List<Integer> list;
private Integer[] ids;
。。。省略了get和set
}
mapper代码
public List<User> findUserByUserVolist(UserVo vo);
测试代码
@Test
public void testfindUserByUserVolist() throws Exception {
String resource = "SqlMapConfig.xml";
InputStream resourceAsStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
UserVo vo = new UserVo();
List l = new ArrayList<>();
l.add("1");
l.add("3");
l.add("4");
vo.setList(l);
List<User> list = mapper.findUserByUserVolist(vo);
for (User user : list) {
System.out.println(user);
}
}
测试结果