2018 IDEA mybatis 一對多
阿新 • • 發佈:2019-02-07
注:本次以 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(); } }