mybatis04-分页插件、代码生成器、缓存

目录

1、分页插件

2、mybatis的代码生成器--generator

3、mybatis的缓存

 3.1 什么是缓存

3.2 缓存的好处

3.3 什么样的数据适合放入缓存

3.4 什么样的数据不适合放入缓存

3.5 mybatis它也支持缓存

二级缓存测试: 

二级缓存使用两种方式 


1、分页插件

作用: 帮你完成分页的功能?

思考: 分页的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());

原理

2、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="F:\MavenCK\repMaven\mysql\mysql-connector-java\8.0.28\mysql-connector-java-8.0.28.jar" />

    <context id="DB2Tables" targetRuntime="MyBatis3">
        <!--抑制注释-->
        <commentGenerator>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <!--数据源的配置信息-->
        <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.lwh.pojo" targetProject=".\src\main\java">
            <property name="enableSubPackages" value="true" />
            <property name="trimStrings" value="true" />
        </javaModelGenerator>
<!--mapper映射路径-->
        <sqlMapGenerator targetPackage="mapper"  targetProject=".\src\main\resources">
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>
<!--dao数据层的位置-->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.lwh.dao"  targetProject=".\src\main\java">
            <property name="enableSubPackages" value="true" />
        </javaClientGenerator>
<!--数据库与实体的映射关系
        schema:数据库名称
        tableName:表名
        domainObjectName:实体类名
        enableUpdateByExample 结尾的,表示是否生成复杂的sql
-->
        <table schema="mybatis" tableName="tbl_student" domainObjectName="Student"  enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" enableCountByExample="false">


        </table>

    </context>
</generatorConfiguration>

(3)运行你的配置文件

 List<String> warnings = new ArrayList<String>();
   boolean overwrite = true;
   File configFile = new File("config.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);

3、mybatis的缓存

 3.1 什么是缓存

缓存是存在于==内存中==的临时数据。

3.2 缓存的好处

使用缓存减少和数据库的交互次数,提高执行效率。

 

3.3 什么样的数据适合放入缓存

 经常查询并且不经常改变的; 数据的正确与否对最终结果影响不大的;

3.4 什么样的数据不适合放入缓存

经常改变的数据; 数据的正确与否对最终结果影响很大的;---数据安全性要求不高。 例如:商品的库存,银行的汇率,股市的牌价;

3.5 mybatis它也支持缓存

mybatis支持两种缓存

(1)一级缓存----基于SqlSession级别的缓存。默认一级缓存是开启的,不能关闭。

(2)二级缓存--基于SqlSessionFactory级别的缓存,它可以做到多个SqlSession共享数据。默认它是关闭。需要手动开启。

 一级缓存测试:同一个sqlsession执行了两次相同的sql,从控制台的日志看出 sql只执行了一遍,且两个结果的地址值相同。

 使用两个不同的sqlsession时,一级缓存失效,执行了两条sql语句

 @Test
    public void demo02() throws Exception{
        Reader reader = Resources.getResourceAsReader("mybatis.xml");
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
        SqlSession sqlSession = factory.openSession();
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
        Student student = mapper.selectByPrimaryKey(1);
        System.out.println(student);
        sqlSession.close();
        SqlSession sqlSession1 = factory.openSession();
        StudentMapper mapper1 = sqlSession1.getMapper(StudentMapper.class);
        Student student1 = mapper1.selectByPrimaryKey(1);
        System.out.println(student1);

    }

二级缓存测试: 

(1)开启 二级缓存

<settings>
        <!--开启二级缓存-->
        <setting name="cacheEnabled" value="true"/>
    </settings>

(2)在映射文件中使用二级缓存

  <!--使用二级缓存 这里面的所有查询都使用了二级缓存-->
  <cache/>

(3)实体一定要实现序列化接口

(4)测试二级缓存  (使用两个sqlsession时,sql只会执行一遍,二级缓存测试成功)

@Test
    public void demo02() throws Exception{
        Reader reader = Resources.getResourceAsReader("mybatis.xml");
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
        SqlSession sqlSession = factory.openSession();
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
        Student student = mapper.selectByPrimaryKey(1);
        System.out.println(student);
        sqlSession.close();
        SqlSession sqlSession1 = factory.openSession();
        StudentMapper mapper1 = sqlSession1.getMapper(StudentMapper.class);
        Student student1 = mapper1.selectByPrimaryKey(1);
        System.out.println(student1);

    }

二级缓存使用两种方式 

1、当使用<cache/>时,整个StudentMapper.xml的所有查询sql都开启二级缓存

 2、在sql语句中使用,设置userCache=true

 <select id="selectS" resultMap="BaseResultMap" useCache="true">

useCache默认为true,表示会将本条语句的结果进行二级缓存。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值