springboot mybatis mysql数据库insert返回主键,mapper接口中 @insert注解 sql添加插入数据获取自增长的主键,附测试demo源码

  • Post author:
  • Post category:mysql


mybatis mysql数据库表插入一条记录返回自增长主键值,可以通过@Options返回

如果 表的自增长主键字段名是id,那么可以通过下面写法获取插入的主键值,如下:

@Options(useGeneratedKeys=true, keyProperty="id", keyColumn="id")

具体实现看下面介绍,最后附测试demo源码

test 数据库 有一张表 account , 有2个字段 id 和 password , 其中id是自增长的主键

在这里插入图片描述

CREATE TABLE `account` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `password` varchar(22) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

mapper 接口文件中,添加account记录的方法,用@Options(useGeneratedKeys=true, keyProperty=“id”, keyColumn=“id”) 获取插入自增长主键值

详细说明见下面的注释

package com.example.mybatis_demo.mapper.dbtest;

import com.example.mybatis_demo.pojo.Account;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Options;

@Mapper
public interface TestMapper {
    /**
     * useGeneratedKeys="true":使用自动生成的主键
     * keyProperty:指定主键是(javaBean的)哪个属性,这里的javabean是account ,
     *             插入表中的主键值会通过调用account.setId写入到account的id属性中
     *             
     *             注意:插入的主键值是通过javaBean的id获取,而不是通过方法返回值获取
     *
     * keyColumn:是数据库表中自增长主键的字段名为id
     * @param account
     * @return void 注意这里返回空,插入的主键值不是通过return返回获取,
     * 插入表中的主键值会通过调用account.setId写入到account的id属性中
     */
    @Insert("INSERT INTO account (password) VALUES (#{password})")
    @Options(useGeneratedKeys=true, keyProperty="id", keyColumn="id")
    public void addAccount(Account account);
}

测试类

package com.example.mybatis_demo.controller;

import com.example.mybatis_demo.mapper.dbtest.TestMapper;
import com.example.mybatis_demo.pojo.Account;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class TestController {
    @Autowired
    TestMapper testMapper;

    @RequestMapping("/account/add")
    @ResponseBody
    public String addAccount(){
        System.out.println("addAccount");
        Account account = new Account();
        account.password = "123456";
        testMapper.addAccount(account);
        System.out.println("id="+account.id);
        return "add account id="+account.id;
    }

}

第一次 添加account

在这里插入图片描述

第二次添加 account

在这里插入图片描述



demo源码

链接:https://pan.baidu.com/s/1V9hcP2pVcj6b6yJGHzYa4g

提取码:8req

注:访问数据库的ip port 账号密码,填自己的数据库连接信息。



版权声明:本文为a704397849原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。