栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

MyBatis框架(三) 分页查询、代码生成器generator与mybatis

Java 更新时间:发布时间: 百科书网 趣学号

目录

1.分页查询

2.mybatis的代码生成器 ——generator

3. 缓存


1.分页查询

1.1 引入pageHeler依赖

        
        
            com.github.pagehelper
            pagehelper
            5.3.0
        

1.2. 在mybatis.xml 文件中设置拦截器

    
    
        
    

注意:代码的上下顺序

1.3 运行

PageHeler原理:

2.mybatis的代码生成器 ——generator

作用: 根据表生成实体类,和dao和xml映射文件。简单的CRUD。

官方文档:

MyBatis Generator Core – Introduction to MyBatis Generator

2.1 引入generator 依赖

        
        
            org.mybatis.generator
            mybatis-generator-core
            1.4.0
        

2.2 创建并配置 generator.xml 文件

须放在项目目录下





    
    

    

        
        
            
        

        
        
        

        
            
        

        
        
            
            
        

        
        
            
        

        
        
            
        


        
        

2.3 运行

package com.zsy.test;

import org.junit.Test;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;

import java.io.File;
import java.util.ArrayList;
import java.util.List;


public class Test01 {

    @Test
    public void test02() throws Exception{
        List warnings = new ArrayList();
        boolean overwrite = true;
        File configFile = new File("generator.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);
    }
}

注意:

使用 mybatis - generator快速生成时,其生成的映射文件的节点可能会重复生成

解决:

在 generator.xml 文件下的  jdbcConnection 加上

3. 缓存

缓存是存在于内存中的临时数据。 使用缓存减少和数据库的交互次数,提高执行效率。

适合放入缓存:

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

不适合放入缓存:

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

1. 一级缓存: 基于 PerpetualCache 的 HashMap 本地缓存,其存储作用域为 Session,当
Session flush 或 close 之后,该 Session 中的所有 Cache 就将清空。
2. 二级缓存与一级缓存其机制相同,默认也是采用 PerpetualCache,HashMap 存储,不同在
于其存储作用域为 Mapper(Namespace),并且可自定义存储源,如 Ehcache。
3. 对于缓存数据更新机制,当某一个作用域(一级缓存 Session/二级缓存 Namespaces)的进行
了 C/U/D 操作后,默认该作用域下所有 select 中的缓存将被 clear。

mybatis支持两种缓存:

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

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

3.1一级缓存

    //一级缓存  必须查询同一个数据
    //基于sqlSession完成的一级缓存
    @Test
    public void test01() throws Exception{
        Reader reader = Resources.getResourceAsReader("mybatis.xml");
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
        SqlSession session = factory.openSession();
        StudentMapper sm = session.getMapper(StudentMapper.class);

        //第一次查询编号=1的用户信息时--缓存中不存在 1 的用户,则向数据库查询-发送sql语句并把查询的结果放入缓存中。


        Student s1 = sm.selectByPrimaryKey(1);
        System.out.println(s1);


        Student s2 = sm.selectByPrimaryKey(1);
        System.out.println(s2);

运行结果:

 第一次查询编号 1 的用户时,若缓存中不存在,则向数据库发送sql语句,并把结果存入缓存中

如果 关闭 SqlSession 会清空缓存,再次查询 1 的用户会再向数据库发生sql语句

3.2 二级查询

开启二级查询

在mybatis.xml 中配置

    
        
        
    

配置映射文件

实体类实现序列化接口

 

测试

    //二级查询
    @Test
    public void test02() throws Exception{
        Reader reader = Resources.getResourceAsReader("mybatis.xml");
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
        SqlSession session = factory.openSession();
        StudentMapper sm = session.getMapper(StudentMapper.class);

        //第一次查询编号=1的用户信息时--缓存中不存在 1 的用户,则向数据库查询-发送sql语句并把查询的结果放入缓存中。

        //查询的结果放入一级缓存和二级缓存。 若二级缓存能命中 关闭一级查询 再次查询 1 的用户,不会再向数据库发生sql语句
        Student s1 = sm.selectByPrimaryKey(1);
        System.out.println(s1);

        session.close();

        SqlSession session1 = factory.openSession();
        StudentMapper sm1 = session1.getMapper(StudentMapper.class);
        Student s2 = sm1.selectByPrimaryKey(1);
        System.out.println(s2);
    }

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

映射语句文件中的所有 select 语句将会被缓存。
映射语句文件中的所有 insert,update 和 delete 语句会刷新缓存。
缓存会使用 Least Recently Used(LRU,j较少使用的)算法来收回。
根据时间表(比如 no Flush Interval,没有刷新间隔),缓存不会以任何时间顺序来刷新。
缓存会存储列表集合或对象(无论查询方法返回什么)的 1024 个引用。
缓存会被视为是 read/write(可读/可写)的缓存,意味着对象检索不是共享的,而且可以安
全地被调用者修改,而不干扰其他调用者或线程所做的潜在修改

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/959759.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号