官方说明:
- MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。 配置文档的顶层结构如下:
- configuration(配置)
- properties(属性)
- settings(设置)
- typeAliases(类型别名)
- typeHandlers(类型处理器)
- objectFactory(对象工厂)
- plugins(插件)
- environments(环境配置)
- environment(环境变量)
- transactionManager(事务管理器)
- dataSource(数据源)
- databaseIdProvider(数据库厂商标识)
- mappers(映射器)
1、常用配置
db.properties
mysql.driver=com.mysql.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/mybatis
mysql.username=root
mysql.password=123456
mybatis-config.xml
<?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">
<configuration>
<!--配置外部属性资源文件 通过${}进行引用-->
<properties resource="db.properties">
<!--可以在定义内部的属性 引用方式是一样的-->
<property name="mysql.username" value="root"/>
</properties><!-- environments 可以多个环境:default 默认的数据库环境 -->
<environments default="development">
<!--environment 配置数据库环境 id 指定当前数据库环境的唯一表示, 会被父节点default所设置-->
<environment id="development">
<!--
事务管理器 类型
type = JDBC 使用jdbc的事务管理
MANAGED 不运用事务
-->
<transactionManager type="JDBC"/>
<!--数据源
type 指定连接池
POOLED 指定使用mybatis的连接池
UNPOOLED 不使用连接池
JNDI JNDI连接池 可以在tomcat中使用
-->
<dataSource type="POOLED">
<property name="driver" value="${mysql.driver}"/>
<property name="url" value="${mysql.url}"/>
<property name="username" value="${mysql.username}"/>
<property name="password" value="${mysql.password}"/>
</dataSource>
</environment><!-- 第二个数据源 -->
<environment id="test">
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis_test"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--设置映射器-->
<mappers>
<!--
指定具体的不同的配置文件
4种映射方式
1.<mapper resource 设置MapperXml 这种方式适用根据statementId进行操作
2.<mapper class 设置Mapper接口 这种方式适用接口绑定的方式和注解
3.<mapper url 使用磁盘的绝对路径或者网络路径(基本不用)
4.<package 根据包设置包下面所有的Mapper接口, 这种方式适用接口绑定的方式和注解
-->
<!--<mapper resource="EmpMapper.xml"/>-->
<!--<mapper class="cn.test.mapper.EmpMapper"></mapper>--><!--
当包含多个配置文件或者配置类的时候,可以使用批量注册的功能,也就是引入对应的包,而不是具体的配置文件或者类
但是需要注意的是,
1、如果使用的配置文件的形式,必须要将配置文件跟dao类放在一起,这样才能找到对应的配置文件.
如果是maven的项目的话,还需要添加以下配置,原因是maven在编译的文件的时候只会编译java文件
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
2、将配置文件在resources资源路径下创建跟mapper相同的包名
-->
<package name="cn.test.mapper"/>
</mappers>
</configuration>
2、扩展配置
2.1 settings设置
可以改变mybatis运行时行为
(1)useColumnLabel
是否允许在SQL中使用别名 默认是允许:当设置别名后会根据SQL的别名和属性名进行映射(基本不用设置)
<setting name="useColumnLabel" value="true"/>
(2)autoMappingUnknownColumnBehavior
用于当字段名和属性名自动映射不匹配时发生的动作(通常不会去设置)
- NONE 什么都不发生,没有映射上就不赋值 默认
- WARNING 发送一条级别为WARN的日志
- FAILING 当映射不上直接报错
<setting name="autoMappingUnknownColumnBehavior" value="FAILING"/>
(3)defaultExecutorType
设置默认执行器
- SIMPLE 就是普通的执行器 默认
- REUSE 执行器会重用预处理语句(PreparedStatement)
- BATCH 执行器不仅重用语句还会执行批量更新
<setting name="defaultExecutorType" value="REUSE"/>
(4)defaultStatementTimeout
设置查询的超时时间,单位:秒
<setting name="defaultStatementTimeout" value="1"/>
(5)mapUnderscoreToCamelCase(常用)
是否将数据库的蛇形命名自动映射为驼峰命名
<setting name="mapUnderscoreToCamelCase" value="true"/>
(6)jdbcTypeForNull
往数据库插入数据某个数据值为null时映射到数据库的类型
- OTHER mysql是可以识别出OTHER类型的 默认
- NULL 如果是oracle一定要设置成NULL,ORACLE识别不出OTHER类型
- VARCHAR 当属性值为空时为数据库设置一个空字符串
<setting name="jdbcTypeForNull" value="OTHER"/>
(7)logImpl
加入mybatis框架中实现多个日志框架, 可以使用logImpl来设置使用的日志框架
如果使用了日志门面slf4j可以不用设置该配置,因为slf4j本身就是负责选择使用哪种日志实现框架的
<setting name="logImpl" value="SLF4J"/>
2.2 typeAliases类型别名
类型别名可为Java类型设置一个缩写名字。它仅用于XML配置,意在降低冗余的全限定类名书写
<typeAliases>
<!--根据包设置包里面所有的类的别名 :会将类的名字作为别名(忽略大小写)
还可以为包里面的类单独设置个性别名:@Alias(默认以类名字作为别名就会失效)
除了可以设置自定义的类的别名以为,mybatis还内置很多常见类型的别名
-->
<package name="cn.test.pojo"/>
</typeAliases>
<!--根据id查询Emp-->
<select id="SelectEmp" resultType="emp" >
SELECT id,user_name FROM EMP WHERE id=#{id}
</select>
2.3、 plugins插件
可以把它理解成mybatis的拦截器,可以拦截4大对象,可以拦截SQL 给SQL去加一些公共的功能
<plugins>
<plugin interceptor="org.mybatis.example.ExamplePlugin">
<property name="someProperty" value="100"/>
</plugin>
</plugins>
2.4 databaseIdProvider(数据库厂商标识)
在不同的数据库中,可能sql语句的写法是不一样的,为了增强移植性,可以提供不同数据库的操作实现
在编写不同的sql语句的时候,可以指定databaseId属性来标识当前sql语句可以运行在哪个数据库中
<databaseIdProvider type="DB_VENDOR">
<property name="MySQL" value="mysql"/>
<property name="SQL Server" value="sqlserver"/>
<property name="Oracle" value="orcl"/>
</databaseIdProvider>
3、配置位置
<?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">
<configuration>
<properties resource="db.properties"></properties>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<typeAliases>
<!-- <typeAlias type="cn.test.bean.Emp" alias="Emp"></typeAlias>-->
<package name="cn.test.bean"/>
</typeAliases><!--default:用来选择需要的环境-->
<environments default="development">
<!--id:表示不同环境的名称-->
<environment id="development">
<transactionManager type="JDBC"/>
<!--配置数据库连接-->
<dataSource type="POOLED">
<!--使用${}来引入外部变量-->
<property name="driver" value="${driverClassname}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments><databaseIdProvider type="DB_VENDOR">
<property name="MySQL" value="mysql"/>
<property name="SQL Server" value="sqlserver"/>
<property name="Oracle" value="orcl"/>
</databaseIdProvider>
<!--将sql的映射文件适用mappers进行映射-->
<mappers>
<package name="cn.test.mapper"/>
</mappers>
</configuration>