Mybatis进阶

一、日志管理

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)测试方法

    @Testpublic 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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/149311.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Qt获取本机Mac地址、Ip地址

一、简述 今天给大家分享一个获取本机IP地址和Mac地址的方法&#xff0c;经过多次测试&#xff0c;台式机、笔记本等多个设备&#xff0c;暂时没有发现问题。 由于很多时候本地安装了虚拟机、蓝牙、无线网卡或者其他设备等&#xff0c;会有多个Mac地址&#xff0c;所以需要进…

SQL Server2012保姆安装教程----带你快速上手数据库创建

目录 1.前言 2.安装准备 3.参考文章 4.安装过程 5.快速上手 5.1如何连接服务器 5.2创建数据库 5.3添加新的文件 5.4属性介绍 5.5创建表的引入 1.前言 我之前使用的就是mysql数据库&#xff0c;这个数据库使用的比较多&#xff0c;我学的初期也是这个&#xff1b; 但是…

虚拟机使用FileZilla软件实现文件互传

软件版本&#xff1a;FizeZilla 3.63.2 VirtualBox7.0.20 1.设置桥接模式(网卡) 2.查看ip 在控制台输入ifconfig 3.在终端打开控制台安装FTP服务 sudo apt-get install vsftpd 等待软件自动安装&#xff0c;安装完成以后使用 VI命令打开 /etc/vsftpd.conf&#xff0c;命令…

Kali 联网

VMware 中分三种网络模式 桥接模式&#xff1a;默认余宿主机 VMnet0 绑定&#xff0c;像一台独立机 NAT 模式&#xff1a;默认余宿主机 VMnet8 绑定&#xff0c;需要通过物理机连接外网 仅主机模式&#xff1a;默认余宿主机 VMnet1 绑定&#xff0c;只能与物理机通信 VMware…

3. 轴指令(omron 机器自动化控制器)——>MC_MoveVelocity

机器自动化控制器——第三章 轴指令 6 MC_MoveVelocity变量▶输入变量▶输出变量▶输入输出变量 功能说明▶指令详情▶时序图▶重启运动指令▶多重启动运动指令▶异常 动作示例▶动作示例▶梯形图▶结构文本(ST) MC_MoveVelocity 使用伺服驱动器的位置控制模式&#xff0c;进行…

股价已暴涨64000%,估值比英伟达还高,Costco股票还能投资吗?

猛兽财经核心观点&#xff1a; &#xff08;1&#xff09;自1985年上市以来&#xff0c;Costco的股价已经上涨了64,000%以上。 &#xff08;2&#xff09;该公司已成为了美股市场上最被高估的公司之一&#xff08;估值比英伟达还高&#xff09;。 &#xff08;3&#xff09;猛兽…

八大排序——万字长文带你剖析八大排序(C语言)

本篇文章主要介绍八大排序的思想和具体实现&#xff0c;也会分析具体的时间复杂度和空间复杂度&#xff0c;提醒一些容易出现的坑和实现一些不同版本的排序&#xff0c;以及这些不同排序之间的效率分析 目录 1.插入排序 1.1直接插入排序 1.1.1 直接插入排序的思想&#xff…

linux 下的静态库与动态库

目录 一、介绍 1、静态库 2、动态库 二、操作 1、静态库 2、动态库 3、使用库文件 &#xff08;1&#xff09;方法一 &#xff08;2&#xff09;方法二 &#xff08;3&#xff09;方法三 一、介绍 1、静态库 静态链接库实现链接操作的方式很简单&#xff0c;即程序文…

【2024W38】肖恩技术周刊(第 16 期):白嫖AI的最佳时段

周刊内容: 对一周内阅读的资讯或技术内容精品&#xff08;个人向&#xff09;进行总结&#xff0c;分类大致包含“业界资讯”、“技术博客”、“开源项目”和“工具分享”等。为减少阅读负担提高记忆留存率&#xff0c;每类下内容数一般不超过3条。 更新时间: 星期天 历史收录:…

同等学力申硕英语网课如何选择

