实体类
package cn.et.lesson03.dept;
// default package
import java.math.BigDecimal;
import java.util.List;
import cn.et.lesson03.emp.Emp;
/**
* 一个部门中有多个员工(即一对多)
* Dept中添加 list<Emp> 来体现
*
*/
public class Dept{
// Fields
private BigDecimal deptId;
private String deptName;
private String deptLoc;
//多个员工 即多个Emp对象
private List<Emp> emplist;
public BigDecimal getDeptId() {
return deptId;
}
public void setDeptId(BigDecimal deptId) {
this.deptId = deptId;
}
public String getDeptName() {
return deptName;
}
public void setDeptName(String deptName) {
this.deptName = deptName;
}
public String getDeptLoc() {
return deptLoc;
}
public void setDeptLoc(String deptLoc) {
this.deptLoc = deptLoc;
}
public List<Emp> getEmplist() {
return emplist;
}
public void setEmplist(List<Emp> emplist) {
this.emplist = emplist;
}
@Override
public String toString() {
return "Dept [deptId=" + deptId + ", deptName=" + deptName
+ ", deptLoc=" + deptLoc + ", emplist=" + emplist + "]";
}
}
接口:
package cn.et.lesson03.dept;
public interface DeptMapper {
public Dept selectDept(String deptNo);
}
dept_mapper.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="cn.et.lesson03.dept.DeptMapper">
<!--申明结果集映射 -->
<resultMap type="cn.et.lesson03.dept.Dept" id="dept">
<!-- column为数据库中的列名 property实体类中的字段名-->
<result column="deptNo" property="deptId"/>
<result column="dname" property="deptName"/>
<result column="loc" property="deptLoc"/>
<!--collection 在xml配置文件中 体现的是多个 即(一对多)
一对多结果集映射 有内存溢出的风险
因此有 延迟加载 概念
使用 fetchType="lazy" 需要cglib架包支持
fetchType="lazy" 延迟加载或者叫懒加载 即 当有需求时再去查询数据
并不会在 一开始的时候就去加载数据
-->
<collection property="emplist" column="deptno" javaType="java.util.List"
select="cn.et.lesson03.dept.DeptMapper.selectEmp" fetchType="lazy">
</collection>
</resultMap>
<select id="selectDept" resultMap="dept">
select * from dept where deptNo = #{0}
</select>
<select id="selectEmp" resultType="cn.et.lesson03.emp.Emp">
select empno as empId, ename as empName from emp where deptNo = #{0}
</select>
</mapper>
Test
package cn.et.lesson03.dept;
import java.io.InputStream;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class TestMybatis {
private static SqlSession getSession() {
//因为需要的mybatis.xml文件 不在同一层目录 所以这里才使用 cn.et.lesson01.TestMybatis
InputStream is = TestMybatis.class.getResourceAsStream("/cn/et/lesson03/mybatis.xml");
SqlSessionFactory session = new SqlSessionFactoryBuilder().build(is);
//openSession()获取操作数据库的类 SqlSession
SqlSession sqlSession = session.openSession();
return sqlSession;
}
public static void main(String[] args) {
SqlSession sqlSession = getSession();
//通过动态代理创建一个实体类 通过接口会自动调用配置文件
DeptMapper dm = sqlSession.getMapper(DeptMapper.class);
Dept dept = dm.selectDept("10");
System.out.println(dept);
}
}
Run