问题描述: 

在测试mybatis插入数据时,测试类中显示插入信息成功,但是数据库中一直没有数据更新

问题原因:

mybatis在测试时需要获取数据库操作对象SqlSession,而SqlSession是由SqlSessionFactory 去创建的,默认的 openSession() 方法没有参数,没有参数时事务不会自动提交,当把openSession()方法的参数值设置成true时,可以开启事务自动提交功能。

解决办法:

以下是全部代码:

测试类:

        //添加员工信息
        int i = addEmpTest();
        if(i>0){
            System.out.println("添加"+i+"条员工信息");
        }else{
            System.out.println("添加失败!");
        }
    //添加员工信息
    public static int addEmpTest() throws Exception {
        //获取mapper
        EmpMapper mapper = getEmpMapper();
        //构建emp实体类
        Emp emp = new Emp();
        emp.setEname("jack");
        emp.setPwd("1234555");
        emp.setSalary(8888);
        //添加员工
        int i = mapper.addEmp(emp);
        return i;
    }

 

    public static EmpMapper getEmpMapper() throws Exception {
        //1.读取mybatis配置文件
        Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
        //2.获取SqlSessionFactory工厂
        SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
        SqlSessionFactory sqlSessionFactory = ssfb.build(reader);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //利用sqlsession的getMapper生成dao层接口的动态代理实现类
        EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
        //返回mapper
        return  mapper;
    }

 接口和映射文件

     //添加一条员工信息
    int addEmp(Emp emp);

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lcx.dao.EmpMapper">
    <!--定义一系列的持久化操作-->

    <!--添加员工信息--> 
    <insert id="addEmp" parameterType="com.lcx.entity.Emp">
        insert into emp (ename,password,salary) values (#{ename},#{pwd},#{salary})
    </insert>


</mapper>

MyBatis配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- 指定义连接数据的配置 -->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test03"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 加载sql映射文件 -->
    <mappers>
        <mapper resource="com/lcx/dao/EmpMapper.xml"/>
    </mappers>
</configuration>

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