创建数据库建表

一个老师有五个学生
捕获1.PNG
捕获2.PNG

多对一

多个学生对一个老师,学生对老师之间的关系是关联association

1. 编写实体类

  1. @Data //GET,SET,ToString,有参,无参构造
  2. public class Teacher {
  3. private int id;
  4. private String name;
  5. }
  6. @Data
  7. public class Student {
  8. private int id;
  9. private String name;
  10. //多个学生可以是同一个老师,即多对一
  11. private Teacher teacher;
  12. }

2.编写实体类对应的Mapper接口两个

  1. package com.sy.dao;
  2. import com.sy.pojo.Student;
  3. import java.util.List;
  4. public interface StudentMapper {
  5. public List<Student> getStudent();
  6. public List<Student> getStudent2();
  7. }
  1. package com.sy.dao;
  2. import com.sy.pojo.Teacher;
  3. import org.apache.ibatis.annotations.Param;
  4. import org.apache.ibatis.annotations.Select;
  5. public interface TeacherMapper {
  6. @Select("select * from mybatis.teacher where id = #{tid}")
  7. Teacher getTeacher(@Param("tid") int id);
  8. }

3.编写Mapper接口对应的 mapper.xml配置文件(Student.xml)

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.sy.dao.StudentMapper">
  6. <!--按照查询进行嵌套处理-->
  7. <select id="getStudents" resultMap="StudentTeacher">
  8. select * from student
  9. </select>
  10. <resultMap id="StudentTeacher" type="Student">
  11. <!--association关联属性 property属性名 javaType属性类型 column在多的一方的表中的列名-->
  12. <association property="teacher" column="tid" javaType="Teacher" select="getTeacher"/>
  13. </resultMap>
  14. <!--
  15. 这里传递过来的id,只有一个属性的时候,下面可以写任何值
  16. associationcolumn多参数配置:
  17. column="{key=value,key=value}"
  18. 其实就是键值对的形式,key是传给下个sql的取值名称,value是片段一中sql查询的字段名。
  19. -->
  20. <select id="getTeacher" resultType="teacher">
  21. select * from teacher where id = #{id}
  22. </select>
  23. <!--按结果嵌套处理-->
  24. <select id="getStudent2" resultMap="s-t-2">
  25. select s.id sid,s.name sname,t.name tname
  26. from student s ,teacher t
  27. where s.tid=t.id
  28. </select>
  29. <resultMap id="s-t-2" type="Student">
  30. <result property="id" column="sid"/>
  31. <result property="name" column="sname"/>
  32. <association property="teacher" javaType="Teacher" >
  33. <result property="name" column="tname"/>
  34. </association>
  35. </resultMap>

4.绑定接口





### 5.测试 java @Test public void getStudent(){ SqlSession sqlSession = MyBatisUtils.getSqlSession(); StudentMapper mapper = sqlSession.getMapper(StudentMapper.class); List<Student> studentList = mapper.getStudent(); for (Student student : studentList) { System.out.println(student); } sqlSession.close(); } @Test public void getStudent2(){ SqlSession sqlSession = MyBatisUtils.getSqlSession(); StudentMapper mapper = sqlSession.getMapper(StudentMapper.class); List<Student> studentList = mapper.getStudent(); for (Student student : studentList) { System.out.println(student); } sqlSession.close(); } 按照查询进行嵌套处理就像SQL中的子查询
按照结果进行嵌套处理就像SQL中的联表查询 ## 一对多 - 一个老师对多个学生 - 老师的角度 一个老师有一群学生集合collection ## 1.编写实体类 ### 1. 编写实体类 java @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; } ### 2.编写实体类对应的Mapper接口两个 java package com.sy.dao; import com.sy.pojo.Student; import java.util.List; public interface StudentMapper { public List<Student> getStudent(); public List<Student> getStudent2(); } java package com.sy.dao; import com.sy.pojo.Teacher; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; public interface TeacherMapper { Teacher getTeacher(@Param("tid") int id); Teacher getTeacher2(@Param("tid") int id); } ### 3.编写Mapper接口对应的 mapper.xml配置文件(Teacher .xml) ```java <?xml version=”1.0” encoding=”UTF-8” ?> <!DOCTYPE mapper PUBLIC “-//mybatis.org//DTD Config 3.0//EN” “http://mybatis.org/dtd/mybatis-3-mapper.dtd"> //结果嵌套

//查询嵌套

  1. <resultMap id="t-d-2" type="Teacher">
  2. <collection property="students" javaType="ArrayList" ofType="Student" select="getStudentByTeacherId" column="id"/>
  3. </resultMap>
  4. <select id="getStudentByTeacherId" resultType="Student">
  5. select * from mybatis.student where tid = #{tid }
  6. </select>

  1. <a name="otsea"></a>
  2. ### 4.绑定接口
  3. <!--绑定接口--><br /><mappers><br /> <mapper class="com.sy.dao.StudentMapper"/><br /> <mapper class="com.sy.dao.TeacherMapper"/><br /></mappers>
  4. <a name="K0HE1"></a>
  5. ### 5.测试
  6. ```java
  7. @Test
  8. public void getTeacher(){
  9. SqlSession sqlSession = MyBatisUtils.getSqlSession();
  10. TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class);
  11. Teacher teacher = mapper.getTeacher(1);
  12. System.out.println(teacher);
  13. sqlSession.close();
  14. }
  15. @Test
  16. public void getTeacher2(){
  17. SqlSession sqlSession = MyBatisUtils.getSqlSession();
  18. TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class);
  19. Teacher teacher = mapper.getTeacher(1);
  20. System.out.println(teacher);
  21. sqlSession.close();
  22. }
  23. }
  • JavaType是用来指定pojo中属性的类型
  • ofType指定的是映射到list集合属性中pojo的类型。