您的位置:首页 > 其它

mybatis全局配置文件

2017-12-19 14:51 309 查看
一、properties:引入外部配置文件

1.resource:引入类路径下的全局配置文件,例如:<propertiesresource="conf/dbconfig.properties"></properties>

2.url:引入网络路径或者磁盘路径下的资源文件





二、settings:这是MyBatis中极为重要的调整设置,它们会改变MyBatis的运行时行为。下表描述了设置中各项的意图、默认值等。

设置参数描述有效值默认值
cacheEnabled该配置影响的所有映射器中配置的缓存的全局开关。true|falsetrue
lazyLoadingEnabled延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。特定关联关系中可通过设置fetchType属性来覆盖该项的开关状态。true|falsefalse
aggressiveLazyLoading当开启时,任何方法的调用都会加载该对象的所有属性。否则,每个属性会按需加载(参考lazyLoadTriggerMethods).true|falsefalse(truein≤3.4.1)
multipleResultSetsEnabled是否允许单一语句返回多结果集(需要兼容驱动)。true|falsetrue
useColumnLabel使用列标签代替列名。不同的驱动在这方面会有不同的表现,具体可参考相关驱动文档或通过测试这两种不同的模式来观察所用驱动的结果。true|falsetrue
useGeneratedKeys允许JDBC支持自动生成主键,需要驱动兼容。如果设置为true则这个设置强制使用自动生成主键,尽管一些驱动不能兼容但仍可正常工作(比如Derby)。true|falseFalse
autoMappingBehavior指定MyBatis应如何自动映射列到字段或属性。NONE表示取消自动映射;PARTIAL只会自动映射没有定义嵌套结果集映射的结果集。FULL会自动映射任意复杂的结果集(无论是否嵌套)。NONE,PARTIAL,FULLPARTIAL
autoMappingUnknownColumnBehavior指定发现自动映射目标未知列(或者未知属性类型)的行为。

NONE:不做任何反应

WARNING:输出提醒日志('org.apache.ibatis.session.AutoMappingUnknownColumnBehavior'的日志等级必须设置为WARN)

FAILING:映射失败(抛出SqlSessionException)

NONE,WARNING,FAILINGNONE
defaultExecutorType配置默认的执行器。SIMPLE就是普通的执行器;REUSE执行器会重用预处理语句(preparedstatements);BATCH执行器将重用语句并执行批量更新。SIMPLEREUSEBATCHSIMPLE
defaultStatementTimeout设置超时时间,它决定驱动等待数据库响应的秒数。任意正整数NotSet(null)
defaultFetchSize为驱动的结果集获取数量(fetchSize)设置一个提示值。此参数只可以在查询设置中被覆盖。任意正整数NotSet(null)
safeRowBoundsEnabled允许在嵌套语句中使用分页(RowBounds)。如果允许使用则设置为false。true|falseFalse
safeResultHandlerEnabled允许在嵌套语句中使用分页(ResultHandler)。如果允许使用则设置为false。true|falseTrue
mapUnderscoreToCamelCase是否开启自动驼峰命名规则(camelcase)映射,即从经典数据库列名A_COLUMN到经典Java属性名aColumn的类似映射。true|falseFalse
localCacheScopeMyBatis利用本地缓存机制(LocalCache)防止循环引用(circularreferences)和加速重复嵌套查询。默认值为SESSION,这种情况下会缓存一个会话中执行的所有查询。若设置值为STATEMENT,本地会话仅用在语句执行上,对相同SqlSession的不同调用将不会共享数据。SESSION|STATEMENTSESSION
jdbcTypeForNull当没有为参数提供特定的JDBC类型时,为空值指定JDBC类型。某些驱动需要指定列的JDBC类型,多数情况直接用一般类型即可,比如NULL、VARCHAR或OTHER。JdbcTypeenumeration.Mostcommonare:NULL,VARCHARandOTHEROTHER
lazyLoadTriggerMethods指定哪个对象的方法触发一次延迟加载。Amethodnamelistseparatedbycommasequals,clone,hashCode,toString
defaultScriptingLanguage指定动态SQL生成的默认语言。Atypealiasorfullyqualifiedclassname.org.apache.ibatis.scripting.xmltags.XMLLanguageDriver
defaultEnumTypeHandlerSpecifiestheTypeHandlerusedbydefaultforEnum.(Since:3.4.5)Atypealiasorfullyqualifiedclassname.org.apache.ibatis.type.EnumTypeHandler
callSettersOnNulls指定当结果集中值为null的时候是否调用映射对象的setter(map对象时为put)方法,这对于有Map.keySet()依赖或null值初始化的时候是有用的。注意基本类型(int、boolean等)是不能设置成null的。true|falsefalse
returnInstanceForEmptyRow当返回行的所有列都是空时,MyBatis默认返回null。当开启这个设置时,MyBatis会返回一个空实例。请注意,它也适用于嵌套的结果集(i.e.collectioinandassociation)。(从3.4.2开始)true|falsefalse
logPrefix指定MyBatis增加到日志名称的前缀。AnyStringNotset
logImpl指定MyBatis所用日志的具体实现,未指定时将自动查找。SLF4J|LOG4J|LOG4J2|JDK_LOGGING|COMMONS_LOGGING|STDOUT_LOGGING|NO_LOGGINGNotset
proxyFactory指定Mybatis创建具有延迟加载能力的对象所用到的代理工具。CGLIB|JAVASSISTJAVASSIST(MyBatis3.3orabove)
vfsImpl指定VFS的实现自定义VFS的实现的类全限定名,以逗号分隔。Notset
useActualParamName允许使用方法签名中的名称作为语句参数名称。为了使用该特性,你的工程必须采用Java8编译,并且加上-parameters选项。(从3.4.1开始)true|falsetrue
configurationFactory指定一个提供Configuration实例的类.这个被返回的Configuration实例是用来加载被反序列化对象的懒加载属性值.这个类必须包含一个签名方法staticConfigurationgetConfiguration().(从3.2.3版本开始)类型别名或者全类名.Notset
一个配置完整的settings元素的示例如下:

