1. 程式人生 > >2018 IDEA mybatis 一對多

2018 IDEA mybatis 一對多

注:本次以 SyEmp員工 、SyDept部門 測試 , 一個部門對應多個員工。

一、一方放集合

private List<SyEmp> syEmpList;

public List<SyEmp> getSyEmpList() {
    return syEmpList;
}

public void setSyEmpList(List<SyEmp> syEmpList) {
    this.syEmpList = syEmpList;
}

二、一方mapper放配置

<第一種,聯查對映>

<!--對映Student物件的resultMap(結果對映集)-->
<resultMap type="cn.kaxlm6.mybatis.pojo.SyDept" id="SyDeptMapper">
    <result property="deptId" column="Dept_ID" jdbcType="INTEGER"/>
    <result property="deptName" column="Dept_Name" jdbcType="VARCHAR"/>
    <result property="deptRemark" column="Dept_Remark" jdbcType="VARCHAR"/>
    <result property="deptDisabled" column="Dept_Disabled" jdbcType="INTEGER"/>
    <!--一對多關聯對映:
       Collection表示關聯的是集合
       Property="syEmpList"對應的是Clazz類中List<SyEmp> syEmpList
       ofType="cn.kaxlm6.mybatis.pojo.SyEmp"表示對映的類為List<SyEmp>中的SyEmp
       fetchType="lazy"表示懶載入,即使用時才例項化
    -->
    <collection property="syEmpList" ofType="cn.kaxlm6.mybatis.pojo.SyEmp" fetchType="lazy">
        <result property="empId" column="Emp_ID" jdbcType="INTEGER"/>
        <result property="empName" column="Emp_Name" jdbcType="VARCHAR"/>
        <result property="empEmpno" column="Emp_EmpNo" jdbcType="VARCHAR"/>
        <result property="empPwd" column="Emp_Pwd" jdbcType="VARCHAR"/>
        <result property="empDeptid" column="Emp_DeptID" jdbcType="INTEGER"/>
        <result property="empRemark" column="Emp_Remark" jdbcType="VARCHAR"/>
        <result property="empDisabled" column="Emp_Disabled" jdbcType="INTEGER"/>
    </collection>
</resultMap>

<!--查詢語句-->
<select id="queryById" resultMap="SyDeptMapper">
    select
      *
    from tapwater.sy_emp m,tapwater.sy_dept d
    where m.Emp_DeptID = d.Dept_ID and d.Dept_ID = #{deptId}
</select>

<第二種,巢狀對映>
   
<!--對映Student物件的resultMap(結果對映集)-->
<resultMap type="cn.kaxlm6.mybatis.pojo.SyDept" id="SyDeptMapper">
    <result property="deptId" column="Dept_ID" jdbcType="INTEGER"/>
    <result property="deptName" column="Dept_Name" jdbcType="VARCHAR"/>
    <result property="deptRemark" column="Dept_Remark" jdbcType="VARCHAR"/>
    <result property="deptDisabled" column="Dept_Disabled" jdbcType="INTEGER"/>
    <!--一對多關聯對映:
       Collection表示關聯的是集合
       Property="syEmpList"對應的是Clazz類中List<SyEmp> syEmpList
       ofType="cn.kaxlm6.mybatis.pojo.SyEmp"表示對映的類為List<SyEmp>中的SyEmp
       fetchType="lazy"表示懶載入,即使用時才例項化
       column為主表的列名
       select為查詢的語句,我們呼叫的是介面代理方法
    -->
    <collection property="syEmpList" column="Dept_ID" 
        ofType="cn.kaxlm6.mybatis.pojo.SyEmp" fetchType="lazy" 
        select="cn.kaxlm6.mybatis.dao.SyEmpDao.queryById" >
    </collection>
</resultMap>

<!--查詢語句-->
<select id="queryById" resultMap="SyDeptMapper">
    select
      *
    from tapwater.sy_dept
    where Dept_ID = #{deptId}
</select>

注:從表mapper也必須有以下select

<!--查詢語句-->
<select id="queryById" resultMap="com.baidu.mybatis.pojo.SyEmp">
    select
      *
    from tapwater.sy_emp
    where Emp_DeptID = #{deptId}
</select>

三、測試

public class Tests {

    public static void main(String[] args) throws Exception {

        /**
         * 獲得SqlSession物件,通過SqlSession操作CRUD
         *
         */
        SqlSession sqlSession;

        //通過Resources類載入核心配置檔案,得到檔案的輸入流
        InputStream inputStream = Resources.getResourceAsStream("mybatisConfig.xml");
        //建立會話工廠,編譯配置檔案流,獲得sqlsessionfactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //通過sqlSessionFactory得到sqlsession物件
        sqlSession = sqlSessionFactory.openSession();

        SyDeptDao mapper = sqlSession.getMapper(SyDeptDao.class);
        System.out.println(mapper.queryById(9));

        sqlSession.commit();
        sqlSession.close();

    }
}