mybatis-config.xml
使用 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="application.properties">
<property name="username" value="your_username"/>
<property name="password" value="your_password"/>
</properties>
<settings>
<setting name="cacheEnabled" value="true"/>
</settings>
<typeAliases>
<typeAlias alias="user" type="model.User"/>
<package name="model"/>
</typeAliases>
<typeHandlers>
<typeHandler handler="typehandler.YourTypeHandler"/>
<package name="typehandler"/>
</typeHandlers>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
<environment id="production">
<transactionManager type="MANAGED"/>
<dataSource type="JNDI">
<property name="data_source" value="java:comp/jdbc/MyBatisDemoDataSource"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="user-mapper.xml"/>
<mapper url="file:///absolute_path/user-apper.xml"/>
<mapper class="mapper.UserMapper"/>
</mappers>
</configuration>
Environment
environment
environment
的 id 表明数据环境的不同用途,如 development
/ test
/ production
等environments
的 default
属性指定当前的数据环境一个应用程序可以使用多个数据环境
// use default environment
inputStream = Resources.getResourceAsStream("mybatis-config.xml");
defaultSqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// use environment a
aSqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream, "environment-id_a");
// use environment b
bSqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream, "environment-id_b");
每个 environment
中须定义 transactionManager
和 dataSource
Datasource
dataSource
主要用来指定数据库连接属性dataSource
的 type
属性可以为以下 3 种值UNPOOLED
POOLED
JNDI
JNDI
数据源中取得数据库连接TransactionManager
MyBatis
支持两种事务管理方式JDBC
commit / rollback
等方式进行事务处理JdbcTransactionFactory
创建 TransactionManager
Tomcat
部署的应用程序MANAGED
ManagedTransactionFactory
创建 TransactionManager
JBoss / WebLogic / GlassFish
Properties
key - value
方式存储属性信息properties
中可以使用 property
元素设置默认属性信息,会被属性文件的同名属性覆盖TypeAliases
mapper
中的全限定名 Fully Qualified Name
package
name
会自动注册包中的类型为全部小写的别名还可以用 @alias
注解指定一个类型的别名,这种方式覆盖 typeAliases
元素的设置
@Alias("specified-alias")
public class Model {}
TypeHandlers
MyBatis
内置类型处理器能够处理的类型对其他特定类型,需要使用类型处理器进行类型转换
扩展 BaseTypeHandler<T>
抽象父类
public YourCustomTypeHandler extends BaseTypeHandler<CustomType> {
}
在 mybatis-config.xml
中注册类型处理器
<typeHandlers>
<typeHandler handler="your.package.YourCustomTypeHandler"/>
</typeHandlers>
Settings
MyBatis
默认全局设定
<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="25000"/>
<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>
Mappers
Mapper XML
文件的路径resource
定义 classpath
映射文件url
定义全限定文件系统路径或网络 URL
class
定义映射接口package
映射接口所在的包路径Java API
使用 Java API 的方式进行配置
public static SqlSessionFactory getSqlSessionFactory() {
SqlSessionFactory sqlSessionFactory = null;
try{
DataSource dataSource = DataSourceFactory.getDataSource();
TransactionFactory transactionFactory = new JdbcTransactionFactory(); // new ManagedTransactionFactory();
Environment environment = new Environment("development", transactionFactory, dataSource);
Configuration configuration = new Configuration(environment);
configuration.getTypeAliasRegistry().registerAlias("user", User.class);
configuration.getTypeHandlerRegistry().register(YourTypeHandler.class,YourTypeHandler.class);
configuration.addMapper(UserMapper.class);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
} catch (Exception e){
throw new RuntimeException(e);
}
return sqlSessionFactory;
}
public class DataSourceFactory {
public static DataSource getDataSource() {
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql:///test";
String username = "your_username";
String password = "your_password";
PooledDataSource dataSource = new PooledDataSource(driver, url, username, password);
return dataSource;
}
}