首页 > 其他分享 >Mybatis进阶

Mybatis进阶

时间:2024-09-25 18:53:36浏览次数:11  
标签:缓存 进阶 查询 mybatis SQL Mybatis 注解 page

一、日志管理

1552d24110f34e49b68687d03456a882.jpg

 mybatis主要使用logback来管理日志,具体内容之前的java进阶有说,链接如下

java基础进阶——log日志、类加载器、XML、单元测试、注解、枚举类_java logs是什么意思-CSDN博客

二、动态SQL

动态SQL指的是根据参数数据动态组织SQL的技术。

三、MyBatis二级缓存

我们使用mybatis查询一条数据两次,第一次查询从硬盘读取,第二次查询还从硬盘读取是比较慢的,如果把第一次查询的结果存到内存一块空间中,在内存中读取会快至少几十倍。

1.二级缓存和缓存范围

478bd740533146e3b45978113fc15cea.jpg 88536da72e05414f9f89e3aea76ad4be.jpg

 一级缓存的存在时间比较短,SqlSession会话结束后缓存就会清空,所以需要mapper命名空间这个二级缓存。不同的命名空间对应不同的二级缓存区域,只有在使用相同命名空间执行相同的查询语句并且没有对查询结果进行修改等操作时,才会从二级缓存中获取数据。

2.二级缓存运行规则和开启 

08c56fa7a1c94fac9e5569bc166a2fa2.jpg

387ab5589a1d473cb479a640167f8cc3.jpg

mapper文件中在mapper标签的第一行添加cache标签 

3.cache标签属性的解读

(1)eviction

eviction是缓存的清除策略,当缓存对象数量达到上限后,自动触发对应算法对缓存对象清除

1.LRU    最近最久未使用:移除最长时间不被使用的对象。

2.FIFO  先进先出:按对象进入缓存的顺序来移除它们。

3.SOFT 软引用:移除基于垃圾收集器状态和软引用规则的对象。

4.WEAK 弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象。

(2)flushInterval

代表间隔多长时间自动清空缓存,单位亳秒,600000毫秒=10分钟

(3)size

缓存存储上限,用于保存对象或集合(1个集合算1个对象)的数量上限

(4)readOnly

设置为true,代表返回只读缓存,每次从缓存取出的是缓存对象本身,这种执行效率较高

设置为false代表每次取出的是缓存对象的"副本”,每一次取出的对象都是不同的,这种安全性较高

4.useCache和flushCache

(1)useCache

可以在<insert>等四大sql标签使用useCache属性设置值为false表示不开启缓存。

(2)flushCache

可以在四大sql标签添加该属性,设置值为true表示一句sql执行完,立马刷新缓存空间。

四、分页查询

1.PageHelper分页

(1)PageHelper使用流程

直接浏览器搜pageHelper到官网有详细用法

d9f7b135d5a54e398d82bf3b085f6014.jpg

(2)引入PageHelper和jsqlparser依赖        

        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.1.10</version>
        </dependency>
        <dependency>
            <groupId>com.github.jsqlparser</groupId>
            <artifactId>jsqlparser</artifactId>
            <version>2.0</version>
        </dependency>

(3)增加Plugin配置 

    <plugins>
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
            <property name="helperDialect" value="mysql"/>
            <property name="reasonable" value="true"/>
        </plugin>
    </plugins>

说明:

(1)plugins插件是mybatis的一个特色,通过插件可以扩展mybatis的能力;

(2)interceptor属性:代表拦截器,需要配置PageHelper的核心类;

(3)helperDialect配置项,设置为mysql代表使用limit分页,不同数据库的分页操作不同,所以这个配置项必须设置。

(4)reasonable配置项,代表分页合理化。

(4)测试方法

    @Test
    public void testPageHelper(){
        SqlSession sqlSession = null;
        try {
            sqlSession = MybatisUtils.getSqlSession();
            PageHelper.startPage(10,10);
            Page page = (Page)sqlSession.selectList("goods.selectAll");
            System.out.println("总页数:"+page.getPages());
            System.out.println("总记录数:"+page.getTotal());
            System.out.println("开始行号:"+page.getStartRow());
            System.out.println("结束行号:"+page.getEndRow());
            List<Goods> list = page.getResult();
            for(Goods goods : list){
                System.out.println(goods.getTitle());
            }

        } catch (Exception e) {
            throw new RuntimeException(e);
        } finally {
            MybatisUtils.closeSqlSession(sqlSession);
        }
    }

2.不同数据库分页

(1)Mysql

b33653e6e8ed418694019482f6711a63.jpg

 从第10行开始读取20行

(2)Oracle

ca98fe531e514961a6bec7d6e256efba.jpg

 读取12行到20行数据

(3)SQL Server

2000年

e61ffd3dd51a45f08a78cdc3aa05cd1e.jpg

 读取第16 17 18行数据

2012年至今

267bbdcdad124dd5a90e7de6d91ce4a1.jpg

 读取到5 6 7 8 9行数据

五、mybatis整合C3P0连接池

mybatis自己生成的连接池并没有许多现有的连接池技术好,现在介绍一款。

1.引入maven依赖

2.建一个datasource包下创建一个工厂类

/**
 * C3PO与MyBatis兼容使用的数据源工厂类
 */
public class C3P0DataSourceFactory extends UnpooledDataSourceFactory {
    public C3P0DataSourceFactory() {
        this.dataSource = new ComboPooledDataSource();
    }
}

