mysql如何获取自增id

 更新时间:2024年07月03日 15:12:06   作者:sugarJava  
这篇文章主要介绍了mysql如何获取自增id问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

JAVA在插入自增主键的一条数据,如何同时获取该条自增的主键id?

业务场景

开发业务场景:在学生管理系统业务场景中,比如班上新来一名转校学生小吴,并参与了此次学校的摸底考试,那么系统管理员需要将他的信息更新到学生表的同时还需要和课程表绑定关系(多对多关系中需建立一个关系表)。

成绩表(主要字段:student_id, sourse_id, score …)通过学生id和课程id来确定一条数据的唯一性。

所以在添加一名新学生的时候,相关的关系表也要做添加操作(小吴学了哪些课程)。

实际开发举例

@Service
public class GroupServiceImpl implements IGroupService
{
    private static final Logger log = LoggerFactory.getLogger(GroupServiceImpl.class);

    @Autowired
    private GroupMapper groupMapper;

    @Autowired
    private IGroupUserService groupUserService;
/*
业务场景:group(分组表),user(用户表),分组用户关系表(group_user)
添加一个新的分组,分组下面可以有多个成员,一个成员可以创建多个分组,它们之间是多对多的关系,在添加一个新分组的时候,关系表也要绑定这条添加记录。因此此处有两个insert操作。新建分组是必须由当前user来新建的。所以新建的分组的时候,就得往group_user关系里填一条默认记录。
*/
    @Override
    public int insertGroupInfo(Group group) {
        BeanUtils.initInsertProperty(group);//初始化一些字段
        groupMapper.insertSelective(group);//添加分组
        
        groupUserService.insertGroupUserSelective.  (newGroupUser(0,group.getId(),SecurityUtils.getLoginUser().getUser().getUserId().intValue(),SecurityUtils.getLoginUser().getUser().getRoleId().intValue(),Constants.TEAM_ROLE.LEADER));//默认添加分组成员关系表一条记录(创建分组者)
        return 1;
    }
}

代码实现

这里我们会使用mysql技术,在XXXXXmapper.xml文件中,

在insert 代码位置添加如下属性:useGeneratedKeys=“true” 和 keyProperty=“id”,此处的id即为你设置的自增的主键字段

<insert id="insert" parameterType="com.demo.project.entity.Student" useGeneratedKeys="true" keyProperty="id">
    insert into student (id, name,sex,age)
    values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{sex,jdbcType=VARCHAR}, #{age,jdbcType=VARCHAR}
  </insert>

在mapper映射文件添加好属性后便可在service层直接获取id

Student student=new Student();
student.setName("小吴");
studentService.insertStudent(student);//添加学生
ScoreService.insertScore(new Score(student.getId(),sourse.getId,0));//添加成绩实体,成绩默认为0分

总结

获取当前添加的数据字段自增id的值,

使用mysql技术,在insert操作的时候,添加关键属性:

  • 1. useGeneratedKeys=“true”
  • 2. keyProperty=“id”
  • 3. 直接在service层获取当前添加实体的id。
  • 4. mybatisplus 默认集成了useGeneratedKeys=“true” 和 keyProperty=“id” 属性,可以直接通过getId()获取。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • mysql获取版本的几种方法实现

    mysql获取版本的几种方法实现

    本文主要介绍了mysql获取版本的方法实现,主要介绍了三种方法,包含SELECT VERSION(),SHOW VARIABLES和命令行,具有一定的参考价值,感兴趣的可以了解一下
    2024-06-06
  • MySQL授予用户权限命令详解

    MySQL授予用户权限命令详解

    这篇文章主要给大家介绍了关于MySQL授予用户权限命令的相关资料,授权就是为某个用户赋予某些权限,例如可以为新建的用户赋予查询所有数据库和表的权限,需要的朋友可以参考下
    2023-11-11
  • mysql日期date型和int型互换的方法

    mysql日期date型和int型互换的方法

    下面小编就为大家带来一篇mysql日期date型和int型互换的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • mysql数据库连接池配置教程

    mysql数据库连接池配置教程

    在与数据库进行连接的时候,会牵扯到数据库连接池的配置,本文将详细介绍mysql数据库连接池配置,需要了解跟多的朋友可以参考下
    2012-11-11
  • SQL算术运算符之加法、减法、乘法、除法和取模的用法例子

    SQL算术运算符之加法、减法、乘法、除法和取模的用法例子

    算术运算符主要用于数学运算,其可以连接运算符前后的两个数值或表达式,对数值或表达式进行加(+)、减(-)、乘(*)、除(/)和取模(%)运算,下面这篇文章主要给大家介绍了关于SQL算术运算符之加法、减法、乘法、除法和取模用法的相关资料,需要的朋友可以参考下
    2024-03-03
  • Mysql和redis缓存不一致问题的解决方案

    Mysql和redis缓存不一致问题的解决方案

    在高并发的情况下,如果所有的数据都从数据库中去读取,那再强大的数据库系统都承受不了这个压力,因此我们会将部分数据放入缓存中,比如放入redis中,这篇文章主要给大家介绍了关于Mysql和redis缓存不一致问题的解决方案,需要的朋友可以参考下
    2022-08-08
  • MySQL ALTER命令使用详解

    MySQL ALTER命令使用详解

    这篇文章主要为大家详细介绍了MySQL ALTER命令的使用方法,简单实用,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • MySQL性能参数详解之Skip-External-Locking参数介绍

    MySQL性能参数详解之Skip-External-Locking参数介绍

    MySQL的配置文件my.cnf中默认存在一行skip-external-locking的参数,即跳过外部锁定。根据MySQL开发网站的官方解释,External-locking用于多进程条件下为MyISAM数据表进行锁定
    2016-05-05
  • 一篇文章带你掌握MySQL索引下推

    一篇文章带你掌握MySQL索引下推

    索引条件下推,也叫索引下推,英文全称Index Condition Pushdown,简称ICP,索引下推是MySQL5.6新添加的特性,用于优化数据的查询,下面这篇文章主要给大家介绍了关于MySQL索引下推的相关资料,需要的朋友可以参考下
    2022-12-12
  • Mac OS下PHP环境搭建及PHP操作MySQL常用方法小结

    Mac OS下PHP环境搭建及PHP操作MySQL常用方法小结

    MAMP从名字上也可以看出来,是Mac OS的Apache+MySQL+PHP的集成环境包,本文就来简单说一下Mac OS下PHP环境搭建及PHP操作MySQL的常用方法小结.
    2016-05-05

最新评论