MyBatis

MyBatis 二级缓存全详解

☆樱花仙子☆ 提交于 2020-04-27 19:11:01
[TOC] 我们在上一篇文章 ( https://mp.weixin.qq.com/s/4Puee_pPCNArkgnFaYlIjg ) 介绍了 MyBatis 的一级缓存的作用,如何开启,一级缓存的本质是什么,一级缓存失效的原因是什么? MyBatis 只有一级缓存吗?来找找答案吧! MyBatis 二级缓存介绍 上一篇文章中我们介绍到了 MyBatis 一级缓存其实就是 SqlSession 级别的缓存,什么是 SqlSession 级别的缓存呢?一级缓存的本质是什么呢? 以及一级缓存失效的原因?我希望你在看下文之前能够回想起来这些内容。 MyBatis 一级缓存最大的共享范围就是一个SqlSession内部,那么如果多个 SqlSession 需要共享缓存,则需要开启二级缓存,开启二级缓存后,会使用 CachingExecutor 装饰 Executor,进入一级缓存的查询流程前,先在CachingExecutor 进行二级缓存的查询,具体的工作流程如下所示 当二级缓存开启后,同一个命名空间(namespace) 所有的操作语句,都影响着一个 共同的 cache ,也就是二级缓存被多个 SqlSession 共享,是一个 全局的变量 。当开启缓存后,数据的查询执行的流程就是 二级缓存 -> 一级缓存 -> 数据库。 二级缓存开启条件 二级缓存默认是不开启的

mybatis中实体类的属性名和数据中的字段名不一致三种解决方案

℡╲_俬逩灬. 提交于 2020-04-27 18:49:04
第一种、sql语句起命名 select * from people where id = #{id} 改为 select LastName,id,sex where id =#{id} 第二种、在mybatis全局配置文件中开启驼峰命名 <configuration> <settings> <setting name="mapUnderscoreToCamelCase" value="true" /> </settings> </configuration> 第三种、使用高级映射resulpMap 优点是可以重复利用,使用效率高 来源: oschina 链接: https://my.oschina.net/u/4115727/blog/4255561

SpringBoot有多重要?面试用SpringBoot把面试官唬住了要30k都行

我与影子孤独终老i 提交于 2020-04-27 17:28:24
Java程序员为什么一定要会Spring Boot? 随着近年来微服务的流行,越来越多的企业需要快速的开发,而Spring Boot除了以注解为主的开发,还有其他的绑定,例如,对服务器进行了绑定和绑定和默认对Spring的最大化配置,所以开发者能够尽快进行开发代码、发布和测试自己的项目,这符合了现今微服务快速开发、测试和部署的需要,于是越来越多的企业选择Spring Boot作为开发的选型,进而使得Spring Boot更加兴旺起来,而今面试大厂Spring Boot都是必问的技术点,所以Java开发一定要对Spring Boot有深入的了解。 怎么学习Spring Boot?给各位老铁分享一些自己收藏的Spring Boot资料吧。希望各位老铁能够好好学习 天天向上! 一份是来自阿里P8大牛手撸的《Spring Boot2教程》 一份是《深入浅出Spring Boot2》书籍电子版 一份是《Spring Boot技术好文精选整理》 转发+关注,加我VX【tkzl6666】获得这三份Spring Boot资料的免费领取方式。 阿里P8大牛手撸的《Spring Boot2教程》内容概述 纯Java搭建SSM项目 创建一个Spring Boot项目的三种方法 理解Spring Boot项目中的parent 理解Spring BootP配置文件app1ication.properties

【MyBatis深入剖析】应用分析与最佳实践(下)

橙三吉。 提交于 2020-04-27 15:23:04
MyBatis编程式开发 MyBatis编程式开发步骤 MyBatis和MySQL Jar包依赖 全局配置文件mybatis-config.xml 映射器Mapper.xml Mapper接口 编程式开发伪代码 @Test public void show() { SqlSession session = null; try { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); session = sqlSessionFactory.openSession(); Student student = session.selectOne("com.fly.crud.mapper.StudentMapper.selectDataById", 1); log.info("student jsonStr is {}", JSON.toJSONString(student)); } catch (Exception e) { log.error(

mybatis源码学习:插件定义+执行流程责任链

安稳与你 提交于 2020-04-27 15:20:12
目录 一、自定义插件流程 二、测试插件 三、源码分析 1、inteceptor在Configuration中的注册 2、基于责任链的设计模式 3、基于动态代理的plugin 4、拦截方法的intercept(invocation) 四、插件开发插件pagehelper 1、引入相关依赖 2、全局配置 3、测试分页 五、插件总结 前文传送门: mybatis源码学习:从SqlSessionFactory到代理对象的生成 mybatis源码学习:一级缓存和二级缓存分析 mybatis源码学习:基于动态代理实现查询全过程 一、自定义插件流程 自定义插件,实现Interceptor接口。 实现intercept、plugin和setProperties方法。 使用@Intercepts注解完成插件签名。 在主配置文件注册插件。 /** * 自定义插件 * Intercepts:完成插件签名,告诉mybatis当前插件拦截哪个对象的哪个方法 * * @author Summerday */ @Intercepts({ @Signature(type = StatementHandler.class, method = "parameterize", args = Statement.class) }) public class MyPlugin implements Interceptor

SpringBoot系列(十)优雅的处理统一异常处理与统一结果返回

≯℡__Kan透↙ 提交于 2020-04-27 12:41:56
SpringBoot系列(十)统一异常处理与统一结果返回 往期推荐 SpringBoot系列(一)idea新建Springboot项目 SpringBoot系列(二)入门知识 springBoot系列(三)配置文件详解 SpringBoot系列(四)web静态资源配置详解 SpringBoot系列(五)Mybatis整合完整详细版 SpringBoot系列(六)集成thymeleaf详解版 Springboot系列(七) 集成接口文档swagger,使用,测试 SpringBoot系列(八)分分钟学会Springboot多种解决跨域方式 SpringBoot系列(九)单,多文件上传的正确姿势 目录 1. 全局异常捕获与处理 2. 统一结果返回与统一异常 3. controller代码测试与结果 4. 404异常特殊处理。 5. 总结 引言 :  日常开发过程中,难免有的程序会因为某些原因抛出异常,而这些异常一般都是利用try ,catch的方式处理异常或者throw,throws的方式抛出异常不管。这种方法对于程序员来说处理也比较麻烦,对客户来说也不太友好,所以我们希望既能方便程序员编写代码,不用过多的自己去处理各种异常编写重复的代码又能提升用户的体验,这时候全局异常处理就显得很重要也很便捷了,是一种不错的选择。 1. 全局异常捕获与处理  因为现在主流的都是 前后端分离 的项目

MyBatis 一级缓存实现详解及使用注意事项

ⅰ亾dé卋堺 提交于 2020-04-27 11:30:22
一级缓存介绍 在应用运行过程中,我们有可能在一次数据库会话中,执行多次查询条件完全相同的SQL,MyBatis提供了一级缓存的方案优化这部分场景,如果是相同的SQL语句,会优先命中一级缓存,避免直接对数据库进行查询,提高性能。具体执行过程如下图所示。 每个SqlSession回话中会创建Executor执行器,每个Executor执行器中有一个 Local Cache 。当用户发起查询时,MyBatis根据当前执行的语句生成 MappedStatement ,在Local Cache进行查询,如果缓存命中的话,直接返回结果给用户,如果缓存没有命中的话,查询数据库,结果写入 Local Cache ,最后返回结果给用户。 一级缓存配置 我们来看看如何使用MyBatis一级缓存。开发者只需在MyBatis的配置文件中,添加如下语句,就可以使用一级缓存。共有两个选项, SESSION 或者 STATEMENT ,默认是 SESSION 级别,即在一个MyBatis会话中执行的所有语句,都会共享这一个缓存。一种是 STATEMENT 级别,可以理解为缓存只对当前执行的这一个 Statement 有效。 <setting name="localCacheScope" value="SESSION"/> 一级缓存实验 开启一级缓存,范围为会话级别,调用三次 getStudentById

SpringBoot系列(十)优雅的处理统一异常处理与统一结果返回

☆樱花仙子☆ 提交于 2020-04-27 11:10:40
SpringBoot系列(十)统一异常处理与统一结果返回 往期推荐 SpringBoot系列(一)idea新建Springboot项目 SpringBoot系列(二)入门知识 springBoot系列(三)配置文件详解 SpringBoot系列(四)web静态资源配置详解 SpringBoot系列(五)Mybatis整合完整详细版 SpringBoot系列(六)集成thymeleaf详解版 Springboot系列(七) 集成接口文档swagger,使用,测试 SpringBoot系列(八)分分钟学会Springboot多种解决跨域方式 SpringBoot系列(九)单,多文件上传的正确姿势 目录 1. 全局异常捕获与处理 2. 统一结果返回与统一异常 3. controller代码测试与结果 4. 404异常特殊处理。 5. 总结 引言 :  日常开发过程中,难免有的程序会因为某些原因抛出异常,而这些异常一般都是利用try ,catch的方式处理异常或者throw,throws的方式抛出异常不管。这种方法对于程序员来说处理也比较麻烦,对客户来说也不太友好,所以我们希望既能方便程序员编写代码,不用过多的自己去处理各种异常编写重复的代码又能提升用户的体验,这时候全局异常处理就显得很重要也很便捷了,是一种不错的选择。 1. 全局异常捕获与处理  因为现在主流的都是 前后端分离 的项目

高校宿舍管理系统详细需求分析说明书

北慕城南 提交于 2020-04-27 02:24:34
(详细)高校宿舍管理系统需求分析说明书(文末--> 获取原文档 ) 版本状态 版本 作者 参与者 起止日期 注释 审阅者 团队 版本 日期 签名 教学管理委员会 V1.1 2019.06.13 胡桂虹 教学管理委员会 V1.2 2019.06.14 胡桂虹 分发 姓名 位置 分发方式 分发日期 目 录 1 引言... 1 1.1 编写目的... 1 1.2 读者对象... 1 1.3 术语解释... 1 1.4 参考资料... 2 2 项目概述... 3 2.1 项目背景... 3 2.2 项目目标... 3 3 高校宿舍管理系统总体功能... 4 4 系统需求优先级... 5 5 业务需求... 6 5.1 主要业务流程图... 6 5.1.1 用户管理业务流程设计... 6 5.1.2 楼栋管理业务流程设计... 7 5.1.3 宿舍管理业务流程设计... 8 5.1.4 维修管理业务流程设计... 9 5.1.5 报表管理业务流程设计... 10 5.1.6 登记管理业务流程设计... 11 5.1.7 床位管理业务流程设计... 12 5.2 系统功能需求... 13 5.2.1 角色分析... 13 5.2.2 业务功能分析... 13 5.2.3 用户管理模块需求设计... 14 5.2.4 楼栋管理模块需求设计... 16 5.2.5 宿舍管理模块需求设计... 18

spring 中常用的两种事务配置方式以及事务的传播性、隔离级别

守給你的承諾、 提交于 2020-04-26 22:51:02
转: spring 中常用的两种事务配置方式以及事务的传播性、隔离级别 在前面的文章中总结了spring事务的5中配置方式,但是很多方式都不用而且当时的配置使用的所有参数都是默认的参数,这篇文章就看常用的两种事务配置方式并信息配置事务的传播性、隔离级别、以及超时等问题,废话不说下面就来看看! 一、注解式事务 1、注解式事务在平时的开发中使用的挺多,工作的两个公司中看到很多项目使用了这种方式,下面看看具体的配置demo。 2、事务配置实例 (1)、spring+mybatis 事务配置 <!-- 定义事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!--使用注释事务 --> <tx:annotation-driven transaction-manager="transactionManager" /> (2)、spring+hibernate 事务配置 <!-- 事务管理器配置,单数据源事务 --> <bean id="transactionManager" class="org