源码:
public interface SqlSessionFactory { SqlSession openSession(); SqlSession openSession(boolean var1); SqlSession openSession(Connection var1); SqlSession openSession(TransactionIsolationLevel var1); SqlSession openSession(ExecutorType var1); SqlSession openSession(ExecutorType var1, boolean var2); SqlSession openSession(ExecutorType var1, TransactionIsolationLevel var2); SqlSession openSession(ExecutorType var1, Connection var2); Configuration getConfiguration();}
分析:
1、无参数 openSession() 无须解释
2、openSession(boolean var1) : api 中为[ openSession(boolean autoCommit) ],该布尔值是用来控制该 sqlSession 是否自动提交,true表示自动提交,false表示不自动提交[与无参的方法功能一致,都不自动提交]
3、openSession(Connection var1) :api中为[ openSession(Connection connection) ],该Connection为 java.sql.Connection
4、openSession(TransactionIsolationLevel var1) :api中为[ openSession(TransactionIsolationLevel level) ]
TransactionIsolationLevel 事务的隔离级别,枚举类型,有5个值:NONE、READ_COMMITTED(读取提交内容)、READ_UNCOMMITTED(读取未提交内容)、REPEATABLE_READ(可重读)、SERIALIZABLE(可串行化)
5、openSession(ExecutorType var1) :api中为[ openSession(ExecutorType execType) ],ExecutorType执行器类型,枚举类型,有3个值:SIMPLE、REUSE(重用预处理语句)、BATCH(重用语句和批量更新)
6、其他为上面的组合,含义一致
调皮的 COMMIT
mybatis 默认是不自动提交的,因此可能出现一个奇怪的问题:在select数据库是没有问题, insert、delete、update也可以成功,但是数据没有发生变化,就是因为这个调皮的commit默认机制导致的
解决办法:需要在insert、delete、update后手动提交,或者在创建sqlSession时使用上面第二种方式,参数设置为True即可解决