1、数据表准备
这里使用一个班级和一个学生数据表
创建pojo:Student、Clazz
创建mapper接口:StudentMapper、ClazzMapper
创建mapper映射文件:StudentMapper.xml、ClazzMapper.xml
2、多对一
多对一 所以 多的那个表为主表,一的那个为副表,即在Student主表中添加Clazz副表
package com.cky.pojo;
public class Student {
private Integer sid;
private String sname;
private Clazz clazz;
public Student(Integer sid, String sname, Clazz clazz) {
this.sid = sid;
this.sname = sname;
this.clazz = clazz;
}
public Student() {
}
@Override
public String toString() {
return "Student{" +
"sid=" + sid +
", sname='" + sname + '\'' +
", clazz=" + clazz +
'}';
}
public Integer getSid() {
return sid;
}
public void setSid(Integer sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public Clazz getClazz() {
return clazz;
}
public void setClazz(Clazz clazz) {
this.clazz = clazz;
}
}
多种方式,常见的包括三种:
● 第一种方式:一条SQL语句,级联属性映射。
● 第二种方式:一条SQL语句,association。
● 第三种方式:两条SQL语句,分步查询。(这种方式常用:优点一是可复用。优点二是支持懒加载。)
2.1级联属性映射。
StudentMapper.xml
<?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="com.cky.mapper.StudentMapper">
<resultMap id="StudentResultMap" type="Student">
<id property="sid" column="sid"></id>
<result property="sname" column="sname"></result>
<result property="clazz.cid" column="cid"></result>
<result property="clazz.cname" column="cname"></result>
</resultMap>
<select id="selectByid" resultMap="StudentResultMap">
select s.sid,s.sname,c.cid,c.cname from t_stu s left join t_clazz c on s.cid=c.cid where s.sid=#{sid}
</select>
</mapper>
测试类
package