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完成一对多--用的不是太多
查询所有的部门信息以及该部门下的员工信息。

浙公网安备 33010602011771号