<settings>
<settingname="cacheEnabled"value="true"/>
<settingname="lazyLoadingEnabled"value="true"/>
<settingname="multipleResultSetsEnabled"value="true"/>
<settingname="useColumnLabel"value="true"/>
<settingname="useGeneratedKeys"value="false"/>
<settingname="autoMappingBehavior"value="PARTIAL"/>
<settingname="autoMappingUnknownColumnBehavior"value="WARNING"/>
<settingname="defaultExecutorType"value="SIMPLE"/>
<settingname="defaultStatementTimeout"value="25"/>
<settingname="defaultFetchSize"value="100"/>
<settingname="safeRowBoundsEnabled"value="false"/>
<settingname="mapUnderscoreToCamelCase"value="false"/>
<settingname="localCacheScope"value="SESSION"/>
<settingname="jdbcTypeForNull"value="OTHER"/>
<settingname="lazyLoadTriggerMethods"value="equals,clone,hashCode,toString"/>
</settings>


三、typeAliases:别名

typeAliases

1、批量起别名,类型别名是为Java类型设置一个短的名字。它只和XML配置有关,存在的意义仅在于用来减少类完全限定名的冗余。例如:

<typeAliases>
<typeAliasalias="Author"type="domain.blog.Author"/>
<typeAliasalias="Blog"type="domain.blog.Blog"/>
<typeAliasalias="Comment"type="domain.blog.Comment"/>
<typeAliasalias="Post"type="domain.blog.Post"/>
<typeAliasalias="Section"type="domain.blog.Section"/>
<typeAliasalias="Tag"type="domain.blog.Tag"/>
</typeAliases>


2、包名作为packagename的值,当这样配置时,Blog可以用在任何使用domain.blog.Blog的地方。

也可以指定一个包名,MyBatis会在包名下面搜索需要的JavaBean,比如:

<typeAliases>
<packagename="domain.blog"/>
</typeAliases>


3、每一个在包domain.blog中的JavaBean,在没有注解的情况下,会使用Bean的首字母小写的非限定类名来作为它的别名。比如domain.blog.Author的别名为author;若有注解,则别名为其注解值。看下面的例子:

@Alias("author")
publicclassAuthor{
...
}


已经为许多常见的Java类型内建了相应的类型别名。它们都是大小写不敏感的,需要注意的是由基本类型名称重复导致的特殊处理。

别名映射的类型
_bytebyte
_longlong
_shortshort
_intint
_integerint
_doubledouble
_floatfloat
_booleanboolean
stringString
byteByte
longLong
shortShort
intInteger
integerInteger
doubleDouble
floatFloat
booleanBoolean
dateDate
decimalBigDecimal
bigdecimalBigDecimal
objectObject
mapMap
hashmapHashMap
listList
arraylistArrayList
collectionCollection
iteratorIterator
四、typeHandlers:类型处理器

