目录
一、问题描述
问题原因:
mybatis在测试时需要获取数据库操作对象SqlSession,而SqlSession是由SqlSessionFactory 去创建的,默认的 openSession() 方法没有参数,没有参数时事务不会自动提交,当把openSession()方法的参数值设置成true时,可以开启事务自动提交功能。
根据mybatis官方文档指示,在openSession()方法中是没有参数的
所以一般情况下,该方法都是不带参数的,接下来放出我的代码
这里可以看出我的获取sqlSession对象中的openSession()方法中不带任何参数,测试类跑了一次是正常的且是不报错的,但是查询数据库后并不尽人意
二、解决办法
原因就来了,在官方文档中是找不出 openSession()方法的详细讲解,
借用大佬的话,,,mybatis在测试时需要获取数据库操作对象SqlSession,而SqlSession是由SqlSessionFactory 去创建的,默认的 openSession() 方法没有参数,没有参数时事务不会自动提交,当把openSession()方法的参数值设置成true时,可以开启事务自动提交功能。
所以,解决办法是在openSession()方法中加入true即可
查询一遍
数据已经添加进去了
解决办法二:
手动提交事务,在执行方法代码后边加上
sqlSession.commit();
即可
我代码跑了两次,但是都没有报错,同样的数据我添加了两次都能添加进去,这是为什么呢?我将在下面会讲到
三、主键 id为null如何解决
在添加数据时,我们并没有定义主键的值,我们没有定义也不需要定义,因为主键没有定义的话在向数据库添加数据时会自动定义主键 id 的值,一般情况下都是以自增的形式体现,这也更便于后续数据查询、更改以及数据处理