mybatis 执行insert保存(自动提交事务)

上接:mybatis 创建maven工程

修改idea maven设置

在idea中跳过maven的test操作,否则代码执行一次,test执行一次

跳过方式如下:

修改 IUserMapper

增加save方法

public int save(User user);

解释:

  • 形参User:将要保持的数据,封装到User类对象中

完整代码

package org.malaoshi.mapper;

import org.malaoshi.entity.User;

import java.util.List;

public interface IUserMapper {

    public List<User> selectAll();

    public int save(User user);
}

修改 userMapper.xml

增加insert标签

<insert id="save" parameterType="org.malaoshi.entity.User">
    insert into user (id,username,password) values (#{id},#{username},#{password})
</insert>

解释:

  • parameterType属性,表示要插入的数据封装在该类对象中
  • #{id}:取出该属性的值。ognl表达式,相当于执行user.getId()
  • #{username}:取出该属性的值。ognl表达式,相当于执行user.getUsername()
  • #{password}:取出该属性的值。ognl表达式,相当于执行user.getPassword()

在执行insert语句时,将封装在User类对象中的数据取出,放到对应的位置上

完整代码如下

<?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">

<!-- namespace名字必须与dao包路径接口名完全相同 -->
<mapper namespace="org.malaoshi.mapper.IUserMapper" >

    <!-- id名必须与dao中的方法名相同 -->
    <select id="selectAll" resultType="org.malaoshi.entity.User">
        select id,username,password from user
    </select>

    <insert id="save" parameterType="org.malaoshi.entity.User">
        insert into user (id,username,password) values (#{id},#{username},#{password})
    </insert>

</mapper>

执行

在测试类中增加下面代码

@Test
public void testSave() throws IOException {
    /*
     1. 读取  mybatis-config.xml 自定义命名的全局配置文件.
        getResourceAsStream 使用的资源路径
     */
    InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
    // 2. 使用sqlSession的工厂构造器来读入全局配置,再生成一个sqlSession工厂.
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    // 3. 通过 sqlSession 工厂打开一个 sqlSession,true表示自动提交事务
    SqlSession sqlSession = sqlSessionFactory.openSession(true);
    //4 使用SqlSession创建Dao接口的代理对象
    IUserMapper mapper = sqlSession.getMapper(IUserMapper.class);

    //创建user对象,封装要保存的数据
    User user=new User();
    user.setId("1004");
    user.setUsername("韩梅梅");
    user.setPassword("123456");
    user.setAge(20);
    user.setSex("0");
    user.setStatus("1");

    int num=mapper.save(user);
    System.out.println("添加 "+num+" 条记录");
    sqlSession.close();
    inputStream.close();
}

关键:

SqlSession sqlSession = sqlSessionFactory.openSession(true); // true表示自动提交事务

执行结果如下:

结论:执行增删改操作后,自动提交事务,开发中较少使用


原文出处:/show_1IX5pzVgFRhD.html