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操作的工具对象。