MyBatis之(一)入门by zhanyr

MyBatis是支持定制化SQL、存储过程以及高级映射的持久层框架。它避免了JDBC中手动设置参数以及获取结果集的缺点。可以对配置和原生Map使用简单的XML或注解,将接口和Java的POJO映射成数据库中的记录。

安装

要使用MyBaitis,首先要保证我们的开发环境中有它的开发包,有两种方式:

直接引入jar包

将mybatis-x.x.x.jar文件放入classpath中。

maven中添加依赖

<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis</artifactId>
	<version>x.x.x</version>
</dependency>	

Mybatis流程

流程图

创建SqlSessionFactory实例

Mybatis应用程序的入口是SqlSessionFactoryBuilder,他的作用是通过xml配置文件或者是通过java程序创建Mybaits的实例中心SqlSessionFactory。

通过xml创建SqlSessionFactory

String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);//加载配置文件
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//创建sqlSessionFactory

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>
	<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创建SqlSessionFactory

DataSource datasource = createDataSource();//创建dateSource数据源
TransactionFactory transactionFactory = new JdbcTransactionFactory();//创建事务
Environment environment = new Environment("development", transactionFactory, dataSource);
Configuration configuration = new Configuration(environment);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);

SqlSessionFactoryBuilder这个类的实例只用来创建SqlSessionFactory,一旦创建完成,sqlSessionFactoryBuilder就不再需要了(方法范围)sqlSessionFactory一旦被创建,就应该在应用的运行期间一直存在(应用范围),整个应用最好只有一个SqlSessionFactory实例。

创建SqlSession实例

当创建了sqlSessionFactory工厂实例之后,我们就可以通过它获得SqlSession的实例了。SqlSession包含了面向数据库执行 SQL命令所需的所有方法。 方式一:

SqlSession session = 	sqlSessionFactory.openSession();
try {
	Blog  blog = (Blog)session.selectOne(
		"org.mybatis.example.BlogMapper.selectBlog", 101);
	} finally {
		session.close();
	}

方式二:

SqlSession session = sqlSessionFactory.openSession();
try {
	BlogMapper mapper = session.getMapper(BlogMapper.class);//映射器实例
	Blog blog = mapper.selectBlog(101);
	} finally {
	session.close();
	}

SqlSession有一个方法getMapper用来获取Mapper对象。这个方法是联系应用程序和Mybatis纽带,应用程序访问getMapper时,Mybatis会根据传入的接口类型和对应的XML配置文件生成一个代理对象,这个代理对象就叫Mapper对象。应用程序获得Mapper对象后,就应该通过这个Mapper对象来访问Mybatis的SqlSession对象,这样就达到里插入到Mybatis流程的目的。

每个线程都应该有它自己的SqlSession实例。SqlSession实例不是线程安全的,所以不能共享。

Executor对象

Executor对象在创建Configuration对象的时候创建,并且缓存在Configuration对象里。Executor对象的主要功能是调用StatementHandler访问数据库,并将查询结果存入缓存中(如果配置了缓存的话)。

StatementHandler对象

StatementHandler是真正访问数据库的地方,并调用ResultSetHandler处理查询结果。

ResultSetHandler对象

处理查询结果。

Published 15 July 2015