Mybatis动态SQL - 使用xml配置

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/R812656252/article/details/86654341

Mybatis动态SQL - 使用xml配置

Mybatis支持动态的拼接sql语句,以完成动态的业务逻辑,简化开发。查询数据库中tb_student的数据。

1. Student.java

2. Mapper.xml中通常配置: 配置resultMap用以声明数据库查询结果与实体类之间的映射关系。

	  <resultMap type="Student" id="StudentMap">
	  	<id property="id" column="id"/>
	  	<result property="name" column="name"/>
	  	<result property="age" column="age"/>
	  	<result property="grade" column="class"/>
	  	<result property="school" column="school"/>
	  </resultMap>

<if>: 如果传入的参数列表中‘age’不为空,则会在sql语句中加上if语句体中声明的sql语句片段。

	 <select id="findStudentUsingIf" parameterType="Map" resultMap="StudentMap">
	 	select * from tb_student where 1=1
	 	<if test="age!=null">
	 		and age = #{age}
	 	</if>
	@Test
	public void testFind1(){
		StudentMapper studentMapper = (StudentMapper) sqlSession.getMapper(StudentMapper.class);
		Map<String,Integer> map = new HashMap<String,Integer>();
		map.put("age", 23);
 		List<Student> students = studentMapper.findStudentUsingIf(map);
 		for (Student student : students){ 			
 			if(student != null){
 				System.out.println("select success! "+student);
 			}
 		}
		sqlSession.commit();
	}

<chose>: 类似<if>只是允许多条件查询

	 <select id="findStudentUsingChose" parameterType="Map" resultMap="StudentMap">
	 	select * from tb_student 
		<choose>
			<when test="name != null">
				where name = #{name}
			</when>
			<when test="school != null">
				where school = #{school}
			</when>
			<otherwise>
				where class = #{grade}
			</otherwise>
		</choose> 	
	 </select>
	@Test
	public void testFind2(){
		StudentMapper studentMapper = (StudentMapper) sqlSession.getMapper(StudentMapper.class);
		Map<String,String> map = new HashMap<String,String>();
		map.put("name",null);
		map.put("grade", "ad");
		map.put("school", "sd");
 		List<Student> students = studentMapper.findStudentUsingChose(map);
 		for (Student student : students){ 			
 			if(student != null){
 				System.out.println("select success! "+student);
 			}
 		}
		sqlSession.commit();
	}

<foreach>遍历传入的参数列表

	   <select id="findStudentList" parameterType="List" resultMap="StudentMap">
	 	select * from tb_student 
	 	<if test="nameList != null">
		<where>
			name IN
			<foreach collection="nameList" item="name" open="(" close=")" separator=",">
				#{name}
			</foreach>
		</where>	 	
	 	</if>
	 </select>
	@Test
	public void testFind3(){
		StudentMapper studentMapper = (StudentMapper) sqlSession.getMapper(StudentMapper.class);
		Map<String,List> map = new HashMap<String,List>();
		List<String> nameList = new ArrayList<String>();
		nameList.add("Robin");
		nameList.add("Mary");
		map.put("nameList", nameList);
 		List<Student> students = studentMapper.findStudentList(map);
 		for (Student student : students){ 			
 			if(student != null){
 				System.out.println("select success! "+student);
 			}
 		}
		sqlSession.commit();
	}

添加前缀/后缀

	  <select id="findStudentList2" parameterType="Map" resultMap="StudentMap">
	 	select * from tb_student 
	 	<trim prefix="where" prefixOverrides="and|or">
	 		<if test="age != null">
	 			and age = #{age}
	 		</if>
	 	</trim> 	
	 </select>
	@Test
	public void testFind4(){
		StudentMapper studentMapper = (StudentMapper) sqlSession.getMapper(StudentMapper.class);
		Map<String,Integer> map = new HashMap<String,Integer>();
		map.put("name",null);
		map.put("age", 23);
 		List<Student> students = studentMapper.findStudentList2(map);
 		for (Student student : students){ 			
 			if(student != null){
 				System.out.println("select success! "+student);
 			}
 		}
		sqlSession.commit();
	}

猜你喜欢

转载自blog.csdn.net/R812656252/article/details/86654341