mybatis完成联表查询结果的封装。

1.mybatis完成联表查询结果的封装。
表与表之间通过外键会建立关联关系。 我们也可以通过联表查询得到多张表的数据。

我们java中如何通过实体类建立这种关系呢?

例如: 班级表1-----n学生表(外键列)。 查询学生信息时要求携带班级信息。一定使用了联表查询的sql语句.

select * from A join B on 联表条件
1.1 mybatis完成多对应一
创建实体类

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Dept {
    private Integer deptno;
    private String dname;
    private String loc;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Emp {
    private Integer empno;
    private String ename;
    private String job;
    private Integer mgr;
    private String hiredate;
    private Double sal;
    private Double comm;
    private Integer deptno;
    //一对一的部门对象属性
    private Dept dept;

}

映射文件

<?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">
<!--namespace:命名空间。 现在可以随便定义-->
<mapper namespace="com.ykq.dao.EmpDao">
    <resultMap id="EmpResultMap" type="com.ykq.entity.Emp">
        <id column="empno" property="empno"/>
        <result column="ename" property="ename"/>
        <result column="job" property="job"/>
        <result column="mgr" property="mgr"/>
        <result column="hiredate" property="hiredate"/>
        <result column="sal" property="sal"/>
        <result column="comm" property="comm"/>
        <result column="deptno" property="deptno"/>
        <!--
           assoication:关联对象 多对一的关联关系。 new Dept对象。
              javaType:指定属性的类型
              property:指定属性名。
        -->
        <association property="dept" javaType="com.ykq.entity.Dept">
            <id column="deptno" property="deptno"/>
            <result column="dname" property="dname"/>
            <result column="loc" property="loc"/>
        </association>

    </resultMap>

    <!--sql必须是联表sql-->
    <select id="getAll" resultMap="EmpResultMap">
        select *
        from emp e
                 join dept d on e.deptno = d.deptno
    </select>
</mapper>

测试

   @Test
    public void test() throws Exception {
        InputStream resourceAsStream = Resources.getResourceAsStream("mybatis.xml");
        EmpDao empDao = new SqlSessionFactoryBuilder().build(resourceAsStream).openSession().getMapper(EmpDao.class);
        List<Emp> all = empDao.getAll();
        for (Emp emp :all) {
            System.out.println(emp);
        }
    }

1.2 mybatis完成一对多--用的不是太多
查询所有的部门信息以及该部门下的员工信息。

posted on 2024-12-24 17:01  小木不痞  阅读(73)  评论(0)    收藏  举报

导航