版权声明:本文为博主原创文章,未经博主允许不得转载。 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();
}