1、mybatis-Config.xml配置文件内容和顺序如下:
1.1、properties(属性)
1.2、settings(全局配置参数)
1.3、typeAiases(类型别名)
1.4、typeHandlers(类型处理器)
1.5、objectFactory(对象工厂)
1.6、plugins(插件)
1.7、environments(环境集合属性对象)mappers(映射器)
1.8、environment(环境子属性对象)
1.9、transactionManager(事物管理)
1.10、datesource(数据源
1.11、mappers(映射器)
以上顺序不可颠倒,按照开发需要配置需要的配置内容。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!-- 1、配置 -->
<configuration>
<!-- 2、 引入连接池的参数有两种方式:属性引入,文件引入-->
<!-- 2.1、属性 :使用resource属性引入jdbc.properties文件-->
<properties resource="jdbc.properties">
<!-- 2.2、使用property子元素的方式引入属性值
<property name="database.driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="database.url" value="jdbc:oracle:thin:@192.168.4.9:1521:orcl"/>
<property name="database.username" value="gcki_test"/>
<property name="database.password" value="gcki_test"/>
-->
</properties>
<!-- 3、全局参数配置 -->
<settings>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="multipleResultSetsEnabled" value="true"/>
<setting name="useColumnLabel" value="true"/>
<setting name="useGeneratedKeys" value="false"/>
<setting name="autoMappingBehavior" value="PARTIAL"/>
<setting name="defaultExecutorType" value="SIMPLE"/>
<setting name="defaultStatementTimeout" value="25"/>
<setting name="safeRowBoundsEnabled" value="false"/>
<setting name="mapUnderscoreToCamelCase" value="false"/>
<setting name="localCacheScope" value="SESSION"/>
<setting name="jdbcTypeForNull" value="OTHER"/>
<setting name="lazyLoadTriggerMethods"
value="equals,clone,hashCode,toString"/>
</settings>
<!-- 4、别名:不区分大小写,注册别名的两种方式:配置文件和包扫描 -->
<typeAliases>
<!--4.1、 自定义别名:不然在映射器配置文件中无法使用这个对象 ,type使用类的全限定名-->
<typeAlias alias="role" type="pojo.Role"/>
<!-- 4.2、包扫描的方式注册别名,该包下的pojo对象默认是首字母小写作为别名
(可以在POJO类上使用注解@Alias("role")起一个别名)-->
<package name="pojo" />
</typeAliases>
<!-- 5、类型处理器 -->
<typeHandlers>
<typeHandler jdbcType="VARCHAR" javaType="string"
handler="com.learn.ssm.chapter4.typehandler.MyTypeHandler" />
<package name="com.learn.ssm.chapter4.typehandler" />
</typeHandlers>
<!-- 6、类型工厂(不常用) -->
<objectFactory></objectFactory>
<!-- 7、插件 -->
<plugins></plugins>
<!-- 8、环境配置 -->
<environments default="development">
<environment id="development">
<!-- 8.1、事务管理器 -->
<transactionManager type="JDBC" />
<!-- 8.2、数据源 :value的取值方式${}-->
<dataSource type="POOLED">
<property name="driver" value="${database.driver}" />
<property name="url" value="${database.url}" />
<property name="username" value="${database.username}" />
<property name="password" value="${database.password}" />
</dataSource>
</environment>
</environments>
<!-- 9、数据库厂商标识(不常用)的两种方式:主流厂商标识、自定义
<databaseIdProvider type="DB_VENDOR">
<property name="Oracle" value="oracle" />
<property name="MySQL" value="mysql" />
<property name="DB2" value="db2" />
</databaseIdProvider>
<databaseIdProvider
type="com.learn.ssm.chapter4.databaseidprovider.MyDatabaseIdProvider">
<property name="msg" value="自定义DatabaseIdProvider" />
</databaseIdProvider>
-->
<!-- 10、映射器配置文件的 三种方式:映射器配置文件、映射器接口名、包扫描 -->
<mappers>
<!-- 10.1、以配置文件的方式创建映射器:导入映射器的配置文件
<mapper resource="capter3/mapper/config/RoleMapper.xml"/>
-->
<!-- 10.2、以注解的方式创建的映射器:导入映射器接口的全限定名 -->
<mapper class="mapper.interfaced.RoleMapper"/>
<!-- 13.3、包扫描的方式注册映射器
<package name="mapper.interfaced" />
-->
</mappers>
<!-- 特别说明:MyBatis的配置文件就这些内容, 但是配置的时候顺序不能乱,否则启动阶段出现异常-->
</configuration>
3、settings全局参数配置
setting(设置) | Description(描述) | valid Values(验证值组) | Default(默认值) |
---|---|---|---|
cacheEnabled | 在全局范围内启用或禁用缓存配置 任何映射器在此配置下。 | true | false |
lazyLoadingEnabled | 在全局范围内启用或禁用延迟加载。禁用时,所有相关联的将热加载。 | true | false |
aggressiveLazyLoading | 启用时,有延迟加载属性的对象将被完全加载后调用懒惰的任何属性。否则,每一个属性是按需加载。 | true | false |
multipleResultSetsEnabled | 允许或不允许从一个单独的语句(需要兼容的驱动程序)要返回多个结果集。 | true | false |
useColumnLabel | 使用列标签,而不是列名。在这方面,不同的驱动有不同的行为。参考驱动文档或测试两种方法来决定你的驱动程序的行为如何。 | true | false |
useGeneratedKeys | 允许JDBC支持生成的密钥。兼容的驱动程序是必需的。此设置强制生成的键被使用,如果设置为true,一些驱动会不兼容性,但仍然可以工作。 | true | false |
autoMappingBehavior | 指定MyBatis的应如何自动映射列到字段/属性。NONE自动映射。 PARTIAL只会自动映射结果没有嵌套结果映射定义里面。 FULL会自动映射的结果映射任何复杂的(包含嵌套或其他)。 | NONE,PARTIAL,FULL | PARTIAL |
defaultExecutorType | 配置默认执行人。SIMPLE执行人确实没有什么特别的。 REUSE执行器重用准备好的语句。 BATCH执行器重用语句和批处理更新。 | SIMPLE,REUSE,BATCH | SIMPLE |
safeRowBoundsEnabled | 允许使用嵌套的语句RowBounds。 | true 、false | FALSE |
mapUnderscoreToCamelCase | 从经典的数据库列名A_COLUMN启用自动映射到骆驼标识的经典的Java属性名aColumn。 | true 、 false | FALSE |
localCacheScope | MyBatis的使用本地缓存,以防止循环引用,并加快反复嵌套查询。默认情况下(SESSION)会话期间执行的所有查询缓存。如果localCacheScope=STATMENT本地会话将被用于语句的执行,只是没有将数据共享之间的两个不同的调用相同的SqlSession。 | SESSION STATEMENT | SESSION |
dbcTypeForNull | 指定为空值时,没有特定的JDBC类型的参数的JDBC类型。有些驱动需要指定列的JDBC类型,但其他像NULL,VARCHAR或OTHER的工作与通用值。 | JdbcType enumeration. Most common are: NULL, VARCHAR and OTHER | OTHER |
lazyLoadTriggerMethods | 指定触发延迟加载的对象的方法。 | A method name list separated by commas | equals,clone,hashCode,toString |
defaultScriptingLanguage | 指定所使用的语言默认为动态SQL生成。 | A type alias or fully qualified class name. | org.apache.ibatis.scripting.xmltags.XMLDynamicLanguageDriver |
callSettersOnNulls | 指定如果setter方法或地图的put方法时,将调用检索到的值是null。它是有用的,当你依靠Map.keySet()或null初始化。注意原语(如整型,布尔等)不会被设置为null。 | true 、 false | FALSE |
logPrefix | 指定的前缀字串,MyBatis将会增加记录器的名称。 | Any String | Not set |
logImpl | 指定MyBatis的日志实现使用。如果此设置是不存在的记录的实施将自动查找。 | SLF4J 、 LOG4J 、 LOG4J2 、 JDK_LOGGING 、COMMONS_LOGGING 、 STDOUT_LOGGING 、NO_LOGGING | Not set |
proxyFactory | 指定代理工具,MyBatis将会使用创建懒加载能力的对象。 | CGLIB 、JAVASSIST | CGLIB |
4、配置别名(typeAiases)
mybatis默认支持的别名:
别名 | 映射的类型 |
---|---|
_byte | byte |
_long | long |
_short | short |
_int | int |
_integer | int |
_double | double |
_float | float |
_boolean | boolean |
string | String |
byte | Byte |
long | Long |
short | Short |
int | Integer |
integer | Integer |
double | Double |
float | Float |
boolean | Boolean |
date | Date |
decimal | BigDecimal |
bigdecimal | BigDecimal |
5、类型处理器(typeHandlers)
mybatis中通过typeHandlers完成jdbc类型和java类型的转换。通常情况下,mybatis提供的类型处理器满足日常需要,不需要自定义。mybatis支持类型处理器:
类型处理器 | Java类型 | JDBC类型 |
---|---|---|
BooleanTypeHandler | Boolean,boolean | 任何兼容的布尔值 |
ByteTypeHandler | Byte,byte | 任何兼容的数字或字节类型 |
ShortTypeHandler | Short,short | 任何兼容的数字或短整型 |
IntegerTypeHandler | Integer,int | 任何兼容的数字和整型 |
LongTypeHandler | Long,long | 任何兼容的数字或长整型 |
FloatTypeHandler | Float,float | 任何兼容的数字或单精度浮点型 |
DoubleTypeHandler | Double,double | 任何兼容的数字或双精度浮点型 |
BigDecimalTypeHandler | BigDecimal | 任何兼容的数字或十进制小数类型 |
StringTypeHandler | String | CHAR和VARCHAR类型 |
ClobTypeHandler | String | CLOB和LONGVARCHAR类型 |
NStringTypeHandler | String | NVARCHAR和NCHAR类型 |
NClobTypeHandler | String | NCLOB类型 |
ByteArrayTypeHandler | byte[] | 任何兼容的字节流类型 |
BlobTypeHandler | byte[] | BLOB和LONGVARBINARY类型 |
DateTypeHandler | Date(java.util) | TIMESTAMP类型 |
DateOnlyTypeHandler | Date(java.util) | DATE类型 |
TimeOnlyTypeHandler | Date(java.util) | TIME类型 |
SqlTimestampTypeHandler | Timestamp(java.sql) | TIMESTAMP类型 |
SqlDateTypeHandler | Date(java.sql) | DATE类型 |
SqlTimeTypeHandler | Time(java.sql) | TIME类型 |
ObjectTypeHandler | 任意 | 其他或未指定类型 |
EnumTypeHandler | Enumeration类型 | VARCHAR-任何兼容的字符串类型,作为代码存储(而不是索引)。 |