很多考生想知道同等学力申硕英语网课如何选择&#xff0c;小编告诉大家&#xff0c;首先明确自己的学习目标和需求是为了提高口语、阅读、写作还是听力能力? 只有明确了自己的学习目标和需求&#xff0c;才能更好地选择适合自己的课程和平台。 二、选择知名品牌和口碑良好的平…

怎么一键更换PPT模板?2个做PPT必备的办公神器推荐!

在主打快节奏的当下&#xff0c;一份精美的PPT演示文稿往往能够为你赢得更多的关注和机会。但不可否认的是&#xff0c;制作一份高质量的PPT并非易事&#xff0c;特别是当你需要频繁更换PPT模板以应对不同场合时&#xff0c;根本抽不出时间来逐一修改。 本文将为大家介绍2款强…

什么是上层封禁海外流量

上层封禁海外流量&#xff08;Upper-layer Blocking of Overseas Traffic&#xff09;是一种网络安全策略&#xff0c;旨在通过在网络传输的上层进行流量控制和过滤&#xff0c;从而阻止来自海外的恶意流量或不必要的访问。这一措施主要用于防止分布式拒绝服务&#xff08;DDoS…

多线程——“死锁”

目录 前言 一、一个线程&#xff0c;一把锁 1.问题介绍 2.可重入锁 二、两个线程&#xff0c;两把锁 1.问题介绍 2.解决方式 三、N个线程&#xff0c;M把锁 1.哲学家就餐问题 2.解决方式 结尾 前言 “死锁”是多线程代码中一类常见的问题&#xff0c;加锁是能解决线…

java算法OJ(1)位运算

目录 1.前言 2.正文 2.1位运算符号 2.1俩数相除 2.1.1题目 2.1.2示例 2.1.3题解 2.2二进制求和 2.2.1题目 2.2.2示例 2.2.3题解 2.3只出现一次的数字 2.3.1题目 2.3.2示例 2.3.3题解 2.4只出现一次的数字&#xff08;进阶版&#xff09; 2.4.1题目 2.4.2示例…

怎么在Proteus中找到排阻

1、打开安装好的Proteus&#xff0c;点击上方菜单栏中的“库”&#xff0c;再选择“从库选取零件”&#xff0c;或者在左侧元件列表中单击鼠标右键&#xff0c;再点击右键菜单中的“从库中挑选”选项。 2、之后会打开元器件库&#xff0c;我们打开类别中的“Resistors”&#x…

方法部分 学习

方法是程序中最小的执行单元 方法的定义调用 public static void 方法名&#xff08;&#xff09;{ 方法体 } 写在main方法外面&#xff0c;在main函数里面直接调用带参数&#xff1a;public static void 方法名&#xff08;int num1 &#xff0c; int num2&am…

付费计量应用过程(Payment Metering Application process)

The Payment Metering Application process is the combination of the business and support processes as the resultant interactions between the business and support functions, which thus describes the dynamic behavior of the system as a whole. 付费计量…

postman中使用Pre-request Script

一、get方法 get请求时 &#xff0c;有多个params&#xff0c;并且有一个参数为sign&#xff0c;这个参数是有其他params拼接之后md5加密得到的&#xff0c;如何通过js语句获取params参数并生成sign。 const CryptoJS require(crypto-js); // 引入 CryptoJS 库进行 MD5 加密…

深度学习(5):逻辑斯蒂回归Logistic

文章目录 一、逻辑斯蒂回归&#xff08;Logistic Regression&#xff09;二、KL 散度&#xff08;相对熵&#xff09;三、交叉熵&#xff08;Cross-Entropy&#xff09;四、关系五、总结 一、逻辑斯蒂回归&#xff08;Logistic Regression&#xff09; 概述 逻辑斯蒂回归是一种…

MiniCPM-V 2.6训练时fuse_adam报错

原本pip install deepspeed安装了0.15.1版本的&#xff0c;但是在进行sft训练的时候还是报错。大概就是fuse_adam这个op编译有错&#xff0c;c版本要大于17什么的&#xff0c;一堆错。看了一堆解决方案尝试后发现如下这样的有用&#xff1a; 1.下载DeepSpeend源码 git clone ht…