mybatis框架的分页插件PageHelper、缓存以及mybatis的代码生成器:generator

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);
    }

查询顺序: 二级缓存----一级缓存----数据库。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值