一.缓存
1.缓存框架
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/828033864d28a2018aa4af0702c06c68.png)
2.缓存查询顺序
- 先查询二级缓存
- 再查询一级缓存
- 查询数据库
- 原因:因为二级缓存可能有其他程序查出来的缓存可以直接用。
二级缓存没有,一级缓存有,可能是因为一级缓存还未关闭
3.第三方缓存EHCache
<dependency>
<groupId>org.mybatis.caches</groupId>
<artifactId>mybatis-ehcache</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
- 创建EHCache的配置文件ehcache.xml
<?xml version="1.0" encoding="utf-8" ?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
<diskStore path="D:\atguigu\ehcache"/>
<defaultCache
maxElementsInMemory="1000"
maxElementsOnDisk="10000000"
eternal="false"
overflowToDisk="true"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU">
</defaultCache>
</ehcache>
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[%d{HH:mm:ss.SSS}] [%-5level] [%thread] [%logger]
[%msg]%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
</root>
<logger name="com.atguigu.crowd.mapper" level="DEBUG"/>
</configurati>
二.逆向工程
1.逆向工程的配置
①添加依赖和插件
<build>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.0</version>
<dependencies>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
②创建mybatis的核心配置文件
③创建逆向工程的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<context id="DB2Tables" targetRuntime="MyBatis3">
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mybatis?
serverTimezone=UTC"
userId="root"
password="123456">
</jdbcConnection>
<javaModelGenerator targetPackage="com.atguigu.mybatis.pojo"
targetProject=".\src\main\java">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<sqlMapGenerator targetPackage="com.atguigu.mybatis.mapper"
targetProject=".\src\main\resources">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.atguigu.mybatis.mapper" targetProject=".\src\main\java">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<table tableName="t_emp" domainObjectName="Emp"/>
<table tableName="t_dept" domainObjectName="Dept"/>
</context>
</generatorConfiguration>
④数据库中建表即可
⑤生成逆向工程
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/df95d8a2a236c65c2189948b1e4576b3.png)
2.逆向工程查询示例
public void testMBG(){
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
// 根据id查询数据
// Emp emp = mapper.selectByPrimaryKey(1);
// System.out.println(emp);
// 查询数据
// List<Emp> emps = mapper.selectByExample(null);
// emps.forEach(System.out::println);
// 根据条件查询数据
// EmpExample example = new EmpExample();
// example.createCriteria().andEmpNameEqualTo("小明").andAgeGreaterThanOrEqualTo(20);
// example.or().andDepIdEqualTo(1);
// List<Emp> emps = mapper.selectByExample(example);
// emps.forEach(System.out::println);
// 普通修改功能(字段为null,那么修改也为null)
Emp emp = new Emp(1,"小黑",null,null);
// mapper.updateByPrimaryKey(emp);
// 选择性修改(字段为null,那么字段不变)
mapper.updateByPrimaryKeySelective(emp);
}
三.分页
1.分页插件加载步骤
①添加依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.2.0</version>
</dependency>
②核心配置文件中配置分页插件
## 2.分页插件的使用
public void testPage(){
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
//在查询功能之前开启分页功能
Page<Object> page = PageHelper.startPage(5, 4);
List<Emp> emps = mapper.selectByExample(null);
//在查询之后,获取分页相关的所有数据
// 导航分页的页码数
PageInfo<Emp> pageInfo=new PageInfo<>(emps,5);
emps.forEach(System.out::println);
System.out.println(pageInfo);
}