1.正文
1.分页插件PageHelper
2.mybatis的缓存
3.mybatis的代码生成器: generator
2.分页插件PageHelper.
作用: 帮你完成分页的功能?
思考: 分页的sql语句。
select * from 表名 [where 条件] limit (page-1) * pageSize,pageSize;
page:当前页码
pagesize:每页显示得条数
如何使用:
(1)引入pageHelper的jar包
<!--引入pageHelper-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.11</version>
</dependency>
(2)mybatis中设置pageHelper的拦截器
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>
(3)使用pageHelper
//设置分页属性pageNum:显示第几页 PageSize:每页显示的条数
PageHelper.startPage(2,5);
List<User> list = userDao.findAll();
//把查询的结果封装到PageInfo类中。
PageInfo<User> pageInfo=new PageInfo<User>(list);
System.out.println("总条数:"+pageInfo.getTotal());
System.out.println("总页数:"+pageInfo.getPages());
System.out.println("当前页码对应的数据:"+pageInfo.getList());
原理:
3. mybatis的代码生成器--generator
作用;根据表帮你生成实体类、和dao以及xml映射文件。就是简单的CRUD。
如何使用:
MyBatis Generator Core – Introduction to MyBatis Generator/
(1)引入mybatis-generator的依赖jar包。
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.4.0</version>
</dependency>
(2)generator的配置文件
<?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>
<!--找到你的mysql驱动jar的位置-->
<classPathEntry location="D:\repMaven\mysql\mysql-connector-java\8.0.20\mysql-connector-java-8.0.20.jar" />
<context id="DB2Tables" targetRuntime="MyBatis3">
<!--数据源的配置信息-->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mybatis?serverTimezone=Asia/Shanghai"
userId="root"
password="root">
</jdbcConnection>
<javaTypeResolver >
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!--java实体类的配置-->
<javaModelGenerator targetPackage="com.aaa.entity" targetProject=".\src\main\java">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!--映射文件的配置-->
<sqlMapGenerator targetPackage="mapper" targetProject=".\src\main\resources">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!--dao数据访问层的配置-->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.aaa.dao" targetProject=".\src\main\java">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!--数据库表和实体的映射关系
schema:数据库名称
tableName: 表名
domainObjectName:实体类名
enableUpdateByExample:是否生成复杂的修改操作
-->
<table schema="mybatis" tableName="tb_user" domainObjectName="User"
enableUpdateByExample="false" enableSelectByExample="false" enableDeleteByExample="false" enableCountByExample="false">
</table>
<table schema="mybatis" tableName="tb_stu" domainObjectName="Student"
enableUpdateByExample="false" enableSelectByExample="false" enableDeleteByExample="false" enableCountByExample="false">
</table>
</context>
</generatorConfiguration>
(3).运行你的配置文件
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
File configFile = new File("generatorConfig.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
myBatisGenerator.generate(null);
上面生成的代码带很多英文注释---看不懂。能不能去除
4.mybatis的缓存--了解
4.1什么是缓存
缓存是存在于==内存中==的临时数据。
mysql数据库中的数据存在----表--->磁盘上。 查询---程序IO读取磁盘的数据---添加--io向磁盘添加数据。
4.2缓存的好处
使用缓存减少和数据库的交互次数,提高执行效率。
4.3什么样的数据适合放入缓存
经常查询并且不经常改变的;数据的正确与否对最终结果影响不大的;
4.4什么样的数据不适合放入缓存
经常改变的数据;数据的正确与否对最终结果影响很大的;---数据安全性要求不高。例如:商品的库存,银行的汇率,股市的牌价;
4.5mybatis它也支持缓存
mybatis支持两种缓存
(1)一级缓存----基于SqlSession级别的缓存。默认一级缓存是开启的,不能关闭。
(2)二级缓存--基于SqlSessionFactory级别的缓存,它可以做到多个SqlSession共享数据。默认它是关闭。需要手动开启。
4.5.1演示一级缓存
//一级缓存---必须查询同一个数据
@Test
public void test01() throws Exception{
Reader resourceAsReader = Resources.getResourceAsReader("mybatis.xml");
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(resourceAsReader);
SqlSession session=factory.openSession();
UsersMapper mapper = session.getMapper(UsersMapper.class);
//第一次查询编号=2的用户信息--缓存不能命中,则向数据库查询-发送sql语句、把查询的结果放入缓存中。
//底层就是一个hashmap---(2,user)
Users users = mapper.selectByPrimaryKey(2);
System.out.println(users);
Users users1 = mapper.selectByPrimaryKey(2);
System.out.println(users1);
}
//一级缓存---基于sqlSession完成的一级缓存
@Test
public void test02() throws Exception{
Reader resourceAsReader = Resources.getResourceAsReader("mybatis.xml");
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(resourceAsReader);
SqlSession session=factory.openSession();
UsersMapper mapper = session.getMapper(UsersMapper.class);
//第一次查询编号=2的用户信息--缓存不能命中,则向数据库查询-发送sql语句、把查询的结果放入缓存中。
//底层就是一个hashmap---(2,user)
Users users = mapper.selectByPrimaryKey(2);
System.out.println(users);
session.close();
//开启新的SqlSession
SqlSession session1=factory.openSession();
UsersMapper mapper1 = session1.getMapper(UsersMapper.class);
Users users1 = mapper1.selectByPrimaryKey(2);
System.out.println(users1);
}
4.5.2演示二级缓存
(1)开启二级缓存
<settings>
<!--开启二级缓存-->
<setting name="cacheEnabled" value="true"/>
</settings>
(2)在映射文件中使用二级缓存
<!--使用二级缓存 这里面的所有查询都使用了二级缓存-->
<cache/>
(3)实体一定要实现序列化接口
(4)测试二级缓存
//二级缓存的测试
@Test
public void test03() throws Exception{
Reader resourceAsReader = Resources.getResourceAsReader("mybatis.xml");
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(resourceAsReader);
SqlSession session=factory.openSession();
UsersMapper mapper = session.getMapper(UsersMapper.class);
//第一次查询编号=2的用户信息--缓存不能命中,则向数据库查询-发送sql语句、把查询的结果放入缓存中。
//底层就是一个hashmap---(2,user);
//查询的结果放入一级缓存和二级缓存。 如果二级缓存能命中
Users users = mapper.selectByPrimaryKey(2);
System.out.println(users);
session.close();
//开启新的SqlSession
SqlSession session1=factory.openSession();
UsersMapper mapper1 = session1.getMapper(UsersMapper.class);
Users users1 = mapper1.selectByPrimaryKey(2);
System.out.println(users1);
}
查询顺序: 二级缓存----一级缓存----数据库。