自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 Mybatis源码分析九

MyBatis 还有一个很有意思的点在于异常日志的输出。不知道大家有没有发现,使用 MyBatis 时定位问题非常容易,我们只需要查看一下控制台的异常日志就能一目了然地知道问题出现在了哪里。这归功于一个简单的类 ErrorContext。我们首先来一点一点认识一个这个类。六个存储异常信息的私有成员及其 “set” 方法 private ErrorContext stored; priva...

2019-12-15 18:08:26 137

原创 Mybatis源码分析八

MyBatis 的缓存有本地缓存和二级缓存两种。默认情况下,本地缓存是开启的且只在 Session 期间有效。二级缓存需要手动开启:在 mapper 的 XML 文件中添加一行 ,其有效期在 mapper 范围内。我们从源码的角度来做一下简单的分析。先来看一下 MyBatis 的 cache 包的内容结构:其中,Cache 为接口,decorators 包和 impl 包中都是 Cache ...

2019-12-15 17:44:02 91

原创 Mybatis源码分析七

我们已经知道了 Mapper 方法执行的前因,即:Mybatis源码分析六)。现在就让我们来看看其“后果”:结果集映射。参数映射是通过 TypeHandler 实现的,那么同理,结果集映射也应该是通过 TypeHandler 实现。我们还是按照之前的方式,使用 debug 在入口代码上打断点,步入源码。入口代码为:List<Author> list = mapper.select...

2019-12-15 15:27:04 108

原创 Mybatis源码分析六

在前面的探索中,我们已经知道了 MyBatis 是如何 getMapper 并执行 Mapper 接口中的方法来进行数据库操作的。那么今天我们就来看看 Mapper 方法执行的“前因”:获取语句+参数映射。我们还是按照之前的方式,使用 debug 在入口代码上打断点,步入源码。入口代码为:List<Author> list = mapper.selectByName("Sylvia...

2019-12-15 10:56:59 162

原创 Mybatis源码分析五

通过上一篇的讨论Mybatis源码分析四,我们已经知道 MyBatis 在获取到 Mapper 接口之后,其方法是通过在动态代理中调用 SqlSession 的方法来执行数据库操作的。那么在 SqlSession 中它具体又是怎么做的呢?这一篇我们就一起来看看 SqlSession 是如何执行数据库操作的。我们还是以上一篇使用的测试代码为入口继续 debug:List<Author>...

2019-12-15 09:38:56 77

原创 Mybatis源码分析四

通过上一篇文章 Mybatis源码分析三:getMapper 我们已经知道 MyBatis 通过动态代理的方式获取 Mapper 实例。在这一篇文章中我们就来具体讨论其动态代理的具体实现和 Mapper 中方法是如何执行的。以下面代码为入口,我们来进行 debug 代码跟入:List<Author> author = mapper.selectAllTest();selectAll...

2019-12-14 19:35:42 86

原创 Mybatis源码分析三

我们在使用 Mybatis 获取到 SqlSession 之后要想进行数据库操作,首先要做的工作就是获取到对应的 Mapper ,如:AuthorMapper mapper = session.getMapper(AuthorMapper.class);从上一篇文章 Mybatis源码分析二 我们知道,SqlSession 的实现类 DefaultSqlSession 中有一个 Configur...

2019-12-14 19:21:40 65

原创 Mybatis源码分析二

SqlSession 接口提供数据库执行的所有方法(增删改查、提交、回滚等),在这里我们重点讨论其实现类 DefaultSqlSession。对于数据库操作的具体实现为下图红框标出的五个方法,其余方法皆调用这五个方法来实现:该类中所有的 selectOne 方法、selectMap 方法和其他的 selectList 均调用 selectList(java.lang.String, java...

2019-12-14 19:15:30 86

原创 Mybatis源码分析一

日志MyBatis 通过使用内置的日志工厂提供日志信息。内置的日志工厂会将日志信息委托给以下其中一种日志工具:SLF4JApache Commons LoggingLog4j 2Log4jJDK loggingMyBatis 内置日志工厂基于运行时自检来选择日志工具。MyBatis 日志工厂将使用它发现的第一个日志工具(按上面列举的顺序查找工具)。如果 MyBatis 一个都没有找到...

2019-12-14 19:09:41 100

原创 Dynamic SQL

MyBatis 最强大的特性之一是它的动态 SQL。如果你用过 JDBC 或其他类似的框架,你就知道根据不同条件拼接 SQL 语句有多痛苦了,比如不能忘记空格或要去掉最后一个列后面的逗号。动态 SQL 可以完全摆脱这种痛苦。如果你使用过 JSTL 或任何类似的基于 XML 的文本处理器,那么动态 SQL 元素对你来说一点也不陌生。在 MyBatis 之前的版本中,有很多的元素需要去学习和理解。M...

2019-12-14 15:05:45 665

原创 Mapper

select在 MyBatis 中,查询语句是最常用的语句之一。向数据库中放入数据并没有多大价值,直到你再将它取出,因此大多数的应用中查询比修改数据多的多。属性<select id="selectPerson" parameterType="int" parameterMap="deprecated" resultType="hashmap" resultMap="...

2019-12-10 19:08:16 234

原创 Mybatis 缓存机制

MyBatis 缓存详解缓存是一般的ORM 框架都会提供的功能,目的就是提升查询的效率和减少数据库的压力。跟Hibernate 一样,MyBatis 也有一级缓存和二级缓存,并且预留了集成第三方缓存的接口。MyBatis 跟缓存相关的类都在cache 包里面,其中有一个Cache 接口,只有一个默认的实现类 PerpetualCache,它是用HashMap 实现的。我们可以通过 以下类找到...

2019-12-07 07:57:37 153

原创 Mybatis Configuration属性分析

Configuration属性分析propertiesThese are externalizable, substitutable properties that can be configured in a typical Java Properties file instance, or passed in through sub-elements of the properties e...

2019-12-05 08:40:33 724 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除