mybatis源码分析
mybatis源码分析
日薪灬越亿
这个作者很懒,什么都没留下…
展开
-
Mybatis源码分析(二十) - 反射模块分析
orm框架查询数据过程反射的核心类MetaObject:封装了对象元信息,包装了mybatis中五个核心的反射类。也是提供给外部使用的反射工具类,可以利用它可以读取或者修改对象的属性信息ObjectFactory:MyBatis每次创建结果对象的新实例时,它都会使用对象工厂(ObjectFactory)去构建POJO;ReflectorFactory:创建Reflec...原创 2019-06-30 22:57:26 · 193 阅读 · 0 评论 -
Mybatis源码分析(十久) - 缓存模块分析(装饰器模式)
Mybatis缓存的实现是基于Map的,从缓存里面读写数据是缓存模块的核心基础功能除核心功能之外,有很多额外的附加功能,如:防止缓存击穿,添加缓存清空策略(fifo、lru)、序列化功能、日志能力、定时清空能力等附加功能可以以任意的组合附加到核心基础功能之上怎么样优雅的为核心功能添加附加能力?一般常用的方式是用继承存在的问题:继承的方式是静态的,用户不能控制增加行为的方式和...原创 2019-06-30 22:05:45 · 214 阅读 · 0 评论 -
Mybatis源码分析(十八) - 源码包分析【数据源模块】
常见的数据源组件都实现了javax.sql.DataSource接口;MyBatis不但要能集成第三方的数据源组件,自身也提供了数据源的实现;一般情况下,数据源的初始化过程参数较多,比较复杂;数据源模块类图PooledConnection:使用动态代理封装了真正的数据库连接对象;/** * 使用动态代理封装了真正的数据库连接对象 * @author Clinton ...原创 2019-06-30 20:59:47 · 360 阅读 · 0 评论 -
Mybatis源码分析(十七) - 源码包分析【日志模块】
mybatis源码下载地址:https://github.com/mybatis/mybatis-3MyBatis源码导入过程:下载MyBatis的源码 检查maven的版本,必须是3.25以上,建议使用maven的最新版本 mybatis的工程是maven工程,在开发工具中导入,工程必须使用jdk1.8以上版本; 把mybatis源码的pom文件中<optional>t...原创 2019-06-28 17:28:13 · 195 阅读 · 0 评论 -
Mybatis源码分析(十六) - 与spring的集成
Mybatis-spring 用于帮助你将 MyBatis 代码无缝地整合到 Spring 中。Mybatis-spring 兼容性MyBatis-Spring要求Java5及以上版本还有下面列出的MyBatis和Spring版本:准备spring项目一个在pom文件中添加mybatis-spring的依赖<dependency> <groupI...原创 2019-06-25 13:33:14 · 119 阅读 · 0 评论 -
Mybatis源码分析(十五) - 缓存技术
MyBatis 包含一个非常强大的查询缓存特性,使用缓存可以使应用更快地获取数据,避免频繁的数据库交互缓存查询图:一级缓存 (也叫应用缓存)一级缓存默认会启用,想要关闭一级缓存可以在select标签上配置flushCache=“true”; 一级缓存存在于 SqlSession 的生命周期中,在同一个 SqlSession 中查询时, MyBatis 会把执行的方法和参数通过...原创 2019-06-18 10:53:22 · 110 阅读 · 0 评论 -
Mybatis源码分析(十四) - discriminator 鉴别器映射
在特定的情况下使用不同的pojo进行关联, 鉴别器元素就是被设计来处理这个情况的。鉴别器非常容易理解,因为它的表现很像 Java 语言中的 switch 语句discriminator 标签常用的两个属性如下: column:该属性用于设置要进行鉴别比较值的列 。 javaType:该属性用于指定列的类型,保证使用相同的 Java 类型来比较值。discriminator 标签...原创 2019-06-14 16:09:54 · 433 阅读 · 0 评论 -
Mybatis源码分析(十三) - 关联查询之多对多
我的理解是,多对多其实就是两个一对多。嵌套结果:示例代码: <select id="selectUserRole" resultMap="userRoleInfo"> select a.id, a.user_name, a.real_name, a.sex, a.mobile, a.no...原创 2019-06-14 17:23:25 · 216 阅读 · 0 评论 -
Mybatis源码分析(十二) - 关联查询之一对多
1. collection 支持的属性以及属性的作用和 association 完全相同2. mybatis会根据id标签,进行字段的合并,合理配置好ID标签可以提高处理的效率;一对多 嵌套结果private List<TJobHistory> jobs ;示例代码: <select id="selectUserJobs1" resultMap="userAn...原创 2019-06-14 15:14:56 · 312 阅读 · 0 评论 -
Mybatis源码分析(十一) - 关联查询之一对一
在关系型数据库中,我们经常要处理一对一 、 一对多的关系 。 例如, 一辆汽车需要有一个引擎,这是一对一的关系。 一辆汽车有 4 个或更多个轮子,这是一对多的关系 。关联元素就是专门用来处理关联关系的;关联元素 association 一对一关系 collection 一对多关系 discriminator 鉴别器映射关联方式嵌套结果:使用嵌套结果映射来处理重复...原创 2019-06-14 14:29:40 · 147 阅读 · 0 评论 -
Mybatis源码分析(十) - Mybatis Generator (MBG)
Mybatis Generator工具分享:链接:https://pan.baidu.com/s/1f506HFXu8iDJsXwIfb9sAg提取码:9hiwMyBatis Generator:MyBatis 的开发团队提供了一个很强大的代码生成器,代码包含了数据库表对应的实体类 、Mapper 接口类、 Mapper XML 文件和 Example 对象等,这些代码文件中几乎...原创 2019-06-08 16:42:40 · 506 阅读 · 0 评论 -
Mybatis源码分析(九) - 批量操作
通过foreach动态拼装SQL语句示例:<insert id="insertForeach4Batch" useGeneratedKeys="true" keyProperty="id"> insert into t_user (user_name, real_name, sex, mobile,email,note, position_id) value...原创 2019-06-08 15:45:13 · 321 阅读 · 0 评论 -
Mybatis源码分析(八) - 动态sql元素
if元素:判断语句 ,单条件分支判断示例:<if test="email != null and email != ''"> a.email like CONCAT('%', #{email}, '%') and</if>Trim、where、set :用于处理sql拼装问题where示例:<where> <i...原创 2019-06-08 15:38:14 · 216 阅读 · 0 评论 -
Mybatis源码分析(七) - 注解方式配置
注解方式就是将SQL语句直接写在接口上,对于需求比较简单的系统,效率较高。缺点在于,每次修改sql语句都要编译代码,对于复杂的sql语句可编辑性和可读性都差,一般不建议使用这种配置方式;包含下面几种@Select@Results@Insert@Update@Deletemapper接口示例: @Results(id="jobInfo",value={ ...原创 2019-06-08 13:50:56 · 244 阅读 · 0 评论 -
Mybatis源码分析(六) - sql元素和参数
sql元素: 用来定义可重用的 SQL 代码段,可以包含在其他语句中;<sql id="Base_Column_List"> id, user_name, real_name, sex, mobile, email, note, position_id</sql>参数:向sql语句中传递的可变参数预编译 #{}:将传入的数据都当成一个字符串,会对自动...原创 2019-06-08 13:41:00 · 317 阅读 · 0 评论 -
Mybatis源码分析(五) - insert, update 和 delete常用属性
useGeneratedKeys与keyProperty 的使用mysql的情况下:设置主键自增长:AUTO_INCREMENT<insert id="insert1" parameterType="TUser" useGeneratedKeys="true" keyProperty="id"> insert into t_user (id, user_name,...原创 2019-06-08 13:38:08 · 328 阅读 · 0 评论 -
Mybatis源码分析(四) - select查询,resultmap详解
select元素自动映射 前提:SQL列名和JavaBean的属性是一致的; 自动映射等级autoMappingBehavior设置为PARTIAL,需要谨慎使用FULL; 使用resultType; 如果列名和JavaBean不一致,但列名符合单词下划线分割,Java是驼峰命名法, 则mapUnderscoreToCamelC...原创 2019-06-08 13:18:18 · 372 阅读 · 0 评论 -
Mybatis源码分析(三) - Mybatis配置(mybatis-config.xml)
mybatis-config.xml 配置序号 属性名 说明 备注 1 properties 定义配置,配置的属性可以在整个配置文件中其他位置进行引用 重要,优先使用property配置文件解耦 2 settings 设置,用于指定MyBatis的一些全局配置属性,这些属性非常重要, 它们会改变MyBatis的运行时行为 ...原创 2019-05-23 10:55:33 · 239 阅读 · 0 评论 -
Mybatis源码分析(二) - Mybatis快速入门
1. 加入mybatis的依赖<dependencies> <!-- 单元测试相关依赖 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</v...原创 2019-05-22 18:36:12 · 182 阅读 · 0 评论 -
Mybatis源码分析(一) - mybatis基本概述
为什么需要ORM框架?先来看一段JDBC的代码!static final String DB_URL = "jdbc:mysql://localhost:3308/mybatis?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true"; // Database credentials static...原创 2019-05-22 18:15:09 · 144 阅读 · 0 评论