自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Mybatis3源码分析(22)-总结

Configuration加载过程Configuration组成基本属性。在mybatis-config.xml加载的属性这里定义为基本属性。如cacheEnabled/variables/objectFactory等等,这些的加载都比较简单。cache缓存。这个是从mapper配置文件加载的。一个命名空间对应一个缓存。resultMap。结果集映射,从mapper配置文件

2015-12-29 13:18:12 5211

原创 Mybatis3源码分析(21)-Mapper实现-动态代理

当定义好一个Mapper接口(UserDao)里,我们并不需要去实现这个类,但sqlSession.getMapper()最终会返回一个实现该接口的对象。这个对象是Mybatis利用jdk的动态代理实现的。这里将介绍这个代理对象的生成过程及其方法的实现过程。Mapper代码对象的生成过程DefaultSqlSession.getMapp()方法最终会调用MapperRegistry.get

2015-12-25 17:18:46 2003

原创 Mybatis3源码分析(20)-Mapper实现-配置加载

整体加载过程mybatis-config.xml中可以在包(package)和class的方法让Mybatis加载一个Mapper通过包的方式是从包加载所有的class,最条还是通过class方法来实现加载加载过程中主要通过读取方法中的注解来生成MappedStatement对象,再加入到Configuration中。这个过程跟解析mapper.xml配置文件中的select/inse

2015-12-25 14:14:08 1284

原创 Mybatis3源码分析(19)-Mapper生成过程-示例

