前边我们讲过了两个持久层框架Hibernate和Mybatis的区别和适用场景,即Mybatis是一个不完全的ORM框架,须程序员编写SQL,所以对SQL的修改和优化很方便,而且将SQL相关内容放到了xml配置文件中,避免了JDBC API中的硬编码的问题,但是同时他也对输入参数-SQL参数和SQL查询结果-Java对象进行了映射。适用于需求变化较快的项目,比如:互联网项目。而Hibernate是一个标准的ORM框架,不需要程序员编写SQL,SQL根据HQL和hbm.xml文件自动生成了,因此在修改和优化SQL语句时会很困难,适用场景为项目需求变化较小的项目。
今天我们来讲一讲类似于Hibernate中Session的SqlSession这个接口。
1.SqlSession
它是一个面向程序员的接口,这个接口中提供了很多操作数据库的方法。
它除了包含方法外,这接口的实现类中还有一些数据域的属性,但是这个SqlSession的实例时单例的,因此就容易造成线程不安全的问题。
SqlSession的最佳应用场合是在方法中,因为每个线程都有不同的方法区,即不安全的线程类的对象定义在方法中最安全。
2.SqlSessionFactory的使用范围
我们知道在和Spring整合之后,SqlSessionFactory将会被IOC容器管理成单例模式。