MyBatis 使用笔记(4) 完结篇

之前的三篇文章 我讲解了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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

他是个小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值