用mybatis中的insert方法插入数据,返回值为1,但数据库却没有数据
用Mapper中的
<!-- 添加一个用户,#{uname}为com.mybatis.po.MyUser的属性值 --> <insert id="addUser" parameterType="com.mybatis.po.MyUser"> insert into user(uname,usex)values(#{uname},#{usex}) </insert>
在测试类中写了这个
//读取配置文件 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), 那么就会自动提交事务
以上两种方案, 都会真正添加数据到数据库中