MyBatis的多表联查(一对多)

创建数据库表:department(部门表),employee(员工表)同时设定部门和员工表的关系

CREATE TABLE department(
 d_id INT NOT NULL AUTO_INCREMENT,
 d_name VARCHAR(100),
 PRIMARY
 KEY(d_id)
)

CREATE TABLE employee(
 e_id INT NOT NULL AUTO_INCREMENT,
 e_name VARCHAR(30),
 e_gender VARCHAR(6),
 e_age INT,
 e_depart_id INT,
 PRIMARY KEY(e_id),
 FOREIGN KEY(e_depart_id) REFERENCES department(d_id)
)

1创建实体类Department和employee

public class Department {
    private int did ;
    private String dname ;
    private List<Employee> employeeList; //通过部门找员工 一对多

    @Override
    public String toString() {
        return "Department{" +
                "did=" + did +
                ", dname='" + dname + '\'' +
                ", employee=" + employeeList +
                '}';
    }

    public int getDid() {
        return did;
    }

    public void setDid(int did) {
        this.did = did;
    }

    public String getDname() {
        return dname;
    }

    public void setDname(String dname) {
        this.dname = dname;
    }

    public List<Employee> getEmployeeList() {
        return employeeList;
    }

    public void setEmployeeList(List<Employee> employeeList) {
        this.employeeList = employeeList;
    }
}
public class Employee {
    private int eid;
    private String ename ;
    private String egender ;
    private int eage ;

    @Override
    public String toString() {
        return "Employee{" +
                "eid=" + eid +
                ", ename='" + ename + '\'' +
                ", egender='" + egender + '\'' +
                ", eage=" + eage +
                '}';
    }

    public int getEid() {
        return eid;
    }

    public void setEid(int eid) {
        this.eid = eid;
    }

    public String getEname() {
        return ename;
    }

    public void setEname(String ename) {
        this.ename = ename;
    }

    public String getEgender() {
        return egender;
    }

    public void setEgender(String egender) {
        this.egender = egender;
    }

    public int getEage() {
        return eage;
    }

    public void setEage(int eage) {
        this.eage = eage;
    }
}

2、编写持久层接口方法

(DepartmentDao接口)

public interface DepartmentDao {
    //根据部门名称,查询部门信息(员工)
    Department findByDname(String name);
}

(EmployeeDao接口) 

public interface EmployeeDao {
    List<Employee>selectByDepartmentId(int departId);
}

 3、编写对应的映射文件DepartmentDao.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.offcn.dao.DepartmentDao">
<!--    一对多,方式一:嵌入式-->

<!--    <resultMap id="departmentResult" type="com.offcn.entity.Department">-->
<!--        <id column="d_id" property="did"/>-->
<!--        <result column="d_name" property="dname"/>-->
<!--        <collection property="employeeList" ofType="com.offcn.entity.Employee">-->
<!--            <id column="e_id" property="eid"/>-->
<!--            <result column="e_name" property="ename"/>-->
<!--            <result column="e_gender" property="egender"/>-->
<!--            <result column="e_age" property="eage"/>-->
<!--        </collection>-->
<!--    </resultMap>-->
<!--    <select id="findByDname" resultMap="departmentResult">-->
<!--        select * from department d , employee e-->
<!--        where-->
<!--        e.e_depart_id=d.d_id and d_name=#{name}-->
<!--    </select>-->

<!--    一对多,方式二:嵌套式查询-->

    <resultMap id="departmentResult" type="com.offcn.entity.Department">
        <id column="d_id" property="did"/>
        <result column="d_name" property="dname"/>
        <collection property="employeeList"
            select="com.offcn.dao.EmployeeDao.selectByDepartmentId" column="d_id">
        </collection>
    </resultMap>
    
    <select id="findByDname" resultMap="departmentResult">
            select * from department where d_name=#{name}
    </select>
    
</mapper>

嵌套式———EmployeeDao.xml映射文件

<mapper namespace="com.offcn.dao.EmployeeDao">
    <resultMap id="empResult" type="com.offcn.entity.Employee">
        <id column="e_id" property="eid"/>
        <result column="e_name" property="ename"/>
        <result column="e_gender" property="egender"/>
        <result column="e_age" property="eage"/>
    </resultMap>
    
    <select id="selectByDepartmentId" resultMap="empResult">
        select * from employee where e_depart_id=#{departId}
    </select>
</mapper>

4、编写对应的测试类

    @Test
    public void method() throws Exception{
        InputStream stream = Resources.getResourceAsStream("mybatisConfig.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(stream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        IdcardDao mapper = sqlSession.getMapper(IdcardDao.class);
        Idcard idcard = mapper.selectByCardno("110112199012127821");
        System.out.println(idcard);
    }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值