mybatis
文章平均质量分 60
lang20150928
stay hungry stay foolish
展开
-
MyBatis中数据库字段强制大小写统一问题
MyBatis在进行对象映射时如果为Map,此时会因为不同的数据库导致Map中的key值大小写不同而导致程序中出现问题。可以通过扩展ObjectWrapperFactoryj解决问题原创 2022-11-02 09:53:45 · 2740 阅读 · 0 评论 -
SpringBoot项目中动态切换数据源创建SqlSessionFactory实例
在有些项目当中,需要多个数据源,甚至是不同类型的数据库,但是想公用MyBatis的接口以及xml资源。此时可以根据数据源动态创建新的SqlSessionFactory实例,而不是在启动过程中创建的单例。对应的代码如下,主要有两点大体逻辑直接从org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration#sqlSessionFactory中拷贝而来(这样可以共用在配置文件中针对MyBatis的各种配置)需要修改org.mybatis.spr原创 2021-11-11 18:42:12 · 3104 阅读 · 8 评论 -
MyBatis热部署
监控目标文件,需要依赖<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version></dependency>当文件变动时,获取SqlSessionFactory对象当中的Configuration,并通过反射获取其中的属性mappedStat原创 2021-09-11 16:09:23 · 182 阅读 · 1 评论 -
整合数据源使用MyBatis日志
package com.xquant.xpms.commons.config;import com.zaxxer.hikari.HikariDataSource;import org.apache.ibatis.logging.Log;import org.apache.ibatis.logging.LogFactory;import org.apache.ibatis.logging.jdbc.ConnectionLogger;import org.springframework.boot.a原创 2021-09-01 22:25:04 · 95 阅读 · 0 评论 -
MyBatis框架版本升级方案
目前产品版本中Spring、MyBatis的相关版本如下所示<spring.version>3.2.10.RELEASE</spring.version><mybatis-spring.version>1.1.1</mybatis-spring.version><mybatis.version>3.1.1</mybatis.version>考虑到这些版本历史悠久,而且日志信息不全,甚至存在一些bug,另外这些版本也不能与Spr原创 2021-07-07 09:03:57 · 574 阅读 · 0 评论 -
MyBatis源码学习系列文章目录
系列文章目录MyBatis开发要点MyBatis一级缓存MyBatis二级缓存MyBatis日志模块MyBatis日志增强MyBatis数据源MyBatis缓存模块(二级缓存深入理解)MyBatis反射模块MyBatis工作流程-初始化阶段一MyBatis工作流程-初始化阶段二MyBatis工作流程-代理封装阶段MyBatis工作流程-数据访问阶段MyBatis工作流程-与Spring整合...原创 2021-04-24 21:44:25 · 207 阅读 · 0 评论 -
动态数据源循环依赖问题
假如在项目中定义动态数据源,以下配置中DynamicDataSource是org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource的子类 @ConfigurationProperties("spring.datasource.source") @Bean public DataSource sourceDataSource() { return DruidDataSourceBuilder原创 2020-12-25 15:37:29 · 2525 阅读 · 3 评论 -
关于MyBatis配置文件读取优先级的问题
文章目录 前言 一、系统属性设置方式 1、外部配置文件 2、xml配置 3、接口设置 二、以上方式加载优先级问题 三、占位符指定默认值注意事项 总结 前言MyBatis支持在配置文件和mapper文件中使用占位符,而替换这些占位符的系统属性可以通过引入外部配置文件、xml配置和通过接口传入。提示:以下是本篇文章正文内容,下面案例可供参考 一、系统属性设置方式 1、外部配置文件在mybatis的配置文件中如下配置即可<properties resource="org/mybati..原创 2020-12-24 14:46:28 · 681 阅读 · 0 评论 -
MyBatis工作流程-与Spring整合
系列文章目录MyBatis开发要点MyBatis一级缓存MyBatis二级缓存MyBatis日志模块MyBatis日志增强MyBatis数据源MyBatis缓存模块(二级缓存深入理解)MyBatis反射模块MyBatis工作流程-初始化阶段一MyBatis工作流程-初始化阶段二MyBatis工作流程-代理封装阶段MyBatis工作流程-数据访问阶段MyBatis工作流程-与Spring整合文章目录系列文章目录 前言与MyBatis相关的Beanbean实例化的流程1. Sql原创 2020-12-19 16:12:11 · 192 阅读 · 1 评论 -
MyBatis工作流程-数据访问阶段
系列文章目录MyBatis开发要点MyBatis一级缓存MyBatis二级缓存MyBatis日志模块MyBatis日志增强MyBatis数据源MyBatis缓存模块(二级缓存深入理解)MyBatis反射模块MyBatis工作流程-初始化阶段一MyBatis工作流程-初始化阶段二MyBatis工作流程-代理封装阶段MyBatis工作流程-数据访问阶段文章目录系列文章目录 前言 MapperMethod执行流程 Executor的三种模式Executor的查询流程 1. prepa原创 2020-12-18 18:01:03 · 218 阅读 · 0 评论 -
MyBatis工作流程-代理封装阶段
系列文章目录MyBatis开发要点MyBatis一级缓存MyBatis二级缓存MyBatis日志模块MyBatis日志增强MyBatis数据源MyBatis缓存模块(二级缓存深入理解)MyBatis反射模块MyBatis工作流程-初始化阶段一MyBatis工作流程-初始化阶段二MyBatis工作流程-代理封装阶段文章目录系列文章目录 前言 SqlSession 映射器实例 总结 前言 既然有了 SqlSessionFactory,顾名思义,我们可以从中获得SqlSessi原创 2020-12-16 18:13:13 · 135 阅读 · 0 评论 -
MyBatis工作流程-初始化阶段二
系列文章目录MyBatis开发要点MyBatis一级缓存MyBatis二级缓存MyBatis日志模块MyBatis日志增强MyBatis数据源MyBatis缓存模块(二级缓存深入理解)MyBatis反射模块MyBatis工作流程-初始化阶段一MyBatis工作流程-初始化阶段二文章目录系列文章目录 前言 mapper解析目标 mapper解析流程 总结 前言 在上一章节当中我们主要是讲解了MyBatis工作流程初始化阶段的第一步,解析配置文件。解析配置文件主要使用的XMLC原创 2020-12-15 20:18:33 · 183 阅读 · 0 评论 -
MyBatis工作流程-初始化阶段一
系列文章目录MyBatis开发要点MyBatis一级缓存MyBatis二级缓存MyBatis日志模块MyBatis日志增强MyBatis数据源MyBatis缓存模块(二级缓存深入理解)MyBatis反射模块MyBatis工作流程-初始化阶段文章目录系列文章目录 前言 MyBatis工作流程简介 MyBatis初始化 1. 构造XMLConfigBuilder对象 2. 解析配置文件 总结 前言 每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的原创 2020-12-11 21:55:56 · 178 阅读 · 0 评论 -
MyBatis反射模块
系列文章目录MyBatis开发要点MyBatis一级缓存MyBatis二级缓存MyBatis日志模块MyBatis日志增强MyBatis数据源MyBatis缓存模块(二级缓存深入理解)MyBatis反射模块文章目录系列文章目录 前言 MyBatis反射模块 总结 前言 MyBatis作为一个ORM框架,除了将对象存储到数据库(对象属性与数据库字段的映射),同样还要考虑将数据库字段映射为对象的属性。比如一个非常简单的查询语句City findByState(@Param("st原创 2020-12-10 20:14:51 · 441 阅读 · 0 评论 -
MyBatis缓存模块(二级缓存深入理解)
系列文章目录MyBatis开发要点MyBatis一级缓存MyBatis二级缓存MyBatis日志模块MyBatis日志增强MyBatis数据源MyBatis缓存模块(二级缓存深入理解)文章目录系列文章目录 前言 Blocking cache 二级缓存的真实实现 eviction算法 总结 前言 在前面介绍二级缓存的时候,我们说到了org.apache.ibatis.cache.decorators.TransactionalCache这个类的注释,对应的内容如下:The 2n原创 2020-12-04 16:24:57 · 426 阅读 · 1 评论 -
MyBatis数据源
系列文章目录MyBatis开发要点MyBatis一级缓存MyBatis二级缓存MyBatis日志模块MyBatis日志增强MyBatis数据源文章目录系列文章目录 前言 MyBatis数据源概览 从连接池获取连接popConnection 归还连接到连接池pushConnection 总结 前言在上一章中我们介绍了MyBatis中的日志增强功能,通过创建JDBC关键模块Connection等的代理增加了日志功能,Connection用于创建客户端与数据库服务器的连接,这个连接是基于原创 2020-12-03 20:04:23 · 210 阅读 · 0 评论 -
MyBatis日志增强
系列文章目录MyBatis开发要点MyBatis一级缓存MyBatis二级缓存MyBatis日志模块MyBatis日志增强文章目录系列文章目录 前言 MyBatis日志增强简单介绍 MyBatis日志增强源码分析 一个配置解决所有MyBatis日志的开关问题 总结 前言在上一章当中我们介绍了MyBatis的日志模块没有自己的具体实现,而是通过适配器模式兼容了其它主流日志组件的功能。这样通过org.apache.ibatis.logging.Log就可以打印日志了。本章我们来聊一聊My原创 2020-12-03 14:34:14 · 645 阅读 · 0 评论 -
MyBatis日志模块
系列文章目录MyBatis开发要点MyBatis一级缓存MyBatis二级缓存MyBatis日志模块文章目录系列文章目录 前言 MyBatis日志实现 优雅加载日志组件 前言MyBatis定了自己的Log接口以及级别,但是并没有考虑自己,而是使用第三方的日志,但是第三方日志多种多样而且日志级别也不同,MyBatis是如何对接的呢?如果当前环境中存在多个第三方的日志插件,MyBatis又该如何选择才能保证日志正常而又不会出现异常呢? MyBatis日志实现首先看一下MyBatis的原创 2020-12-02 17:58:06 · 181 阅读 · 0 评论 -
MyBatis二级缓存
系列文章目录MyBatis开发要点MyBatis一级缓存MyBatis二级缓存文章目录系列文章目录 前言 MyBatis二级缓存详解 总结 前言MyBatis为了减少对数据库的查询,避免频繁的数据库交互,提供了一级缓存和二级缓存。上一章中我们详细从源码角度讲解了一级缓存的方方面面,本章我们继续从源码的角度分析二级缓存提示:以下是本篇文章正文内容,下面案例可供参考 MyBatis二级缓存详解在上一章中我们分析一级缓存,主要的源码都在org.apache.ibatis.executo原创 2020-12-01 20:22:18 · 202 阅读 · 0 评论 -
MyBatis一级缓存
系列文章目录MyBatis开发要点MyBatis缓存文章目录系列文章目录 前言 一、一级缓存 总结 前言MyBatis为了减少对数据库的查询,避免频繁的数据库交互,提供了一级缓存和二级缓存。本文将对一级缓存和二级缓存进行介绍,同时结合源码说明MyBatis缓存存在的问题提示:以下是本篇文章正文内容,下面案例可供参考 一、一级缓存一级缓存在MyBatis中对应的属性为org.apache.ibatis.executor.BaseExecutor#localCache。在构造Bas原创 2020-11-30 20:19:55 · 143 阅读 · 0 评论 -
MyBatis开发要点
系列文章目录文章目录系列文章目录 前言 一、为什么需要ORM框架 二、MyBatis快速入门1. 加入MyBatis的映射文件2. 加入MyBatis的核心配置文件3. 对应代码 三、MyBatis开发要点1. resultType还是resultMapresultTyperesultMap到底应该用resultType还是resultMap2. 怎么传递多个参数3. 怎么获取主键4. SQL元素和SQL的参数5. 动态SQL6. 使用MyBatis怎么进行批量的操作7. 关联查询关联查询几个需要注意原创 2020-11-30 18:53:48 · 187 阅读 · 0 评论 -
兼容Oracle与MySQL的那些事(分页问题)
系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录前言一、MyBatis提供的RowBounds参数二、MyBatis提供的databaseId方式三、Mybatis-PageHelper解决方案四、MyBatis-Plus解决方案总结前言分页对于一个系统来说通常都是不可回避的问题,本文倒不是仔细分析其中的性能问题(索引优原创 2020-11-10 11:31:39 · 1376 阅读 · 1 评论 -
兼容Oracle与MySQL的一些事
文章目录前言一、字段类型差异二、函数差异 1、几种兼容方案a. 利用Mybatis的特性b. 是否存在相同的函数c. 自定义同名函数三、语法差异四、锁的差异总结前言由于公司目前主要使用的数据库为Oracle,然后部分兼容MySQL,后期会考虑全部支持Oracle和MySQL。由于二者的各种差异,我们必须有一套可行的方案减少工作量。在兼容Oracle与MySQL的那些事中我们已经仔细讨论过在数据层对多数据库的支持了,接下来的目标就是结合这种支持同时考虑其他手段达到目标了。本文从以下几点来谈一下对兼容考原创 2020-11-09 10:56:58 · 1809 阅读 · 7 评论 -
兼容Oracle与MySQL的那些事
文章目录前言一、MyBatis兼容多数据的方式 1、databaseIdProvider二、使用步骤1.引入库2.读入数据总结前言一个系统要兼容多种数据库应该是很多系统都要面对的问题。曾经,Hibernate作为数据库层的王者,风光了几十年,说实在话,它在兼容多种数据库方面确实方便且功能强大,通过方言(dialect)就可以了。但是,目前笨重的Hibernate已经渐渐走出了历史舞台,MyBatis以轻巧性能高成为数据层的事实框架,而且扩展也非常之多。所有本章主要只会涉及到MyBatis中的相关知识原创 2020-11-03 20:30:37 · 895 阅读 · 2 评论 -
Spring容器中获取SqlSessionFactoryBean类型Bean失败
引言:今天在公司里测试遇到一个bug先上代码:private static SqlSessionFactory getSqlSessionFactory() throws Exception { if (sqlSessionFactory == null) { SqlSessionFactoryBean sqlSessionFactoryBean = SpringBeanUtils.g...原创 2020-04-13 21:50:44 · 5789 阅读 · 0 评论 -
SpringBoot怎么扫描非主类下面的Mapper接口定义(mapperInterface)
首先简单介绍在SpringBoot中如何配置MyBatis自动注入的:配置文件的配置:# mybatis的xml文件路径mybatis.mapper-locations=classpath*:sqlmapper/**/*.xml需要引入依赖如下<dependency> <groupId>org.mybatis.spring.boot</group...原创 2020-04-01 13:35:16 · 953 阅读 · 0 评论 -
SpringBoot中MapperScannerConfigurer是如何处理的?
首先看一下MapperScannerConfigurer的结构:该类实现了BeanDefinitionRegistryPostProcessor结果。在Spring中的核心逻辑如下:// Allows post-processing of the bean factory in context subclasses.postProcessBeanFactory(beanFactory);...原创 2020-03-17 21:24:09 · 2073 阅读 · 1 评论 -
MyBatis BATCH模式
当使用MyBatis时,有两种批量插入的方式,一种是动态SQL中foreach拼接字符串,一种是使用MyBatis提供的BATCH模式。首先查看一下org.apache.ibatis.session.ExecutorType类public enum ExecutorType { SIMPLE, REUSE, BATCH}查看官方文档:https://mybatis.org/mybat...原创 2020-02-25 18:53:11 · 4737 阅读 · 0 评论