。。。。loading。。。。

五、plugins:插件

六、environments:环境,mybatis可以配置多种环境,其中default=“指定某种环境”,跟environment中的id=“环境的唯一标识”相对应。

environment:具体某种环境,必须有两个标签

transactionManager:事务管理器:参数分为两个JDBC|MANAGED,这些都是别名,事务管理器自定义type="全类名"

dataSource:参数分为三个UNPOOLED|POOLED|JNDI这些都是别名,可以自定义数据源type="自定义数据源的全类名"

七、databaseIdProvider

MyBatis可以根据不同的数据库厂商执行不同的语句,这种多厂商的支持是基于映射语句中的databaseId属性。MyBatis会加载不带databaseId属性和带有匹配当前数据库databaseId属性的所有语句。如果同时找到带有databaseId和不带databaseId的相同语句,则后者会被舍弃。为支持多厂商特性只要像下面这样在mybatis-config.xml文件中加入databaseIdProvider即可:

<databaseIdProvidertype="DB_VENDOR"/>


这里的DB_VENDOR会通过DatabaseMetaData#getDatabaseProductName()返回的字符串进行设置。由于通常情况下这个字符串都非常长而且相同产品的不同版本会返回不同的值,所以最好通过设置属性别名来使其变短,如下:

<databaseIdProvidertype="DB_VENDOR">
<propertyname="SQLServer"value="sqlserver"/>
<propertyname="DB2"value="db2"/>
<propertyname="Oracle"value="oracle"/>
</databaseIdProvider>


然后在mapper.xml配置文件中指定数据库厂商自己设置的别名



八、mappers映射器

1.resource:类路径下的sql映射文件

<!--Usingclasspathrelativeresources-->
<mappers>
<mapperresource="org/mybatis/builder/AuthorMapper.xml"/>
<mapperresource="org/mybatis/builder/BlogMapper.xml"/>
<mapperresource="org/mybatis/builder/PostMapper.xml"/>
</mappers>


2.url:网络路径或者磁盘路径下的sql映射文件

<!--Usingurlfullyqualifiedpaths-->
<mappers>
<mapperurl="file:///var/mappers/AuthorMapper.xml"/>
<mapperurl="file:///var/mappers/BlogMapper.xml"/>
<mapperurl="file:///var/mappers/PostMapper.xml"/>
</mappers>


3.class:直接写dao接口下的全类名,sql文件使用注解的方式写在接口方法上。

1).全局配置文件mybatis-config.xml

<mappers>
<!--<mapperresource="conf/UserMapper.xml"/>-->
<mapperclass="com.yunqing.mybatis.dao.UserMapperAnnotation"/>
</mappers>


2).dao接口

UserMapperAnnotation.class

packagecom.yunqing.mybatis.dao;

importcom.yunqing.mybatis.bean.User;
importorg.apache.ibatis.annotations.Select;

publicinterfaceUserMapperAnnotation{

@Select("SELECT*FROMt_userwhereid=#{id}")
UsergetUserById(Integerid);
}


3)。测试代码:


@Test
publicvoidtest1()throwsIOException{
//从xml中获取sqlSessionFactory
Stringresource="conf/mybatis-config.xml";
InputStreaminputStream=Resources.getResourceAsStream(resource);
SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder().build(inputStream);

//获取sqlSession
SqlSessionsqlSession=sqlSessionFactory.openSession();

//之前的mybatis的写法
/*Useruser=sqlSession.selectOne("com.yunqing.mybatis.UserMapper.selectUserById",1);
System.out.println(user);*/

//现在的mybatis接口式编程写法
//相当于接口的实现类
UserMapperAnnotationuserMapperAnnotation=sqlSession.getMapper(UserMapperAnnotation.class);
Useruser=userMapperAnnotation.getUserById(1);//查询第一条记录
System.out.println(user);
sqlSession.close();
}





上传一波小兴奋

4.批量注册sql映射文件

一般来说比较重要且复杂的Dao接口要映射成xml文件,批量引入的时候name="接口包名",要把xml文件放入到接口的包下,且xml文件要与接口文件同名。

不重要且简单的Dao接口可以不用映射成xml,直接使用注解的方式,class引入接口全类名即可,批量引入直接写name="接口包名"

<mappers>
<!--<mapperresource="conf/UserMapper.xml"/>-->
<!--<mapperclass="com.yunqing.mybatis.dao.UserMapperAnnotation"/>-->
<packagename="com.yunqing.mybatis.dao"/>
</mappers>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: