`
234390216
  • 浏览: 10232969 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A5ee55b9-a463-3d09-9c78-0c0cf33198cd
Oracle基础
浏览量:462623
Ad26f909-6440-35a9-b4e9-9aea825bd38e
springMVC介绍
浏览量:1775516
Ce363057-ae4d-3ee1-bb46-e7b51a722a4b
Mybatis简介
浏览量:1398358
Bdeb91ad-cf8a-3fe9-942a-3710073b4000
Spring整合JMS
浏览量:395022
5cbbde67-7cd5-313c-95c2-4185389601e7
Ehcache简介
浏览量:679983
Cc1c0708-ccc2-3d20-ba47-d40e04440682
Cas简介
浏览量:530892
51592fc3-854c-34f4-9eff-cb82d993ab3a
Spring Securi...
浏览量:1183946
23e1c30e-ef8c-3702-aa3c-e83277ffca91
Spring基础知识
浏览量:467920
4af1c81c-eb9d-365f-b759-07685a32156e
Spring Aop介绍
浏览量:151394
2f926891-9e7a-3ce2-a074-3acb2aaf2584
JAXB简介
浏览量:68153
社区版块
存档分类
最新评论

Mybatis核心杂谈

阅读更多

 


Mybatis杂谈

 

目录

1.1        配置解析

1.2        全局配置简介

1.3        应用浅析

 

         本文主要介绍Mybatis的配置解析对应的ClassMybatis的全局配置等,每个点都不会讲太多细节的东西,只是提一下对应的点,更多细节的东西请有兴趣的读者自己去挖掘。

1.1     配置解析

       Mybatis有一堆的配置,有Mybatis的全局配置文件,有Mapper.xml文件,Mapper.xml文件里面又有selectinsertMappedStatementMappedStatement里面又包含SQL语句,SQL语句里面可能还包含<if><where>等动态标签。在Mybatis中这些都是通过BaseBuilder的子类来解析的,具体如下。

类型

解析器

Mybatis全局配置文件

XMLConfigBuilder

Mapper.xml配置文件

XMLMapperBuilder

Mapper.xml配置文件里面的<select><insert>等操作语句

XMLStatementBuilder

SQL语句中的<if><where>等动态标签

XMLScriptBuilder

SQL语句及其预编译变量

SqlSourceBuilder

 

1.2     全局配置简介

       Mybatis的全局配置是通过XMLConfigBuilder解析的,Mybatis的全局配置文件里面可以有很多配置,如数据源、Mapper映射文件等,而本小节主要是介绍其中可定义的在<settings>下面的全局配置<setting>。具体可以定义哪些配置,分别代表什么含义,请读者参考XMLConfigBuildersettingsElement()方法,以下是该方法的源码。

 

  private void settingsElement(Properties props) throws Exception {

    configuration.setAutoMappingBehavior(AutoMappingBehavior.valueOf(props.getProperty("autoMappingBehavior", "PARTIAL")));

    configuration.setCacheEnabled(booleanValueOf(props.getProperty("cacheEnabled"), true));

    configuration.setProxyFactory((ProxyFactory) createInstance(props.getProperty("proxyFactory")));

    configuration.setLazyLoadingEnabled(booleanValueOf(props.getProperty("lazyLoadingEnabled"), false));

    configuration.setAggressiveLazyLoading(booleanValueOf(props.getProperty("aggressiveLazyLoading"), true));

    configuration.setMultipleResultSetsEnabled(booleanValueOf(props.getProperty("multipleResultSetsEnabled"), true));

    configuration.setUseColumnLabel(booleanValueOf(props.getProperty("useColumnLabel"), true));

    configuration.setUseGeneratedKeys(booleanValueOf(props.getProperty("useGeneratedKeys"), false));

    configuration.setDefaultExecutorType(ExecutorType.valueOf(props.getProperty("defaultExecutorType", "SIMPLE")));

    configuration.setDefaultStatementTimeout(integerValueOf(props.getProperty("defaultStatementTimeout"), null));

    configuration.setDefaultFetchSize(integerValueOf(props.getProperty("defaultFetchSize"), null));

    configuration.setMapUnderscoreToCamelCase(booleanValueOf(props.getProperty("mapUnderscoreToCamelCase"), false));

    configuration.setSafeRowBoundsEnabled(booleanValueOf(props.getProperty("safeRowBoundsEnabled"), false));

    configuration.setLocalCacheScope(LocalCacheScope.valueOf(props.getProperty("localCacheScope", "SESSION")));

    configuration.setJdbcTypeForNull(JdbcType.valueOf(props.getProperty("jdbcTypeForNull", "OTHER")));

    configuration.setLazyLoadTriggerMethods(stringSetValueOf(props.getProperty("lazyLoadTriggerMethods"), "equals,clone,hashCode,toString"));

    configuration.setSafeResultHandlerEnabled(booleanValueOf(props.getProperty("safeResultHandlerEnabled"), true));

    configuration.setDefaultScriptingLanguage(resolveClass(props.getProperty("defaultScriptingLanguage")));

    configuration.setCallSettersOnNulls(booleanValueOf(props.getProperty("callSettersOnNulls"), false));

    configuration.setLogPrefix(props.getProperty("logPrefix"));

    configuration.setLogImpl(resolveClass(props.getProperty("logImpl")));

    configuration.setConfigurationFactory(resolveClass(props.getProperty("configurationFactory")));

  }

 

       以下是一个全局配置的示例。

   <settings>

      <!--日志实现,内置的有SLF4JCOMMONS_LOGGINGLOG4JLOG4J2JDK_LOGGINGSTDOUT_LOGGINGNO_LOGGING

        不指定时会按照一定的顺序一个个试,直到获取到为止,可以参考LogFactory -->

      <setting name="logImpl" value="LOG4J"/>

      <setting name="cacheEnabled" value="true" />

      <setting name="proxyFactory" value="CGLIB"/>

      <setting name="lazyLoadingEnabled" value="true"/>

      <!--当访问代理对象方法时是否一次加载懒加载对象的所有属性,默认是true -->

      <setting name="aggressiveLazyLoading" value="fasle"/>

      <!--当为懒加载时触发加载对象所有属性的方法,默认是下面四个方法 -->

      <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString" />

      <!--自动映射类型,可选值为NONEPARTIALFULL,参考AutoMappingBehavior枚举 -->

      <setting name="autoMappingBehavior" value="PARTIAL"/>

      <!--默认的Executor类型,取值参考ExecutorType枚举 -->

      <setting name="defaultExecutorType" value="SIMPLE"/>

      <!--默认的语句超时时间,单位是秒。默认是null超时-->

      <setting name="defaultStatementTimeout" value="10"/>

      <setting name="localCacheScope" value="SESSION"/>

   </settings>

 

1.3     应用浅析

       在我们使用Mybatis的时候都是通过SqlSessionFactoryBuilder对象的build方法来构建一个SqlSessionFactory,然后通过SqlSessionFactory创建一个SqlSession对象,然后所有的操作都是基于sqlSessionselectOneselectListinsertupdatedelete等方法进行的。但是近来我们可能都习惯基于MybatisMapper接口编程,通过SqlSessiongetMapper()方法获取对应的Mapper接口实现,然后就可以基于接口进行操作了。其实SqlSessiongetMapper()调用获取的是基于当前Mapper的一个代理对象实现,其底层在调用对应的接口方法时,最终还是会反应到调用前面提到的selectOneselectListinsert等这些基本方法上。关于这块有兴趣的读者可以沿着上面的线一直查看Mybatis的源码,最终你会找到MapperProxyFactoryMapperProxy

 

(注:本文写于20161228日星期三)

 

 

0
0
分享到:
评论

相关推荐

    手写mybatis核心流程代码demo

    手写mybatis核心流程代码demo手写mybatis核心流程代码demo手写mybatis核心流程代码demo手写mybatis核心流程代码demo手写mybatis核心流程代码demo手写mybatis核心流程代码demo手写mybatis核心流程代码demo手写mybatis...

    mybatis核心源码

    mybatis核心源码mybatis核心源码mybatis核心源码mybatis核心源码mybatis核心源码mybatis核心源码mybatis核心源码mybatis核心源码mybatis核心源码mybatis核心源码mybatis核心源码mybatis核心源码mybatis核心源码...

    mybatis核心配置文件

    mybatis核心配置文件,是对mybatis的开发时的一个详细的说明及配置文件

    Mybatis核心的几个包

    Mybatis作为一个轻量级的持久层框架,其核心组件对于理解和使用这个框架至关重要。下面将详细阐述Mybatis的核心包以及其中包含的关键知识点。 1. **SqlSessionFactoryBuilder**: 这是创建SqlSessionFactory的入口,...

    mybatis核心包+mysql驱动包+mybatis依赖包(完整).zip

    标题中的"mybatis核心包"指的是MyBatis框架的主要组件,包括MyBatis的核心库,这个库包含了SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession等关键类,它们是MyBatis运行的核心。SqlSessionFactoryBuilder...

    达内 MyBatis 核心_扫描版_2.42M

    达内 MyBatis 核心_扫描版_2.42M

    MyBatis核心框架示意图

    MyBatis核心框架示意图.

    mybatis核心jar包+mybatis与spring整合jar包

    首先,让我们深入理解MyBatis的核心jar包。MyBatis的主要组件包括SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession和Mapper接口。SqlSessionFactoryBuilder是用来构建SqlSessionFactory的,它是MyBatis的...

    MyBatis核心教程

    ### MyBatis核心教程 #### 1. 引言 ##### 1.1 为何选择mybatis-guice——动机 在日常工作中,我们经常同时使用MyBatis SQL Mapper和Google Guice框架,并逐渐意识到在不同的项目中重复编写相同的代码片段。为了...

    MyBatis核心jar包

    MyBatis的核心jar包,整合mybatis框架,java,asm-3.3.1.jar,cglib-2.2.2.jar,commons-logging-1.1.1.jar,log4j-1.2.16.jar,mybatis-3.1.1.jar,mybatis-spring-1.2.3.jar,slf4j-api-1.6.2.jar,slf4j-log4j12-...

    MyBatis核心(达内课程)

    MyBatis核心(达内课程)

    mybatis核心配置文件.xml

    mybatis核心配置文件.xml

    mybatis整合spring时 的核心jar包

    1. MyBatis核心Jar包: - `mybatis-3.x.x.jar`: MyBatis的主要框架,包含了SQL映射框架的所有功能,如SQL执行、参数绑定、结果映射等。 - `mybatis-spring-1.x.x.jar`: 这是MyBatis与Spring的适配器,提供了Spring...

    13_MyBatis核心_达内.pdf

    13_MyBatis核心_达内

    深入浅出MyBatis技术原理与实战.pdf

    深入浅出MyBatis技术原理与实战.pdf,详细了解mybatis,

    mybatis 3.2.7核心包、依赖包、数据驱动包

    这个压缩包包含了MyBatis运行所必需的核心组件、依赖库和数据驱动包,以及用于测试的JUnit包。 首先,我们来看看核心包。MyBatis的核心包通常包含以下关键组件: 1. **mybatis-3.2.7.jar**:这是MyBatis框架的主要...

    spring+mybatis框架核心jar包

    mybatis-memcached-1.0.0.jar mybatis-spring-1.2.2.jar mybatis-3.2.7.jar spring-aop-4.0.6.RELEASE.jar 等等搭建框架所需要的jar包

    MyBatis核心包、依赖包、数据驱动包(心凡138提供)

    本资源包含MyBatis的核心包、依赖包以及数据驱动包,这些都是构建基于MyBatis的应用所必需的组件。 1. **MyBatis核心包** MyBatis的核心包是`mybatis-x.x.x.jar`,其中包含了MyBatis框架的主要功能。这个包中包含...

Global site tag (gtag.js) - Google Analytics