优化与扩展Mybatis的SqlMapper解析

优化与扩展Mybatis的SqlMapper解析

ID:37735210

大小:40.50 KB

页数:7页

时间:2019-05-29

优化与扩展Mybatis的SqlMapper解析_第1页
优化与扩展Mybatis的SqlMapper解析_第2页
优化与扩展Mybatis的SqlMapper解析_第3页
优化与扩展Mybatis的SqlMapper解析_第4页
优化与扩展Mybatis的SqlMapper解析_第5页
资源描述:

《优化与扩展Mybatis的SqlMapper解析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、优化与扩展Mybatis的SqlMapper解析一、Mybatis全局配置Mybatis的全局配置,对应内存对象为Configuration,是重量级对象,和数据源DataSource、会话工厂SqlSessionFactory属于同一级别,一般来说(单数据源系统)是全局单例。从SqlSessionFactoryBean的doGetConfigurationWrapper()方法可以看到,有三种方式构建,优先级依次为:1.spring容器中注入,由用户直接注入一个Configuration对象2.根据mybatis-con

2、fig.xml中加载,而mybatis-config.xml的路径由configLocation指定,配置文件使用组件XMLConfigBuilder来解析3.采用mybatis内部默认的方式,直接new一个配置对象Configuration这里为了简单,偷一个懒,不具体分析XMLConfigBuilder了,而直接采用spring中注入的方式,这种方式也给了扩展Configuration一个极大的自由。二、读取所有SqlMapper.xml配置文件也有两种方式,一种是手工配置,一种是使用自动扫描。推荐的自然是自动扫描,就

3、不多说了。加载所有SqlMapper.xml配置文件之后就是循环处理每一个文件了。三、解析单个SqlMapper.xml配置文件单个SqlMapper.xml文件的解析入口是SqlSessionFactoryBean的doParseSqlMapperResource()方法,在这个方法中,自动侦测是DTD还是XSD,然后分两条并行路线分别解析:1、DTD模式:创建XMLMapperBuilder对象进行解析2、XSD模式:根据ini配置文件,找到sqlmapper命名空间的处理器SchemaSqlMapperNamespa

4、ceParser,该解析器将具体的解析工作委托给SchemaSqlMapperParserDelegate类。四、解析Statement级元素Statement级元素指的是根元素的一级子元素,这些元素有cache

5、cache-ref

6、resultMap

7、parameterMap

8、sql

9、insert

10、update

11、delete

12、select,其中insert

13、update

14、delete

15、select就是通常所说的增删改查,用于构建mybatis一次执行单元,也就是说,每一次mybatis方法调用都是对ins

16、ert

17、update

18、delete

19、select元素的一次访问,而不能说只访问select的某个下级子元素;其它的一级子元素则是用于帮助构建执行单元(resultMap

20、parameterMap

21、sql)或者影响执行单元的行为的(cache

22、cache-ref)。所以一级子元素可以总结如下:执行单元元素:insert

23、update

24、delete

25、select单元辅助元素:resultMap

26、parameterMap

27、sql执行行为元素:cache

28、cache-ref这些元素是按如下方式解析的:1、DTD模式:使用XMLMa

29、pperBuilder对象内的方法分别解析上面负责解析的每行代码都是一个内部方法,比如解析select

30、insert

31、update

32、delete元素的方法:可以看到,具体解析又转给XMLStatementBuilder了,而最终每一个select

33、insert

34、update

35、delete元素在内存中表现为一个MappedStatement对象。2、XSD模式:这里引入一个Statement级元素解析接口IStatementHandlerpublicinterfaceIStatementHandler{voidhandleS

36、tatementNode(Configurationconfiguration,SchemaSqlMapperParserDelegatedelegate,XNodenode);}每个实现类负责解析一种子元素,原生元素对应实现类有:然后创建一个注册器类SchemaHandlers来管理这些实现类。这个过程主要有两步:(1)应用启动时,将IStatementHandler的实现类和对应命名空间的相应元素事先注册好复制代码//静态代码块,注册默认命名空间的StatementHandlerregister("cache-ref"

37、,newCacheRefStatementHandler());register("cache",newCacheStatementHandler());register("parameterMap",newParameterMapStatementHandler());register("result

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。