Skip to content

03.save 回填主键值

在上面 save 的基础上进行更改

1.获取自增主键的值

接口方法

java
// 保存
int save(User user);

方法映射

xml
<!--
    useGeneratedKeys="true": 开启获取自增主键的策略
    keyColumn: 指定数据库主键的列名
    keyProperty: 指定对应的主键属性, ps(获取到主键值后, 将这个值封装给javaBean的哪个属性)
 -->
<insert id="save" parameterType="org.hong.pojo.User" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
    insert into user(name, pwd) values(#{name}, #{pwd})
</insert>

测试用例

java
@Test
public void save(){
    // 1.获取sqlSession对象
    SqlSession sqlSession = MyBatisUtil.getSqlSession();
    // 2.获取需要的mapper接口的代理对象
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    // 3.调用对应的方法执行操作
    User user = new User();
    user.setName("SAVE ID");
    user.setPwd("123");
    int save = mapper.save(user);
    System.out.println(save);
    System.out.println(user);
    // 4.提交事务
    sqlSession.commit();
    // 5.关闭sqlSession
    sqlSession.close();
}

控制台打印

shell
## 发送的sql语句
[main] [org.hong.mapper.UserMapper.save]-[DEBUG] ==>  Preparing: insert into user(name, pwd) values(?, ?)
[main] [org.hong.mapper.UserMapper.save]-[DEBUG] ==> Parameters: SAVE ID(String), 123(String)
[main] [org.hong.mapper.UserMapper.save]-[DEBUG] <==    Updates: 1
1
## 主键回填到了对象中
User(id=4, name=SAVE ID, pwd=123)

2.获取 Oracle 序列的值

这里就不具体演示了,看不懂就算了,反正用的也不多。

xml
<insert id="addEmp">
 <!--
		selectKey: 配置查询主键的sql语句
            keyProperty:查出的主键值封装给javaBean的哪个属性
            order:
                BEFORE:当前sql在插入sql之前运行
                AFTER:当前sql在插入sql之后运行
            resultType:查出的数据的返回值类型

            BEFORE运行顺序:
                先运行selectKey查询id的sql;查出id值封装给javaBean的id属性
                再运行插入的sql;就可以取出id属性对应的值
            AFTER运行顺序:
                先运行插入的sql(从序列中取出新值作为id);
                再运行selectKey查询id的sql, 回填到javaBean的id属性中
	 -->
 <selectKey keyProperty="id" order="BEFORE" resultType="Integer">
  <!-- 编写查询主键的sql语句 -->
  select EMPLOYEES_SEQ.nextval from dual
 </selectKey>
 <!-- 插入时的主键是从序列中拿到的 -->
 <!-- BEFORE:-->
 insert into employees(EMPLOYEE_ID,LAST_NAME,EMAIL)
 values(#{id},#{lastName},#{email})
</insert>

Released under the MIT License.