Mybatis学习笔记(六)--动态sql拼接

版权声明:版权归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);
	}
}

测试结果

猜你喜欢

转载自blog.csdn.net/Janson_Lin/article/details/83987399
今日推荐