首先来说呢,跟之前学过的对比来说:Hibernate是全自动化的ORM映射框架,MyBatis是半自动化得ORM映射框架。
一、什么是Mybatis
Mybatis是支持自定义sql查询,存储过程和高级映射的优秀持久层框架,它几乎消除了所有JDBC代码和手动设置参数以及结果集的检索。它和hibernate一样,也具有POJO和数据库记录相互映射的功能。
二、创建SqlSessionFactory
每一个MyBatis 应该都是以一个SqlSessionFactory实例为中心。一个SqlSessionFactory实例可以使用SqlSessionFactoryBuilder来创造。从配置类中创造的定制SqlSessionFactoryBuilder实例,可以使用XML配置文件来生成一个SqlSessionFactory实例。
第一种:从XML中创造SqlSessionFactory
从XML文件中创造SqlSessionFactory实例是非常简单的。推荐使用一个类路径资源来进行配置,你也可以使用一个Reader实例,甚至使用URL路径。
MyBatis有一个Resources通用类,类中有许多方法可以简单地从类路径和其他地址中加载资源。
String resource = "org/mybatis/example/Configuration.xml";
Reader reader = Resources.getResourceAsReader(resource);
sqlMapper = new SqlSessionFactoryBuilder().build(reader);
XML文件包含了许多MyBatis的核心设置,包括一个获取数据库连接(Connection)实例的数据源(DataSource),和一个决定事务作用域和操作的TransactionManager。全部的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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
XML配置文件中还有其它许多内容,上面的例子只是指出了最重要的部分。注意这个XML的标头,需
要一个DTD验证文档。environment项里包含了事务管理和连接池的环境配置。mappers项中包含了一
系列SQL语句映射定义的XML文件。
第二种:不使用XML文件新建SqlSessionFactory
如果你更想直接使用Java语言而不是XML来生成这些配置,更或者你想使用自己的配置生成器,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);
这个配置里,加载了一个映射类。映射类是包含了SQL映射注解的Java类,可以用来取代XML。然而,由于Java注解的一些限制和MyBatis映射的复杂性,一些高级的映射还是要用XML来配置,比如嵌套映射等。由于这个原因,MyBatis会自动查找和加载已经存在的XML。比如说上面的代码,BlogMapper.xml将会被类路径中BlogMapper.class加载。以后会详细讨论这些。
三、使用SqlSessionFactory获取SqlSession
假设你有一个SqlSessionFactory,你就可以来获取一个SqlSession实例,SqlSession包含了针对数据库执
行语句的每一个方法。你可以直接使用SqlSession执行已经映射的每一个SQL语句。比如:
SqlSession session = sqlMapper.openSession();
try {
Blog blog = (Blog) session.select(
"org.mybatis.example.BlogMapper.selectBlog", 101);
} finally {
session.close();
}
上述步骤对于使用MyBatis的上一个版本(即iBatis2)的用户来说比较熟悉。现在,有一个更加清晰的
方式。使用一个有正确参数和返回值的接口,你就可以更加清晰和安全地编写代码,从而避免出错。像
这样:
SqlSession session = sqlSessionFactory.openSession();
try {
BlogMapper mapper = session.getMapper(BlogMapper.class);
Blog blog = mapper.selectBlog(101);
} finally {
session.close();
}
这样mybatis的基本配置就完成了。