Maven dependency :
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>x.x.x</version> </dependency>XML 配置文件(configuration XML)中包含了对 MyBatis 系统的核心设置,包含获取数据库连接实例的数据源(DataSource)和决定事务作用域和控制方式的事务管理器(TransactionManager)。简单的示例:
<?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> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="com.test.BoneCPDataSourceFactory"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> <property name="partitionCount" value="${bonecp.partitionCount}"/> <property name="maxConnectionsPerPartition" value="${bonecp.maxConnectionsPerPartition}"/> <property name="minConnectionsPerPartition" value="${bonecp.minConnectionsPerPartition}"/> <property name="acquireIncrement" value="${bonecp.acquireIncrement}"/> <property name="disableConnectionTracking" value="true"/> </dataSource> </environment> </environments> <mappers> <mapper resource="org/mybatis/example/BlogMapper.xml"/> </mappers> </configuration>
。environment 元素体中包含了事务管理和连接池的配置。mappers 元素则是包含一组 mapper 映射器(这些 mapper 的 XML 文件包含了 SQL 代码和映射定义信息)
数据源 使用 BoneCP连接池的数据源:
import com.testBoneCPDataSource;
import org.apache.ibatis.datasource.unpooled.UnpooledDataSourceFactory;
public class BoneCPDataSourceFactory extends UnpooledDataSourceFactory {
public BoneCPDataSourceFactory() {
this.dataSource = new BoneCPDataSource();
}
}
不使用 XML 构建 SqlSessionFactory
如果你更愿意直接从 Java 程序而不是 XML 文件中创建 configuration,或者创建你自己的 configuration 构建器,MyBatis 也提供了完整的配置类,提供所有和 XML 文件相同功能的配置项。
DataSource dataSource = BlogDataSourceFactory.getBlogDataSource(); TransactionFactory transactionFactory = new JdbcTransactionFactory(); Environment environment = new Environment("development", transactionFactory, dataSource); Configuration configuration = new Configuration(environment); configuration.addMapper(BlogMapper.class); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
注意该例中,configuration 添加了一个映射器类(mapper class)。映射器类是 Java 类,它们包含 SQL 映射语句的注解从而避免了 XML 文件的依赖。不过,由于 Java 注解的一些限制加之某些 MyBatis 映射的复杂性,XML 映射对于大多数高级映射(比如:嵌套 Join 映射)来说仍然是必须的。有鉴于此,如果存在一个对等的 XML 配置文件的话,MyBatis 会自动查找并加载它(这种情况下, BlogMapper.xml 将会基于类路径和 BlogMapper.class 的类名被加载进来)
SqlSession 实例:
SqlSession session = sqlSessionFactory.openSession(); try { Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101); } finally { session.close(); }
public void init() {
if (sqlSessionFactory != null) return;
try {
ClassLoader origLoader = Thread.currentThread().getContextClassLoader();
ClassLoader extensionLoader = getClass().getClassLoader();
Thread.currentThread().setContextClassLoader(extensionLoader);
InputStream in = getClass().getResourceAsStream("/" + LOCAL_MYBATIS_FILE);
Properties properties = GameEngine.getInstance().getConfigProperties();
properties.setProperty("local.jdbc.url", PropertyFileReader.getRealTimeItem("local.jdbc.url"));
sqlSessionFactory = new SqlSessionFactoryBuilder().build(in, properties);
Thread.currentThread().setContextClassLoader(origLoader);
logger.info("mybatis is ready");
} catch (Exception e) {
logger.error(e);
}
}
org.apache.ibatis.builder.xml.XMLConfigBuilder 解析类主要解析方法:
public Configuration parse() {
if (parsed) {
throw new BuilderException("Each MapperConfigParser can only be used once.");
}
parsed = true;
parseConfiguration(parser.evalNode("/configuration"));
return configuration;
}
private void parseConfiguration(XNode root) {
try {
typeAliasesElement(root.evalNode("typeAliases"));
pluginElement(root.evalNode("plugins"));
objectFactoryElement(root.evalNode("objectFactory"));
objectWrapperFactoryElement(root.evalNode("objectWrapperFactory"));
propertiesElement(root.evalNode("properties"));
settingsElement(root.evalNode("settings"));
environmentsElement(root.evalNode("environments"));
typeHandlerElement(root.evalNode("typeHandlers"));
mapperElement(root.evalNode("mappers"));
} catch (Exception e) {
throw new BuilderException("Error parsing SQL Mapper Configuration. Cause: " + e, e);
}
}
官网配置:http://www.mybatis.org/mybatis-3