其它配置操作请看上一篇,这篇着重讲解mapper.xml的SQL写法。
IDEA需要先安装Lombok插件
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.10</version> </dependency>
老师实体类 @Data //GET,SET,ToString,有参,无参构造 public class Teacher { private int id; private String name; } 学生实体类
@Data public class Student { private int id; private String name; //多个学生可以是同一个老师,即多对一 private Teacher teacher; }
Mapper接口的方法
//获取所有学生及对应老师的信息 public List<Student> getStudents();
mapper.xml文件实现SQL查询
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="top.hcode.mapper.StudentMapper"> <!-- 需求:获取所有学生及对应老师的信息 --> <select id="getStudents" resultMap="StudentTeacher"> select * from student </select> <resultMap id="StudentTeacher" type="Student"> <!--association关联属性 property属性名 javaType属性类型 column在多的一方的表中的列名--> <association property="teacher" column="tid" javaType="Teacher" select="getTeacher"/> </resultMap> <!-- 这里传递过来的id,只有一个属性的时候,下面可以写任何值 association中column多参数配置: column="{key=value,key=value}" 其实就是键值对的形式,key是传给下个sql的取值名称,value是片段一中sql查询的字段名。 --> <select id="getTeacher" resultType="teacher"> select * from teacher where id = #{id} </select> </mapper>
或者第二种嵌套查询方法
<!-- 按查询结果嵌套处理 思路: 1. 直接查询出结果,进行结果集的映射 --> <select id="getStudents" resultMap="StudentTeacher" > select s.id sid, s.name sname , t.name tname from student s,teacher t where s.tid = t.id </select> <resultMap id="StudentTeacher" type="Student"> <id property="id" column="sid"/> <result property="name" column="sname"/> <!--关联对象property 关联对象在Student实体类中的属性--> <association property="teacher" javaType="Teacher"> <result property="name" column="tname"/> </association> </resultMap>
学生实体类
@Data public class Student { private int id; private String name; private int tid; }
老师实体类
@Data public class Teacher { private int id; private String name; //一个老师多个学生 private List<Student> students; }
Mapper接口的方法
//获取指定老师,及老师下的所有学生 public Teacher getTeacher(int id);
<mapper namespace="top.hcode.mapper.TeacherMapper"> <!-- 思路: 1. 从学生表和老师表中查出学生id,学生姓名,老师姓名 2. 对查询出来的操作做结果集映射 1. 集合的话,使用collection! JavaType和ofType都是用来指定对象类型的 JavaType是用来指定pojo中属性的类型 ofType指定的是映射到list集合属性中pojo的类型。 --> <select id="getTeacher" resultMap="TeacherStudent"> select s.id sid, s.name sname , t.name tname, t.id tid from student s,teacher t where s.tid = t.id and t.id=#{id} </select> //查询出来的结果映射为对应的实体类集合 <resultMap id="TeacherStudent" type="Teacher"> <result property="name" column="tname"/> <collection property="students" ofType="Student"> <result property="id" column="sid" /> <result property="name" column="sname" /> <result property="tid" column="tid" /> </collection> </resultMap> </mapper>
另一种嵌套查询的写法
<select id="getTeacher" resultMap="TeacherStudent"> select * from teacher where id = #{id} </select> <select id="getStudentByTeacherId" resultType="Student"> select * from student where tid = #{id} </select> //根据查出来的指定的老师id去查所有学生中对应的老师id相同的学生。 <resultMap id="TeacherStudent" type="Teacher"> <!--column是一对多的外键 , 写的是一的主键的列名--> <collection property="students" javaType="ArrayList" ofType="Student" column="id" select="getStudentByTeacherId"/> </resultMap>
本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。
我来说两句