用mybatis中的insert方法插入数据,返回值为1,但数据库却没有数据
用Mapper中的
1 2 3 4 | <!-- 添加一个用户,#{uname}为com.mybatis.po.MyUser的属性值 --> < insert id = "addUser" parameterType = "com.mybatis.po.MyUser" > insert into user(uname,usex)values(#{uname},#{usex}) </ insert > |
在测试类中写了这个
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | //读取配置文件 mybatis-config.xml InputStream config = Resources.getResourceAsStream( "mybatis-config.xml" ); //根据配置文件构建SqlSessionFactory SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(config); //通过 SqlSessionFactory 创建SqlSession SqlSession ss = ssf.openSession(); //SqlSession执行映射文件中定义的SQL,并返回映射结果 //com.mybatis.mapper.UserMapper.selectUserById为UserMapper.xml中的命名空间+select 的id //查询一个用户 /*MyUser mu = ss.selectOne("com.mybatis.mapper.UserMapper.selectUserById", 1); System.out.println(mu.getUname() + mu.getUid());*/ //添加一个用户 MyUser addmu = new MyUser(); addmu.setUname( "小李" ); addmu.setUsex( "男" ); Integer one = ss.insert( "com.mybatis.mapper.UserMapper.addUser" , addmu); System.out.println(one); |
结果是 one = 1; 但是到数据库的表中查询,却没有数据
最后找到解决方案如下:
1. ssf.openSession();的时候(默认为false),设置了没有自动提交
在返回one后面加上 ssf.commit(); 就可以了,提交事务
2. ssf.openSession(true), 那么就会自动提交事务
以上两种方案, 都会真正添加数据到数据库中