使用mybatis进行数据插入时如何返回自增的id

这篇具有很好参考价值的文章主要介绍了使用mybatis进行数据插入时如何返回自增的id。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

具体问题

当我们存储数据时,有时候id是选择让数据库自增的 。但前端如果需要当前添加数据的id时,我们在代码上就无法返回了。

解决办法

在 MyBatis 中,可以通过配置来确保数据库操作成功。具体方式是在 Mapper.xml 文件中使用 useGeneratedKeys 和 keyProperty 属性来获取自增主键的值,以判断插入操作是否成功。

下面是实现方法:

1、在 Mapper.xml 中的插入操作中,添加 useGeneratedKeys 和 keyProperty 属性。

<insert id="insertUser" parameterType="com.example.User" useGeneratedKeys="true" keyProperty="id">
    INSERT INTO user(username, password) VALUES(#{username}, #{password})
</insert>

2、在 Java 代码中,调用 UserMapper 接口的插入方法时,需要判断插入是否成功。插入成功后,User 对象的 id 属性将被自动赋值为插入记录的主键值。

	User user = new User();
	user.setUsername("username");
	user.setPassword("password");
	int result = userMapper.insertUser(user);
	if (result > 0) {
	    System.out.println("插入成功,主键为:" + user.getId());
	} else {
	    System.out.println("插入失败");
	}

在插入操作成功后,user.getId() 返回的就是插入记录的主键值,否则返回的是 null 或 0。因此,通过判断 user.getId() 的值是否为 null 或 0 可以判断插入操作是否成功。

其中useGeneratedKeys 和 keyProperty 是 MyBatis 中用于处理自增主键的两个重要属性。

  • useGeneratedKeys 属性表示是否使用自动生成的主键。如果该属性为 true,则表示使用数据库自动生成的主键;如果该属性为 false,则表示不使用自动生成的主键。默认值为 false。
  • keyProperty 属性表示实体类的属性名,用于接收自动生成的主键值。在执行插入操作时,如果使用了自动生成的主键,那么数据库会为新插入的记录自动生成一个主键值,这个值会被保存到 keyProperty 属性指定的实体类属性中。

注意点

需要注意的是,不同的数据库可能需要不同的配置和语法,需要根据实际情况进行调整。

  • Oracle数据库(跟mysql一样)
  • SQL Server
    在 SQL Server 数据库中,使用属性进行自动生成主键的配置方法稍有不同。需要在 insert 标签中添加 useGeneratedKeys 属性,将其设置为 false,同时在 selectKey 标签中指定自动生成主键的方式和接收主键值的实体类属性,如下所示:
<insert id="insertUser" parameterType="com.example.User" useGeneratedKeys="false">
    <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Long">
        SELECT @@IDENTITY AS id
    </selectKey>
    INSERT INTO user(username, password) VALUES(#{username}, #{password})
</insert>

在上面的配置中,useGeneratedKeys 属性被设置为 false,表示不使用自动生成主键的方式。而是在 selectKey 标签中使用 @@IDENTITY 函数获取自动生成的主键值,并将其设置到实体类的 id 属性中。需要注意的是,在 SQL Server 中,@@IDENTITY 函数用于获取最近插入的标识列的值,因此只能在插入后使用。文章来源地址https://www.toymoban.com/news/detail-524124.html

到了这里,关于使用mybatis进行数据插入时如何返回自增的id的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何使用MyBatis进行数据存储的加密、解密

    背景:在大部分的系统中,出于用户的隐私安全考虑,都会对数据库内容进行加密,那么在编写业务代码逻辑时加密也不太现实。于是通用的加解密插件就应运而生,本文将采用mybatis的拦截器作为基础进行实现。 思路:我们可以通过mybatis的拦截器进行参数的加密和解密 Ex

    2024年02月12日
    浏览(62)
  • mybatis插入后返回主键id的三种方式

    第一种:在xml文件,insert标签属性中,添加useGeneratedKeys和keyProperty,如图   第二种:在xml文件,添加selectKey标签属性,各个属性值含义:resultType:查询结果的类型;keyProperty:把查询的值赋给谁;order:在插入前还是后执行,id在insert语句插入之后才会生成id,所以要在插入之

    2024年02月15日
    浏览(32)
  • 如何在Insert插入操作之后,获取自增主键的ID值

    MyBatis中,在大多数情况下,我们向数据库中插入一条数据之后,并不需要关注这条新插入数据的主键ID。我们也知道,正常在DAO中的插入语句虽然可以返回一个int类型的值,但是这个值表示的是插入影响的行数,而不是新插入数据的主键ID。 近期有一个需求,核心是保存一些

    2024年02月09日
    浏览(36)
  • No Spring环境Mybatis-Plus批量插入并返回主键的两种方式

    批量插入,可以把Mybatis-Plus看作是Mybatis加强版;故Mybatis中的相关操作都可以在Mybatis-Plus中使用;在mysql数据库中支持批量插入,所以只要配置useGeneratedKeys和keyProperty就可以批量插入并返回主键了。 下面是批量插入的Dao层接口    一注解方式:      直接撸代码:      第二种: XML方

    2024年02月09日
    浏览(25)
  • 使用mybatis新增一条数据返回新增数据的id

    第一种方法 注意事项: useGeneratedKeys=\\\"true\\\" 表示给主键设置自增长,keyProperty=\\\"userId\\\" 表示将自增长后的Id赋值给实体类中的userId字段。 parameterType=\\\"com.icc.domain.User\\\" 这个属性指向传递的参数实体类 这里提醒下,insert/insert 中没有resultType属性,不要乱加。 实体类中uerId 要有gette

    2024年02月14日
    浏览(23)
  • springboot~mybatis中使用selectKey获取自增主键

    在mybatis中,我们在insert操作之后,可以获取到自增主键的值,这个需要我们用到 这个方法,在使用时有一个坑需要注意,一会儿会说到。 假设我们有数据表id_offset,然后id是自增主键 我们在插入数据后,希望得到这个新插入的主键的值 我们不希望通过两条语句实现,因为这

    2024年02月14日
    浏览(29)
  • 5.4 如何在Mybatis中使用insert标签并返回主键id?-- 教你通用做法

    通过 《上文》,我们学会了XML映射文件Mapper的创建,以及最常用的select标签和resultMap标签,本文主要讲解 insert标签 ,用于和insert SQL语句映射,非常简单上手,只有两个点可以扩展讲讲:一个点是 insert后返回主键id(会介绍两种方式) ,另外一个点是 实现批量添加 ,原本打算

    2024年02月06日
    浏览(27)
  • 问题解决:使用Mybatis Plus的Mapper插入达梦数据库报“数据溢出”错误

    使用Mybatis Plus的Mapper插入达梦数据库报“数据溢出”错误 问题描述 在进行批量插入中,抛出异常为数据溢出 插入方法:this.baseMapper.insertBatchSomeColumn() 抛出异常:数据溢出 对失败的数据进行循环,尝试使用单个插入的方法,同样抛出异常为数据溢出 插入方法:this.baseMapper

    2024年02月07日
    浏览(39)
  • MyBatis 在大数据量下使用流式查询进行数据同步

    通常的数据同步中,如果数据量比较少的话可以直接全量同步,默认情况下,完整的检索结果集会将其存储在内存中。在大多数情况下,这是最有效的操作方式,并且由于 MySQL 网络协议的设计,因此更易于实现。但是如果数据量很大的话,全量同步需要大量的内存,如果内存

    2024年02月05日
    浏览(25)
  • sqlite插入语句id自增列问题

    sqlite给主键id设置AUTOINCREMENT自增在插入数据的时候报错table has x columns but x-1 values were supplied 为什么自增列要显示不提供,sqlite需要提供自增列table ResTools has 7 columns but 6 values were supplied SQL Statement:insert into ResTools values(\\\'管理系统winform+Sqlite\\\',\\\'项目\\\\C#程序设计\\\\C#winform项目\\\\管理系

    2024年01月18日
    浏览(21)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包