本文将阐述mybatis中的表在一对多关系的情况下完成查询操作。
1、环境约束
- win10 64位操作系统
- idea2018.1.5
- jdk-8u162-windows-x64
- mybatis3.2.8
- mysql 6.5
2、前提约束
- 完成mybatis的延迟加载 https://www.jianshu.com/p/b0e441e314db
3、操作
- 创建一个班级表、学生表以及插入数据
create table t_class(id int, name varchar(20));
insert into t_class(id,name) values(1,'java132');
insert into t_class(id,name) values(2,'java133');
create table t_stu(id int, name varchar(20),classid int);
insert into t_stu(id,name,classid) values(1,'ali',1);
insert into t_stu(id,name,classid) values(2,'zhangli',1);
insert into t_stu(id,name,classid) values(3,'xiaoli',2);
insert into t_stu(id,name,classid) values(4,'erli',2);
- 加入两张表的实体类
Clazz.java
package net.wanho.entity;
import java.io.Serializable;
import java.util.List;
public class Clazz implements Serializable {
private int id;
private String name;
private List<Student> students;
public Clazz(int id, String name) {
this.id = id;
this.name = name;
}
public Clazz() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Student> getStudents() {
return students;
}
public void setStudents(List<Student> students) {
this.students = students;
}
}
Student.java
package net.wanho.entity;
import java.io.Serializable;
public class Student implements Serializable {
private int id;
private String name;
private int classid;
public Student(int id, String name, int classid) {
this.id = id;
this.name = name;
this.classid = classid;
}
public Student() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getClassid() {
return classid;
}
public void setClassid(int classid) {
this.classid = classid;
}
}
- 在UserMapper.java中加入方法声明
- 在UserMapper.xml中加入标签
<select id="queryClazz" resultMap="queryClazzResultMap">
select * from t_class
</select>
<select id="queryStudents" resultMap="queryStudentsResultMap">
select * from t_student where classid=#{id}
</select>
<resultMap id="queryClazzResultMap" type="net.wanho.entity.Clazz">
<id property="id" column="id"></id>
<result property="name" column="name"></result>
<!--少的这一方,即班级的主键-->
<collection property="students" select="queryStudents" column="id">
</collection>
</resultMap>
<resultMap id="queryStudentsResultMap" type="net.wanho.entity.Student">
<id property="id" column="id"></id>
<result property="name" column="name"></result>
</resultMap>
- 测试
//关键代码
String resource ="mybatis-config.xml";
Reader reader = Resources.getResourceAsReader(resource);
SqlSessionFactory sqlSessionFactory =new SqlSessionFactoryBuilder().build(reader);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<Clazz> clazzList = userMapper.queryClazz();
System.out.println(clazzList);
以上就是mybatis中一对多查询的过程。