MyBatis实现表的关联查询

一、一对一关联

例如根据班级的Id,查询与之关联的班主任的所有的信息。

teacher表

t_id varchar(50)

t_name varchar(50)

t_sex varchar(50)

t_age int

t_phonenumber varchar(50)

class表

c_id varchar(50)

c_name varchar(50)

teacher_id varchar(50)

定义后台mapper下的classDao.xml

其中select语句的写法如下:

 
     
     
         
         
         
             
             
             
             
             
         
     

二、一对多关联

例如以下情形:

农场不购买成本肥料和农药,所以需要自己以有机方式配,配肥配药的方式为技术员负责,技术员招募一些临时工,使用一定数量的原料,配完后在总重量上会有5%-15%之间的损耗。所以,技术员有配肥配药的增、删、改、查的管理功能,配肥配药记录包括:“配料记录编号”、日期、肥料或农药的名称(比如肥料1、农药1等简易的名称,10个汉字以内)、临时工的劳务费(以元为单位,100-500之间不等)、总重量损耗比、使用的各种不同原料的名称、使用的各种不同原料的数量(以kg为单位)。一条配肥或配药记录可以使用不同数量的多种原料,这个在数据库技术中称为“一对多”的数据管理问题。

不熟悉数据库的同学可以只用一张数据表包含:“配料记录编号”、日期、肥料或农药的名称、临时工的劳务费、总重量损耗比、鸡粪重量、马粪重量、牛粪重量、饼肥重量、稻壳重量、莲蓬壳重量、稻草重量、锯末重量、水重量、树叶重量。重量均以kg为单位。这样做的缺点是数据存储比较稀疏,并且以后不方便再添加或删除原料种类,所以,这种设计只能用来交作业,实际工作中是不会这么设计的。

熟悉数据库的同学可以分成两张数据表:第一张数据表包含“配料记录编号”、日期、肥料或农药的名称、临时工的劳务费、总重量损耗比;第二张数据表包含“配料记录编号”、一种原料名称、一种原料的使用数量。采用两张数据表可以节省重复记录的数据量,方便修改维护,这样每个“配料记录编号”在第一张数据表中是唯一的,每个“配料记录编号”在第二张数据表中可以重复,如果要修改临时工的劳务费,只需要修改第一张数据表中相应的记录,如果要修改所使用的原料,只需要修改第二张数据表中相应的记录。

fertilizer表:

package com.example.demo.entity;

import java.util.Date;
import java.util.List;

public class Fertilizer {
    private String id;
    private Date date;
    private String fertilizer_name;
    private int salary;
    private double loss;
    private List fertilizerIncludeList;

    public List getFertilizerIncludeList() {
        return fertilizerIncludeList;
    }

    public void setFertilizerIncludeList(List fertilizerIncludeList) {
        this.fertilizerIncludeList = fertilizerIncludeList;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    public String getFertilizer_name() {
        return fertilizer_name;
    }

    public void setFertilizer_name(String fertilizer_name) {
        this.fertilizer_name = fertilizer_name;
    }

    public int getSalary() {
        return salary;
    }

    public void setSalary(int salary) {
        this.salary = salary;
    }

    public double getLoss() {
        return loss;
    }

    public void setLoss(double loss) {
        this.loss = loss;
    }
}

fertilizerinclude表:

package com.example.demo.entity;

public class FertilizerInclude {
    private String id;
    private String fertinclude_name;
    private int num;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getFertinclude_name() {
        return fertinclude_name;
    }

    public void setFertinclude_name(String fertinclude_name) {
        this.fertinclude_name = fertinclude_name;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }
}

想要实现从两个表获取所有的完整数据。

fertilizerDao.xml层




    
    
        
        
        
        
        
        
            
            
            
        
    
    
        insert into
        fertilizer(id,date,fertilizer_name,salary,loss)
        values (#{id},#{date},#{fertilizer_name},#{salary},#{loss})
    
    
        insert into
        fertinclude(id,fertinclude_name,num)
        values (#{id},#{fertinclude_name},#{num})
    
    
        update fertilizer
        
            date=#{date},
            fertilizer_name=#{fertilizer_name},
            salary=#{salary},
            loss=#{loss}
        
        where id=#{id}
    
    
        update fertinclude
        
            fertinclude_name=#{fertinclude_name},
            num=#{num}
        
        where id=#{id}
    
    
        delete from
        fertilizer
        where id=#{id}
    
    
        delete from
        fertinclude
        where id=#{id}
    

 

你可能感兴趣的:(java)