3.配置文件mybatis-config.xml

 不同连接池的数据连接配置的属性名称不同(驱动、数据连接、用户名、密码)

还可以设置默认连接数量和最大最小连接数量

 

六、mybatis批次处理

使用foreach标签

1.批次插入,批次删除

346ac2974970432882e01d4878169606.jpg

 2.批次处理优缺点

优点: 比一条一条sql处理快

缺点:无法获得插入数据生成的id

         批量生成的SQL太长,可能会被服务器拒绝

七、mybatis注解开发

1.常用注解

08be093d6b27453d9e64210dd54485dd.jpg

2.注解开发流程

注解开发不需要使用mapper xml文件,需要建立一个dao包,里面存放操作sql的接口,在接口的抽象方法上面添加常用注解。

3.注解方式查询流程

(1)创建接口和查询方法

在dao包下创建接口和方法,并在方法上使用@Select注解,SQL传参使用@Param注解

06a05ad3b812496aa3e322e59ddba7a4.jpg

(2)在mybatis配置文件配置坐标

b27e93641d184b1d8344f7d672bfe068.jpg

 (3)测试方法

4.注解方式插入返回自动生成的主键

要添加@SelectKey注解,里面要配置statement属性(mysql查询主键id的SQL语句),

keyProperty属性(实体对象的主键属性名goodsId),returnType属性(主键的数据类型Integer.class)

标签:缓存,进阶,查询,mybatis,SQL,Mybatis,注解,page
From: https://blog.csdn.net/2202_75483664/article/details/142450890

相关文章

  • 量化交易学习日记8-大单净额进阶(张江高科为例)
    说明大单净额是反应主力的动向,这没错,可是,成交额多少算大单?之前写的大单净额功能我自己测试了一下,拿庄股张江高科建仓的阶段举个例子:可以看到,不管是大单净额(门槛是25万)还是全资金流向,流出都是惊人的,可是,建仓阶段不应该是主力进入的过程吗,我对该股进行过长期跟踪,这是一......
  • 进阶美颜功能技术开发方案:探索视频美颜SDK
    视频美颜SDK(SoftwareDevelopmentKit)作为提升视频质量的重要工具,越来越多地被开发者关注与应用。接下俩,笔者将深入探讨进阶美颜功能的技术开发方案,助力开发者更好地利用视频美颜SDK。 一、视频美颜SDK的核心功能视频美颜SDK的核心功能主要包括人脸检测、肤色调整、磨皮美白、祛斑去......
  • Mybatis基础操作
    一、设置日志mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl在Mybatis当中我们可以借助⽇志,查看到sql语句的执⾏、执⾏传递的参数以及执⾏结果二、XML映射SQL在MyBatis中,你可以选择两种主要方式来编写SQL映射:使用XML映射文件或者......
  • 资金进阶司库|规划与创新创景:引领业务、高效运营、战略增值
    连载导语司库体系建设是企业实现财务数字化转型和资金管理现代化的重要手段,是企业实现战略转型和高质量发展的关键支撑,也是企业应对复杂多变的全球经济环境和风险挑战的重要保障。司库承担着组织中的领导和战略引导作用,越来越多的企业以司库建设为抓手,加快推进自身财务数智化......
  • mybatis-plus
    Mybatis-PlusMyBatis-Plus(简称MP)是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。其突出的特性如下:无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑强大的CRUD操作:内置通用Mapper、通用Service,提供了大量的通用的......
  • MapStruct 超神进阶用法,让你的代码效率提升十倍!
     MapStruct是一个强大且灵活的映射框架,很好的解决有关对象转换的问题,实现了代码的简洁和性能的兼顾。MapStruct的常规用法,网上有很多教程了,本文将列举一些进阶用法,方便日常开发使用。expression在转化的时候,执行java表达式,直接看例子:@Mapper(componentModel="spring")public......
  • MapStruct 超神进阶用法,让你的代码效率提升十倍!
     MapStruct是一个强大且灵活的映射框架,很好的解决有关对象转换的问题,实现了代码的简洁和性能的兼顾。MapStruct的常规用法,网上有很多教程了,本文将列举一些进阶用法,方便日常开发使用。expression在转化的时候,执行java表达式,直接看例子:@Mapper(componentModel="spring")public......
  • Mybatis
    一、Mybatis概述1.1简介1.1.1Mybatis介绍MyBatis(官网:mybatis–MyBatis3|简介https://mybatis.org/mybatis-3/zh_CN/index.html)是一款优秀的开源的持久层框架,用于简化JDBC的开发。是Apache的一个开源项目iBatis,2010年这个项目由apache迁移到了googlecode,并且改名......
  • mybatis用的jdk的动态代理技术
    MyBatis的动态代理主要使用的是JDK动态代理技术。在MyBatis中,Mapper接口的实现是通过JDK动态代理生成的。具体来说,当你调用Mapper接口的方法时,MyBatis会通过JDK动态代理机制生成一个代理对象,代理对象会拦截对Mapper接口方法的调用,并将这些调用处理为相应的SQL操作。JDK动态代理......
  • Python高手必读的3本书——Python进阶三剑客
    Python的语法简单、易于学习,即使没有编程背景的人,也可以在较短时间内掌握Python的基础知识,用于编写简单的自动化脚本、数据处理和分析。目前,Python已经成为世界范围内最受欢迎的编程语言。入门Python简单,精通Python难,在这一波大模型技术背景下,精通Python已经势在必......