之前的三篇文章 我讲解了MyBatis的安装、详细配置、Mapper配置讲解, 这篇文章,就来整体的来写个整体的使用流程。
MyBatis使用流程
1.配置MyBatis环境(添加MyBatis、数据库驱动 jar文件)
2.配置mybatis-config.xml (自定义类型映射,数据源,Mapper)
3.编写Mapper的接口和xml文件
4.用SqlSessionFactoryBuilder实例化SqlSessionFactory
5.创建一个会话SqlSession
6.获取Mapper实例
7.使用Mapper接口实例做数据库操作并获得结果
8.关闭SqlSession释放资源
以上 就是MyBatis的使用整体流程。当然 前两项在项目添加MyBatis之后配置一下就可以了 后面的步骤 是每次做数据库操作时都要用的。
前面我也说了 SqlSessionFactory会打开一个到数据库的连接,我们整个程序中连接同一个数据库 就用一个SqlSessionFactory实例即可,那么我们这里就将这个SqlSessionFactory编写成单利形式,让我们项目之后都直接用他就可以了。实例化SqlSessionFactory是需要使用SqlSessionFactoryBuilder,我们来看看我们的获取SqlSessionFactory单利的工具类代码
public class DbUtils {
private static volatile SqlSessionFactory sqlSessionFactory;
public static SqlSessionFactory obtionSqlSessionFactory()
{
if( sqlSessionFactory == null )
{
synchronized (DbUtils.class)
{
if(sqlSessionFactory == null )
{
sqlSessionFactory = getSqlSessionFactory();
}
}
}
return sqlSessionFactory;
}
private static SqlSessionFactory getSqlSessionFactory()
{
String resource = "mybatis-config.xml";
SqlSessionFactory sqlSessionFactory = null;
try {
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build( inputStream );
} catch (IOException e) {
e.printStackTrace();
}
return sqlSessionFactory;
}
}
这是一个常见的线程安全单利 在构建SqlSessionFactory的时候。使用了mybatis-config.xml 配置文件 大家可以根据自己的配置文件所在的位置修改这里的文件路径,我们可以看到 在外部使用
SqlSessionFactory factory = DbUtils.obtionSqlSessionFactory();
获取SqlSessionFactory的时候。只会在第一次构建出来一个SqlSessionFactory实例化对象,之后就会一直使用这个实例化对象。当然我这里是连接一个数据库,如果要用到多个数据库大家就自行添加多个SqlSessionFactory实例化对象单利即可,这里不过多介绍。
上面我们编写了获取SqlSessionFactory实例化对象的工具类,下面我们就看看在程序如何使用它,我们使用上一篇文章使用的Mapper接口和xml
UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.brok1n.web.java.springmvcdemo1.mapper.UserMapper">
<select id="selectUser" resultType="user">
select * from user where id = #{id}
</select>
</mapper>
UserMapper.java
public interface UserMapper {
User selectUser(String id);
}
我们的准备工作已经就绪,下面来看看完整的使用MyBatis的代码
@Controller
public class HelloController {
@RequestMapping( value = "selectUser.do", method = RequestMethod.POST)
@ResponseBody
public String selectUser(String uid )
{
SqlSessionFactory factory = DbUtils.obtionSqlSessionFactory();
SqlSession sqlSession = null;
try {
sqlSession = factory.openSession();
UserMapper userMapper = sqlSession.getMapper( UserMapper.class );
System.out.println("userMapper:" + userMapper );
User user = userMapper.selectUser(uid);
//sqlSession.commit(); 在事务操作后需要commit提交事务 事务操作包括 insert/update/delete 这里是select不需要commit
if( user != null )
{
System.out.println("" + user.toString());
}
return JSON.toJSONString( user );
}
catch (Exception e )
{
e.printStackTrace();
//如果事务处理出现异常 就回滚
if( sqlSession != null )
{
sqlSession.rollback();
}
}
finally {
//用完之后一定要关闭sqlSession
if( sqlSession != null )
{
sqlSession.close();
}
}
return "操作失败";
}
}
上面是一个简单的在SpringMVC的Controller里使用MyBatis的例子,这篇文章 整合了使用MyBatis的使用流程,结合我前面的几篇文章 我相信大家已经很熟悉MyBatis了。当然 这系列的文章还有个东西没有详细讲解就是resultMap 这东西比较复杂,用到的时候大家可以自行查找相关的用法。
2017/3/29
by brok1n