对Mybatis入门代码中SqlSession的理解(不一定对)

public class MybatisUtils {
    //static是静态代码块,每一次调用都会执行
    private static SqlSessionFactory sqlSessionFactory;//提升代码作用域
    static {
        //ctrl+alt+t:快速包裹代码块
        try {
            //使用Mybatis第一步:把资源加载进来,获取sqlSessionFactory对象
            String resource = "org/mybatis/example/mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //第二步 创建能执行sql的对象。从SqlSessionFactory中获得SqlSession的实例
    //SqlSession完全包含了面向数据库执行sql命令所需的所有方法
    public static SqlSession getSqlSession() {
        SqlSession session = sqlSessionFactory.openSession();
        return session;
    }
}

跟着视频敲这部分代码的时候,我很懵逼,因为自己java学得并不好,看不懂这种一层套一层,最后返回一个对象(千层饼)的形式,于是我一行行对着代码研究了一下。

1. MybatisUtils:

工具类,这个类虽然暂时没看懂,但知道了它的作用是制造工具

2. 提升代码作用域:

把声明写在static块的外面,这样别的地方也能用

private static SqlSessionFactory sqlSessionFactory;
3. static {...}:

静态代码块,每一次调用MybatisUtils这个类的时候,默认执行里面的内容

4. resource:config配置文件的路径
String resource = "org/mybatis/example/mybatis-config.xml";
5. inputStream:获取输入流对象
InputStream inputStream = Resources.getResourceAsStream(resource);

老实说这一段我也不知道它在干嘛,也不知道什么叫输入流对象,遂百度了一下,知道了它的用处:

原帖:Mabatis 源码探究(2)Java 获取mybatis-config.xml的输入流 inputStream对象http://t.csdn.cn/GYqiu
6. sqlSessionFactory对象:工厂类?
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

且看这一段代码,“=”右边的FactoryBuilder就是工厂建造,调用了build方法,最终返回了一个Factory对象!原来如此,虽然我还是不太懂其中的原理,但至少知道了这一段static块在干嘛:

———造工厂!

7. getSqlSession方法
    //第二步 创建能执行sql的对象。从SqlSessionFactory中获得SqlSession的实例
    //SqlSession完全包含了面向数据库执行sql命令所需的所有方法
    public static SqlSession getSqlSession() {
        SqlSession session = sqlSessionFactory.openSession();
        return session;
    }

返回类型是SqlSession,但sqlsession是啥呢,百度了一下:

SqlSession是MyBatis的关键对象,是执行持久化操作的对象,类似于JDBC中的Connection。

它是应用程序与持久存储层之间执行交互操作的一个单线程对象,也是MyBatis执行持久化操作的关键对象。

SqlSession对象完全包含以数据库为背景的所有执行SQL操作的方法,它的底层封装了JDBC连接,可以用SqlSession实例来直接执行已映射的SQL语句。

咱也不太懂,只知道sqlsession可以执行*所有*的sql操作,那它不就相当于一个工具吗!

再看这个getSqlSession方法:

SqlSession session = sqlSessionFactory.openSession();
return session;

终于明白了,这个方法就是得到一个sqlSession工具,而且是通过工厂造出来的。

8.总结:

MybatisUtils类就是先造工厂,再用工厂造工具。具体干什么呢?就是先读配置文件里的信息并连上数据库(类似jdbc一开始connection干的事),然后再弄出一个可以执行sql操作的工具对象。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值