10【Mybatis延迟加载】

INSERT INTO emp VALUES (2, ‘李四’, 22, ‘浙江绍兴’, 6800.00, 4);
INSERT INTO emp VALUES (3, ‘小明’, 25, ‘广东云浮’, 6600.00, 2);
INSERT INTO emp VALUES (4, ‘小红’, 23, ‘河南信阳’, 7000.00, 3);
INSERT INTO emp VALUES (5, ‘张明’, 25, ‘山东临沂’, 8000.00, 1);


##### 2)引入依赖:



org.mybatis mybatis 3.5.5
<!--mysql依赖-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.47</version>
</dependency>

<!--日志依赖-->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
</dependency>

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.12</version>
</dependency>

##### 3)MyBatis核心配置文件:



<?xml version="1.0" encoding="utf-8" ?>
<settings>
    <!--日志配置-->
    <setting name="logImpl" value="STDOUT\_LOGGING"/>
    <!--开启全局的懒加载(默认值:false)-->
    <setting name="lazyLoadingEnabled" value="true"/>
</settings>

<typeAliases>
    <package name="com.dfbz.entity"/>
</typeAliases>

<!-- default 默认使用那个运行环境 -->
<environments default="dev">
    <!--配置dev运行环境-->
    <environment id="dev">
        <!--事务管理器:JDBC事务管理-->
        <transactionManager type="JDBC"></transactionManager>
        <!--POOLED指定采用mybatis内置的连接池支持-->
        <dataSource type="POOLED">
            <property name="driver" value="com.mysql.jdbc.Driver"></property>
            <property name="url" value="jdbc:mysql://localhost:3306/test?characterEncoding=UTF8"></property>
            <property name="username" value="root"></property>
            <property name="password" value="admin"></property>
        </dataSource>
    </environment>
</environments>

<mappers>
    <package name="com.dfbz.dao"/>
</mappers>

##### 4)实体类:


* Emp:



package com.dfbz.entity;

import lombok.Data;

/**
* @author lscl
* @version 1.0
* @intro:
*/
@Data
public class Emp {
private Integer id;
private String name;
private Integer age;
private String addr;
private Double salary;

// 一个员工属于一个部门
private Dept dept;

}


* Dept:



package com.dfbz.entity;

import lombok.Data;

import java.util.List;

/**
* @author lscl
* @version 1.0
* @intro:
*/
@Data
public class Dept {
private Integer id;
private String name;
private String location;

// 一个部门下有多个员工
private List<Emp> empList;

}


##### 5)dao接口:


* EmpDao:



package com.dfbz.dao;

import com.dfbz.entity.Emp;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Set;

/**
* @author lscl
* @version 1.0
* @intro:
*/
public interface EmpDao {

}


* DeptDao:



package com.dfbz.dao;

import com.dfbz.entity.Dept;

import java.util.List;

/**
* @author lscl
* @version 1.0
* @intro:
*/
public interface DeptDao {

}


##### 6)mapper.xml:


* DeptDao.xml:



<?xml version="1.0" encoding="UTF-8"?>

* DeptDao.xml:



<?xml version="1.0" encoding="UTF-8"?>

搭建工程如下:


![在这里插入图片描述](https://img-blog.csdnimg.cn/5f210eb63ff04c7e810b1b16a16169cc.png#pic_center)


### 1.2 一对一实现延时加载


#### 1.2.1 需求


* 需求:查询Emp员工信息时候,也要显示Dept部门信息,但Dept信息用到的时候再向数据库发送查询语句。


SQL语句:



– 一对一延迟加载
– 需求:查询员工,同时也要显示部门。但部门信息是再用到的时候再查询.
– 实现过程:
– 1) 查询员工
SELECT * FROM emp;

– 3) 使用Dept对象数据时候,查询部门
SELECT * FROM dept WHERE id=1;


#### 1.2.2 dao接口


* EmpDao:



public interface EmpDao {
List findAll();
}


* DeptDao:



public interface DeptDao {
Dept findById(Integer id);
}


#### 1.2.3 接口映射


* DeptDao.xml:



<?xml version="1.0" encoding="UTF-8"?>
<select id="findById" resultType="dept">
    select * from dept where id=#{id}
</select>

* EmpDao.xml:



<?xml version="1.0" encoding="UTF-8"?>
    <!--

column: 查询出来的哪一列需要当做参数传递给select中的方法
select: 查询部门的方法全名
–>





<select id="findAll" resultMap="empResultMap">
        select * from emp
</select>


> 
> **Tips:将SQL语句拆分为两条后,查询的列和实体类属性名一致时可以不用手动映射;**
> 
> 
> 


* 在MyBatis的核心配置文件中开启懒加载:




![在这里插入图片描述](https://img-blog.csdnimg.cn/369d1f7adc7f4037877b933a1bc7980b.png#pic_center)


#### 1.2.4 测试



// 一对一延迟加载
@Test
public void test1() {
List empList = empDao.findAll();

for (Emp emp : empList) {
    System.out.println(emp.getId()+"---"+emp.getName());
}

}


执行测试单元,观察日志:



### 给大家的福利


**零基础入门**


对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。


![](https://img-blog.csdnimg.cn/img_convert/95608e9062782d28f4f04f821405d99a.png)


同时每个成长路线对应的板块都有配套的视频提供:


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/a91b9e8100834e9291cfcf1695d8cd42.png#pic_center)


因篇幅有限,仅展示部分资料
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值