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"?>
搭建工程如下:

### 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的核心配置文件中开启懒加载:

#### 1.2.4 测试
// 一对一延迟加载
@Test
public void test1() {
List empList = empDao.findAll();
for (Emp emp : empList) {
System.out.println(emp.getId()+"---"+emp.getName());
}
}
执行测试单元,观察日志:
### 给大家的福利
**零基础入门**
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

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

因篇幅有限,仅展示部分资料
295

被折叠的 条评论
为什么被折叠?