Mybatis提供一种mapper形式的访问接口,通过定义接口,再加上简单的注解就能实现数据库操作。 下面来看这个mapper是怎么使用的。先定义接口public interface UserDao{ //告诉Mybatis执行什么Sql @Select("select * from tab_user where user_id=#{USER_ID}") p

2015-12-25 13:48:34 1128

原创 Mybatis3源码分析(18)-插件(plugins)拦截器

Mybatis拦截器的使用方法参考官方文档:http://mybatis.org/mybatis-3/zh/configuration.html#plugins拦截器使用示例Mybatis的拦截器是通过jdk的动态代理实现的,只能生成接口的实例。这里生定义一个接口及实现。public interface AshanService{ public void service(Strin

2015-12-24 17:56:52 1240

原创 Mybatis3源码分析(17)-Sql解析执行-缓存的实现

Mybatis主要有两种缓存:一级缓存和二级缓存。一级缓存的生命周期与SqlSession的生命周期一样。一级缓存是在BaseExecutor中实现。二级缓存的生命周期跟SqlSessionFactory一样,通常在整个应用中有效。二级缓存是通过CachingExecutor来实现的。一级缓存Mybatis提供了如下方式来配置一级缓存:SESSION表示在整个SqlSess

2015-12-24 11:47:16 1153

原创 Mybatis3源码分析(16)-Sql解析执行-结果集映射(ResultSetHandler)

在PreparedStatementHandler中的query()方法中,是用ResultHandler来完成结果集的映射的。 public List query(Statement statement, ResultHandler resultHandler) throws SQLException { PreparedStatement ps = (PreparedStat

2015-12-22 13:51:35 18817

原创 Mybatis3源码分析(15)-Sql解析执行-Statement初始化和参数设置

在SimpleExecutor中,执行SQL时调用preareStatement()方法来对statement进行初始化及参数设置。 private Statement prepareStatement(StatementHandler handler, Log statementLog) throws SQLException { Statement stmt; Co

2015-12-22 13:11:56 1838

原创 Mybatis3源码分析(14)-Sql解析执行-StatementHandler

SimpleExecutor执行sql过程BoundSql加载完成之后,下一步就可以执行select/update/insert/delete语句了。在SimpleExecutor中执行语句最终会由doQuery和doUpdate方法完成。 public int doUpdate(MappedStatement ms, Object parameter) throws SQLExcep

2015-12-22 10:50:01 2771

原创 Mybatis3源码分析(13)-Sql解析执行-BoundSql的加载-2

前面分析到SqlNode.apply()后,Sql还是个半成口。只处理了"${}"这种占位符,"#{}"这种占位符还没有处理,而且Sql执行时的参数也没有生成。再来看DynamicSqlSource.getBoundSql()方法 public BoundSql getBoundSql(Object parameterObject) { DynamicContext con

2015-12-22 09:21:08 2101

原创 Mybatis3源码分析(12)-Sql解析执行-MetaObject

MetaObjectMetaObject类相当于一个工具类,Mybatis在sql参数设置和结果集映射里经常使用到这个对象。下面来详细分析一下这类。这个类有四个属性,其中两个基本不用看。 //原始的对象 private Object originalObject; //对原始对象的一个包装 private ObjectWrapper objectWrapper;

2015-12-21 23:14:31 4219

原创 Mybatis3源码分析(11)-Sql解析执行-BoundSql的加载-1

整理完SqlSession和Executor的关系之后,接下来看看一条sql是怎么被解析执行的。如下例:public static void queryUser(SqlSessionFactory sqlSessionFactory) { SqlSession sqlSession=sqlSessionFactory.openSession(); try { Map

2015-12-21 09:31:52 8021

原创 Mybatis3源码分析(10)-Executor接口实现方式

之前介绍过,Executor接口定义了对象操作库操作的基本方法:select/update/insert/delete/commit/rollbak/close。Mybatis对Executor接口的实现主要采用了模板模式和装饰模式两种设计模式。Executor类关系其中CloseExecutor为一个类的内部了,而且是private的,先不讨论!BaseExe

2015-12-20 22:27:58 2107

原创 Mybatis3源码分析(09)-SqlSession创建及简要说明

SqlSession的简要使用在得到SqlSessionFactory之后就可以创建一个SqlSession对象了,SqlSession对象的生命对象通常像如下方法所示:public static void useSqlSession(SqlSessionFactory sqlSessionFactory) { //在通过SqlSessionFactory获取一个SqlSessi

2015-12-19 22:49:16 1588

原创 Mybatis3源码分析(08)-加载Configuration-使用到的设计模式

设置模式无处不在,在分析Mybatis加载Configuration的过程中,发现Mybatis使用了多种的设置模式。工厂模式下面的例子准确的来说是一个抽象工厂!Configuration中有个属性:protected ObjectFactory objectFactory = new DefaultObjectFactory();Mybatis使用这个工厂去创建所有需要都创建

2015-12-19 14:39:30 2370

原创 Mybatis3源码分析(07)-加载Configuration-总结

Configuration中的配置信息下图是官方文档中对Configuration的介绍这里xml配置是由两个对象加载Configuration对象中XMLConfigBuilder。这个对象负责加载除mappers映射器之外的所有配置。XMLMapperBuilder。这个对象只负责加载mappers映射器中的配置。其中他还有个助手:MapperBuilderAssi

2015-12-19 08:50:13 1586

原创 Mybatis3源码分析(06)-加载Configuration-缓存配置加载

Mybatis中的mapper配置文件中,除了经常配置select/update/insert/delete/resultMap节点之外,我们可能还会为Mybatis配置一个或几个缓存。接下来分析一下Mybatis是怎么将mapper配置文件中的缓存配置加载到Configuration对象中的。Mybatis中的缓存类型Mybatis支持两种缓存一级缓存,也叫本地缓存。这个缓存

2015-12-18 16:12:25 1391

原创 Mybatis3源码分析(05)-加载Configuration-加载MappedStatement

XMLStatementBuilder.parseStatementNode()方法resultMap元素的解析已经分析完毕。与resultMap不一样,XmlMapperBuilder在解析select/update/insert/delete的元素时会创建一个XMLStatementBuilder对象,解析的工作交由其方法parseStatementNode()方法完成。private v

2015-12-18 13:07:28 12002

原创 Mybatis3源码分析(04)-加载Configuration-XMLMapperBuilder加载ResultMap

XMLMapperBuilder.parse()方法XMLConfigBuilder在解析过程中碰到mappers元素会交由XMLMapperBuilder.parse()方法来处理public void parse() { if (!configuration.isResourceLoaded(resource)) { //真正解析 co

2015-12-17 16:25:54 2755

原创 Mybatis3源码分析(03)-加载Configuration-ResultMap说明

XMLMapperBuilder简单说明XMLMapperBuildery主要是加载mapper配置文件加Configuration中。主要加载两大内容ResultMap:结果集映射,对应Configuration中的resultMaps属性protected final Map resultMaps = new StrictMap("Result Maps collect

2015-12-17 14:02:50 2842

原创 Mybatis3源码分析(02)-加载Configuration-XMLConfigBuilder

Configuration类在Mybatis中的作用Configuration类保存了所有Mybatis的配置信息。也就是说mybaits-config.xml及UserMapper.xml中所有配置信息都可以在Configruation对象中找到相应的信息。一般情况下Mybatis在运行过程中只会创建一个Configration对象,并且配置信息不能再被修改。如何配置Mybatis可以看这个

2015-12-17 10:54:28 4515

原创 Mybatis3源码分析(01)-前期准备

背景我们大多项目都使用了Mybatis。Mybatis的中的sql大多都是配置在xml文件中的,我们为了方便dba对sql统一的管理需要将sql保存在数据库中。这样就要求Mybatis从数据库中加载配置,同时dba优化先sql之后还得实现让Mybatis在不重启应用的情况下动态加载。要实现这些功能,需要对Mybatis进行扩展,所以本人花了一些时间分析一Mybatis3源码,在此记录。

2015-12-17 09:40:10 3947

空空如也

空空如也

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

TA关注的人

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