有时侯,我们用SQL取得的结果需要映射到类似Map<key, Bean>这样的数据结构中或是映射到多个实体类中时,我们就需要使用到resultMap。下面用3个例子说明Mybatis高级结果映射的用法。
<环境准备>
<数据准备>
创建班级--学生表的一对多的数据结构
1 --创建班级表 2 CREATE TABLE tempdb..test_class 3 ( 4 class_id int NOT NULL PRIMARY KEY, 5 class_name varchar(255), 6 class_admin_name varchar(255) 7 ); 8 --创建学生表 9 CREATE TABLE tempdb..test_student 10 ( 11 student_id int NOT NULL PRIMARY KEY, 12 class_id int, 13 student_name varchar(255), 14 student_age int, 15 student_address varchar(255) 16 ); 17 --班级表中插入数据 18 insert tempdb..test_class values (101, 'Class 1, Grade 1', 'Mr. Zhang'); 19 insert tempdb..test_class values (102, 'Class 2, Grade 1', 'Mr. Li'); 20 insert tempdb..test_class values (103, 'Class 3, Grade 1', 'Mr. Wang'); 21 insert tempdb..test_class values (201, 'Class 1, Grade 2', 'Mr. Zhao'); 22 insert tempdb..test_class values (202, 'Class 2, Grade 2', 'Mr. Liu'); 23 --学生表中插入数据 24 insert tempdb..test_student values (101001, 101, 'Name 1', 20, 'Address 1'); 25 insert tempdb..test_student values (101002, 101, 'Name 2', 21, 'Address 2'); 26 insert tempdb..test_student values (101003, 101, 'Name 3', 20, 'Address 3'); 27 insert tempdb..test_student values (102001, 102, 'Name 4', 22, 'Address 4'); 28 insert tempdb..test_student values (102002, 102, 'Name 5', 21, 'Address 5'); 29 insert tempdb..test_student values (201001, 201, 'Name 6', 23, 'Address 6'); 30 insert tempdb..test_student values (201002, 201, 'Name 7', 22, 'Address 7'); 31 insert tempdb..test_student values (202001, 202, 'Name 8', 22, 'Address 8');
<创建实体类Entity>
1 package mybatistest; 2 3 import java.io.Serializable; 4 5 public class Clazz implements Serializable { 6 7 private static final long serialVersionUID = 1L; 8 9 private Integer classId; 10 11 private String className; 12 13 private String classAdminName; 14 15 public Integer getClassId() { 16 return classId; 17 } 18 19 public void setClassId(Integer classId) { 20 this.classId = classId; 21 } 22 23 public String getClassName() { 24 return className; 25 } 26 27 public void setClassName(String className) { 28 this.className = className; 29 } 30 31 public String getClassAdminName() { 32 return classAdminName; 33 } 34 35 public void setClassAdminName(String classAdminName) { 36 this.classAdminName = classAdminName; 37 } 38 39 @Override 40 public String toString() { 41 return "Clazz [classId=" + classId + ", className=" + className + ", classAdminName=" + classAdminName + "]"; 42 } 43 }