14、mybatis多表关联查询 association定义关联对象封装规则及懒加载
生活随笔
收集整理的這篇文章主要介紹了
14、mybatis多表关联查询 association定义关联对象封装规则及懒加载
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 1、使用association單步查詢
- 1)、EmployeeMapper
- 2)、EmployeeMapper.xml
- 3)、Test
- 2、使用association進(jìn)行分步查詢
- 4)、DeptMapper
- 5)、DeptMapper.xml
- 6)、mybatis-config.xml
- 7)、EmployeeMapper
- 8)、EmployeeMapper.xml
- 9)、Test
- 3、懶加載
- 10)mybatis-config.xml
1、使用association單步查詢
1)、EmployeeMapper
package com.mi.dao;import com.mi.pojo.Employee; import org.apache.ibatis.annotations.MapKey; import org.apache.ibatis.annotations.Param;import java.util.List; import java.util.Map;public interface EmployeeMapper {//查詢員工及部門public Employee getEmpAndDept(Integer id); }2)、EmployeeMapper.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!--指定為接口的全類名--> <mapper namespace="com.mi.dao.EmployeeMapper"><!--使用association定義單個(gè)對(duì)象的封裝--><resultMap id="myEmpAndEmp2" type="com.mi.pojo.Employee"><id column="id" property="id"/><result column="last_name" property="lastName"/><result column="gender" property="gender"/><!--association可以指定聯(lián)合的javaBean對(duì)象property="dept" 指定哪個(gè)屬性是聯(lián)合的對(duì)象javaType:指定這個(gè)屬性對(duì)象的類型[不能省略]--><association property="dept" javaType="com.mi.pojo.Dept"><result column="d_id" property="id"/><result column="dept_name" property="deptName"/></association></resultMap><!--關(guān)聯(lián)查詢員工及部門--><select id="getEmpAndDept" resultMap="myEmpAndEmp2">select e.id,e.last_name, e.gender,d.id d_id,d.dept_name dept_namefrom employee e ,dept dwhere e.d_id = d.id and e.id = #{id}</select> </mapper>3)、Test
@Testpublic void getEmpAndDept() throws IOException {//1、獲取SqlSessionFactory對(duì)象SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();//2、獲取Sqlsesion對(duì)象SqlSession sqlSession = sqlSessionFactory.openSession();try {//3、獲取接口的實(shí)現(xiàn)類對(duì)象//會(huì)為接口自動(dòng)創(chuàng)建一個(gè)代理對(duì)象,代理對(duì)象去執(zhí)行增刪改查方法EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);Employee employee = mapper.getEmpAndDept(3);System.out.println(employee);System.out.println(employee.getDept());}finally {sqlSession.close();}}2、使用association進(jìn)行分步查詢
文章目錄
- 1、使用association單步查詢
- 1)、EmployeeMapper
- 2)、EmployeeMapper.xml
- 3)、Test
- 2、使用association進(jìn)行分步查詢
- 4)、DeptMapper
- 5)、DeptMapper.xml
- 6)、mybatis-config.xml
- 7)、EmployeeMapper
- 8)、EmployeeMapper.xml
- 9)、Test
- 3、懶加載
- 10)mybatis-config.xml
4)、DeptMapper
package com.mi.dao;import com.mi.pojo.Dept;public interface DeptMapper {public Dept getDeptById(Integer id); }5)、DeptMapper.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!--指定為接口的全類名--> <mapper namespace="com.mi.dao.DeptMapper"><select id="getDeptById" resultType="com.mi.pojo.Dept">select id,dept_name deptName from dept where id = #{id}</select></mapper>6)、mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration><settings><setting name="mapUnderscoreToCamelCase" value="true"/></settings><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis"/><property name="username" value="root"/><property name="password" value="root"/></dataSource></environment></environments><mappers><mapper resource="mapper/EmployeeMapper.xml"/><mapper resource="mapper/DeptMapper.xml"/></mappers> </configuration>7)、EmployeeMapper
package com.mi.dao;import com.mi.pojo.Employee; import org.apache.ibatis.annotations.MapKey; import org.apache.ibatis.annotations.Param;import java.util.List; import java.util.Map;public interface EmployeeMapper {//查詢員工及部門public Employee getEmpByIdStep(Integer id); }8)、EmployeeMapper.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!--指定為接口的全類名--> <mapper namespace="com.mi.dao.EmployeeMapper"><!--使用association進(jìn)行分步查詢1、先按照員工ID查詢員工信息2、根據(jù)查詢員工信息中的d_id值去部門表查出部門信息3、部門設(shè)置到員工中--><resultMap id="myEmpAndDeptStep" type="com.mi.pojo.Employee"><id column="id" property="id"/><result column="last_name" property="lastName"/><result column="gender" property="gender"/><!--association定義關(guān)聯(lián)對(duì)象封裝規(guī)則select :表明當(dāng)前屬性是調(diào)用select指定的方法查出的結(jié)果column : 指定將哪一列的值傳給這個(gè)方法流程:使用select 指定的方法(傳入column指定的這列參數(shù)的值)查出對(duì)象,并封裝給property--><association property="dept" select="com.mi.dao.DeptMapper.getDeptById" column="d_id"></association></resultMap><select id="getEmpByIdStep" resultMap="myEmpAndDeptStep" >select * from employee e where id = #{id}</select> </mapper>9)、Test
@Testpublic void getEmpByIdStep() throws IOException {//1、獲取SqlSessionFactory對(duì)象SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();//2、獲取Sqlsesion對(duì)象SqlSession sqlSession = sqlSessionFactory.openSession();try {//3、獲取接口的實(shí)現(xiàn)類對(duì)象//會(huì)為接口自動(dòng)創(chuàng)建一個(gè)代理對(duì)象,代理對(duì)象去執(zhí)行增刪改查方法EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);Employee employee = mapper.getEmpByIdStep(3);System.out.println(employee);System.out.println(employee.getDept());}finally {sqlSession.close();}}3、懶加載
10)mybatis-config.xml
在association進(jìn)行分步查詢的基礎(chǔ)上,增加懶加載配置
修改部分:
<!--延遲加載的全局開關(guān)--><setting name="lazyLoadingEnabled" value="true"/><!--任何方法的調(diào)用都會(huì)加載該對(duì)象的所有屬性--><setting name="aggressiveLazyLoading" value="false"/>全部配置
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration><settings><setting name="mapUnderscoreToCamelCase" value="true"/><!--Oracle數(shù)據(jù)庫需要指定數(shù)據(jù)為空的時(shí)候值為null,否則默認(rèn)為OTHER,Oracle不支持--><setting name="jdbcTypeForNull" value="NULL"/><!--延遲加載的全局開關(guān)--><setting name="lazyLoadingEnabled" value="true"/><!--任何方法的調(diào)用都會(huì)加載該對(duì)象的所有屬性--><setting name="aggressiveLazyLoading" value="false"/></settings><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis"/><property name="username" value="root"/><property name="password" value="root"/></dataSource></environment></environments><mappers><mapper resource="mapper/EmployeeMapper.xml"/><mapper resource="mapper/DeptMapper.xml"/></mappers> </configuration>文章目錄
- 1、使用association單步查詢
- 1)、EmployeeMapper
- 2)、EmployeeMapper.xml
- 3)、Test
- 2、使用association進(jìn)行分步查詢
- 4)、DeptMapper
- 5)、DeptMapper.xml
- 6)、mybatis-config.xml
- 7)、EmployeeMapper
- 8)、EmployeeMapper.xml
- 9)、Test
- 3、懶加載
- 10)mybatis-config.xml
總結(jié)
以上是生活随笔為你收集整理的14、mybatis多表关联查询 association定义关联对象封装规则及懒加载的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 13、mybatis多表关联查询级联属性
- 下一篇: 15、mybatis一对多关联查询 co