Mybatis按結果巢狀處理實現多對一處理和一對多處理
阿新 • • 發佈:2020-07-09
1.多對一
實體類
//這裡用到了lombok
@Data
public class Student {
private int id;
private String name;
//學生需要關聯一個老師!
private Teacher teacher;
}
@Data
public class Teacher {
private int id;
private String name;
}
Mapper配置檔案
<?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"> <mapper namespace="com.StudentMapper"> <select id="getStudent2" resultMap="StudentTeacher2"> select s.id sid,s.name sname,t.name tname,t.id tid from student s,teacher t where s.tid = t.id; </select> <resultMap id="StudentTeacher2" type="student"> <result property="id" column="sid"/> <result property="name" column="sname"/> <association property="teacher" javaType="teacher"> <result property="id" column="tid"/> <result property="name" column="tname"/> </association> </resultMap> </mapper>
測試
package com.you.dao; import com.you.utils.MybatisUtils; import com.you.vo.Student; import com.you.vo.Teacher; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.util.List; public class TeacherMapperTest { @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(); } }
2.一對多
實體類
@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配置檔案
<?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"> <mapper namespace="com.you.dao.TeacherMapper"> <!-- 按結果巢狀查詢--> <select id="getTeacherByid" 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 = #{tid} </select> <resultMap id="TeacherStudent" type="teacher"> <result property="id" column="tid"/> <result property="name" column="tname"/> <!--複雜的屬性,我們需要單獨處理 物件:association 集合:collection JavaType=“” 指定屬性的型別! 集合中的泛型資訊,我們使用ofType --> <collection property="students" ofType="student"> <result property="id" column="sid"/> <result property="name" column="sname"/> <result property="tid" column="tid"/> </collection> </resultMap> </mapper>
測試
package com.you.dao;
import com.you.utils.MybatisUtils;
import com.you.vo.Teacher;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class getMapperTeat {
@Test
public void getTeacherByid(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class);
Teacher teacherByid = mapper.getTeacherByid(1);
System.out.println(teacherByid);
sqlSession.close();
}
}