SqlSession
SqlSession是mybatis的 主要java接口。SqlSession 由 SqlSessionFactory 对象创建,
SqlSessionFactory 则 由 SqlSessionFactoryBuild对象通过加载 xml 配置文件的文件流 或者 Configuration 对象生成
相关层级
- SqlSessionFactoryBuild
- SqlSessionFactory
- SqlSession
代码演示:
String resource = "resource/common/mybatis-config.xml"
InputStream in = Resources.getResourceAsStream(resource );
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
SqlSession sqlSession = sqlSessionFactory.openSession();
properties参数加载顺序
-
首先读取在 properties 元素体中指定的属性;
-
其次,读取从 properties 元素的类路径 resource 或 url 指定的属性,且会覆盖已经指定了的重复属性;
-
最后,读取作为方法参数传递的属性,且会覆盖已经从 properties 元素体和 resource 或 url 属性中加载了的重复属性。
因此,通过方法参数传递的属性的优先级最高,resource 或 url 指定的属性优先级中等,在 properties 元素体中指定的属性优先级最低。
Resources类
API method
SqlSessionFactory
SqlSessionFactory 有如下方法可以创建 SqlSession 实例。
SqlSession openSession()
SqlSession openSession(boolean autoCommit)
SqlSession openSession(Connection connection)
SqlSession openSession(TransactionIsolationLevel level)
SqlSession openSession(ExecutorType execType,TransactionIsolationLevel level)
SqlSession openSession(ExecutorType execType)
SqlSession openSession(ExecutorType execType, boolean autoCommit)
SqlSession openSession(ExecutorType execType, Connection connection)
Configuration getConfiguration();
默认的SqlSession
-
会开启一个事务(也就是不自动提交)。
-
将从由当前环境配置的 DataSource 实例中获取 Connection 对象。
事务隔离级别将会使用驱动或数据源的默认设置。 -
预处理语句不会被复用,也不会批量处理更新。
SqlSession
执行语句方法
这些方法被用来执行定义在 SQL 映射的 XML 文件中的 SELECT、INSERT、UPDATE 和 DELETE 语句。
<T> T selectOne(String statement, Object parameter)
<E> List<E> selectList(String statement, Object parameter)
<T> Cursor<T> selectCursor(String statement, Object parameter)
<K,V> Map<K,V> selectMap(String statement, Object parameter, String mapKey)
int insert(String statement, Object parameter)
int update(String statement, Object parameter)
int delete(String statement, Object parameter)
分页参数 RowBounds,
实例化的时候调用含参的构造器,创建一个RowBounds类实例,
通过实例可以获取limit 和offset属性。
SqlSession的事务控制
void commit()
void commit(boolean force)
void rollback()
void rollback(boolean force)
Session级别的 本地缓存
Mybatis 使用到了两种缓存:本地缓存(local cache)和二级缓存(second level cache)。
每当一个新 session 被创建,MyBatis 就会创建一个与之相关联的本地缓存。
任何在 session 执行过的查询语句本身都会被保存在本地缓存中,那么,相同的查询语句和相同的参数所产生的更改就不会二度影响数据库了。
设置 localCacheScope=STATEMENT 表示缓存仅在语句执行时有效。 如果 localCacheScope 被设置为 SESSION,那么 MyBatis 所返回的引用将传递给保存在本地缓存里的相同对象。对返回的对象(例如 list)做出任何更新将会影响本地缓存的内容,进而影响存活在 session 生命周期中的缓存所返回的值。因此,不要对 MyBatis 所返回的对象作出更改,以防后患。
本地缓存会被增删改、提交事务、关闭事务以及关闭 session 所清空。
你可以随时调用以下方法来清空本地缓存:
void clearCache();