一、多对一的情况,其实就是SQL语句中的多表查询
这里以产品订单数据表 Bill
中的供应id号
,查询 供应商Provider表
中对应id
的proName
名字
1.BillMapper
中的方法标签
//根据输入的订单号进行模糊查询,与此订单供应商相同的所有订单
List<Bill> getBillList(Bill bill);
2.BillMapper.xml
中的设置
<select id="getBillList" parameterType="Bill" resultMap="getProviderName">
select * from smbms.smbms_bill where providerId=#{providerId}
</select>
<resultMap id="getProviderName" type="Bill">
<association property="provider" column="providerId" javaType="Provider"
select="getProvider">
</association>
</resultMap>
<select id="getProvider" resultType="Provider">
select id,proName from smbms.smbms_provider where id = #{providerId};
</select>
1. resultMap中的映射表示,
<resultMap id="getProviderName" type="Bill">
<association property="provider" column="providerId" javaType="Provider"
select="getProvider">
</association>
</resultMap>
输入的类型type是(多:比如学生 )type="Bill"
想要得到的类型javaType(一:比如老师) javaType="Provider"
此时的column
代表你希望依据Bill表中的哪一列进行多对一在Provider
中查找,也就是嵌套select
语句中
<select id="getProvider" resultType="Provider">
select id,proName from smbms.smbms_provider where id = #{providerId};
</select>
#{providerId
} 取的值,此时的语句,#{}里面其实无论些写什么,都会自动推测对应
column="providerId"
,所以说里面写什么不重要
而 association的property="provider"
<resultMap id="getProviderName" type="Bill">
<association property="provider" column="providerId" javaType="Provider"
select="getProvider">
</association>
</resultMap>
其实会根据属性“provider” 在 type="Bill"类
中查找属性类型设置为我们从表中查到的的内容,所以 Bill表格
中对应的实体类Bill
中需要时 provider实体类
,才能在结果直接将查到的Provider类赋
值给他,不然报错类型赋值异常,比如要将结果Provider provider 赋值给 String providerName
3. 实体类如下
package cn.smbms.pojo;
import java.math.BigDecimal;
import java.util.Date;
public class Bill {
private Integer id; //id
private String productName; //商品名称
private Provider provider;//供应商,此时设定为一个类,这个类我们不需要显示在Bill数据库中
public String getProviderName() {
return provider.getProName();
}
public void setProviderName(String providerName) {
provider.setProName(providerName);
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
}
二、简单理解,老师和学生的例子实体类
package pojo;
/**
* @author Sommer1111
* @date 2021/3/2 16:58
*/
public class Student {
private int id;
private String name;
private Teacher teacher;
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 Teacher getTeacher() {
return teacher;
}
public void setTeacher(Teacher teacher) {
this.teacher = teacher;
}
public Student(int id, String name, Teacher teacher) {
this.id = id;
this.name = name;
this.teacher = teacher;
}
public Student() {
}
}
package pojo;
/**
* @author Sommer1111
* @date 2021/3/2 16:59
*/
public class Teacher {
private int id;
private String name;
@Override
public String toString() {
return "Teacher{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
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 Teacher() {
}
public Teacher(int id, String name) {
this.id = id;
this.name = name;
}
}
1.studentMapper.xml
<?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="dao.StudentMapper">
<select id="getStudent" resultMap="StudentToTeacher">
select * from mybatis.student
</select>
<resultMap id="StudentToTeacher" type="Student">
<result property="id" column="id"></result>
<result property="name" column="name"></result>
<association property="teacher" column="tid" javaType="Teacher"
select="getTeacher">
</association>
</resultMap>
<select id="getTeacher" resultType="Teacher">
select * from mybatis.teacher where id = #{id};
</select>
</mapper>
3.学生的数据库表中并没有 teacher这个列
4. 取出来的数据
版权声明:本文为qq_42647903原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。