Mybatis配置insert时,插入数据失败
2017-09-14 23:42
288 查看
错误代码如下:
openSession()会创建一个事物,但是不会自动提交
openSession(true)会创建一个事物,并自动提交
openSession(Connection connection),不使用数据元配置,而是自定义的一个链接
openSession(TransactionIsolationLevel level)事物的隔离级别:
(NONE,READ_UNCOMMITTED,READ_COMMITTED,REPEA
TABLE_READ,SERIALIZA
BLE)
openSession(ExecutorType execType):
ExecutorType.SIMPLE: 这个执行器类型不做特殊的事情。它为每个语句的执行创建一个新的预处理语句。
ExecutorType.REUSE: 这个执行器类型会复用预处理语句。
ExecutorType.BATCH: 这个执行器会批量执行所有更新语句,如果 SELECT 在它们中间执行还会标定它们是 必须的,来保证一个简单并易于理解的行为。
@Test public void testInsertOne(){ SqlSession sqlSession = MyBatisUtils.getSession(); UserInfo userInfo = new UserInfo(); userInfo.setNickname("sunny"); userInfo.setPhoneNum("18936896033"); sqlSession.insert("insertUser", userInfo); LOG.log(Level.INFO, "userId:"+userInfo.getId()); sqlSession.close(); }原因是会话没有被提交而是被回滚了,修改代码如下:
@Test public void testInsertOne(){ SqlSession sqlSession = MyBatisUtils.getSession(); UserInfo userInfo = new UserInfo(); userInfo.setNickname("sunny"); userInfo.setPhoneNum("18936896033"); sqlSession.insert("insertUser", userInfo); sqlSession.commit(); //注意提交事物 LOG.log(Level.INFO, "userId:"+userInfo.getId()); sqlSession.close(); }源码解读:首先看看openSession的几种方式:
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)从地一个和第二个就可看出区别:
openSession()会创建一个事物,但是不会自动提交
openSession(true)会创建一个事物,并自动提交
openSession(Connection connection),不使用数据元配置,而是自定义的一个链接
openSession(TransactionIsolationLevel level)事物的隔离级别:
(NONE,READ_UNCOMMITTED,READ_COMMITTED,REPEA
TABLE_READ,SERIALIZA
BLE)
openSession(ExecutorType execType):
ExecutorType.SIMPLE: 这个执行器类型不做特殊的事情。它为每个语句的执行创建一个新的预处理语句。
ExecutorType.REUSE: 这个执行器类型会复用预处理语句。
ExecutorType.BATCH: 这个执行器会批量执行所有更新语句,如果 SELECT 在它们中间执行还会标定它们是 必须的,来保证一个简单并易于理解的行为。
相关文章推荐
- mybatis 做 insert操作的时候返回插入的那条数据的id
- MyBatis进行insert操作时不能将数据插入到数据库
- mybatis在使用insert into 批量插入数据的问题
- mybatis 插入insert 数据会报错java.lang.ClassCastException: java.lang.String cannot be cast to [Ljava.lang.O
- mybatis插入不重复的数据 insert ignore into
- Mybatis配置插入数据返回主键ID
- java mybatis mapper批量插入数据,insert/update/映射属性字段
- MyBatis 动态插入 数据 insert
- mybatis 做 insert操作的时候返回插入的那条数据的id
- SSM配置Mybatis实现自动获取插入数据的自增id至目标对象中
- mybatis 做 insert操作的时候返回插入的那条数据的id
- MyBatis在insert插入操作时返回主键ID的配置(推荐)
- mybatis insert 插入数据成功后返回值为 null
- MyBatis在insert插入操作时返回主键ID的配置
- MyBatis在insert插入操作时返回主键ID的配置
- Mybatis使用insert插入数据
- MyBatis 在insert插入操作时返回主键ID的配置
- 使用mybatis的insert语句插入数据的时候,获取插入数据的主键id
- MyBatis在insert插入操作时返回主键ID的配置
- MyBatis 动态插入 数据 insert