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
environmentenvironment 的 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
DatasourcedataSource 主要用来指定数据库连接属性dataSource 的 type 属性可以为以下 3 种值UNPOOLEDPOOLEDJNDIJNDI 数据源中取得数据库连接TransactionManagerMyBatis 支持两种事务管理方式JDBC commit / rollback 等方式进行事务处理JdbcTransactionFactory 创建 TransactionManagerTomcat 部署的应用程序MANAGEDManagedTransactionFactory 创建 TransactionManagerJBoss / WebLogic / GlassFishPropertieskey - value 方式存储属性信息properties 中可以使用 property 元素设置默认属性信息,会被属性文件的同名属性覆盖TypeAliases
mapper 中的全限定名 Fully Qualified Namepackage 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 定义全限定文件系统路径或网络 URLclass 定义映射接口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;
}
}