`
chenzhou123520
  • 浏览: 4260724 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MyBatis+MySQL 返回插入的主键ID

阅读更多

需求:使用MyBatis往MySQL数据库中插入一条记录后,需要返回该条记录的自增主键值。

 

方法:在mapper中指定keyProperty属性,示例如下:

<insert id="insertAndGetId" useGeneratedKeys="true" keyProperty="userId" parameterType="com.chenzhou.mybatis.User">
	insert into user(userName,password,comment)
	values(#{userName},#{password},#{comment})
</insert>

 如上所示,我们在insert中指定了keyProperty="userId",其中userId代表插入的User对象的主键属性。

 

User.java

public class User {
	private int userId;
	private String userName;
	private String password;
	private String comment;
	
	//setter and getter
}

 UserDao.java

public interface UserDao {

	public int insertAndGetId(User user);

}

 测试:

User user = new User();
user.setUserName("chenzhou");
user.setPassword("xxxx");
user.setComment("测试插入数据返回主键功能");

System.out.println("插入前主键为:"+user.getUserId());
userDao.insertAndGetId(user);//插入操作
System.out.println("插入后主键为:"+user.getUserId());

 输出:

插入前主键为:0
插入后主键为:15

 查询数据库:

 

如上所示,刚刚插入的记录主键id为15

 

分享到:
评论
18 楼 永立s 2017-12-26  
有帮助
17 楼 GGGGeek 2017-07-08  
这算是mybatis的奇巧淫技吗?哈哈哈
16 楼 di1984HIT 2015-12-30  
学习了! 
15 楼 qq_28108539 2015-08-04  
确实是,之前一直搞错了,把返回的那个int值放到了里面
14 楼 liuhegong 2015-07-09  
                                                                                                      












































































13 楼 蓝骑士 2015-03-27  
12 楼 yannanying 2014-11-22  
赞一个,确实是对的
11 楼 wuwenqiu0203 2014-11-03  
按你的方式写的,为什么我返回的ID都是1?
10 楼 寒风刺骨 2014-08-13  
赞一下。终于看到完整的代码了。。
9 楼 chenzhou123520 2014-05-02  
weii 写道
我的做法跟你一样,不过我连接的是db2,插入前是0,然后就报错了
id=0
org.apache.ibatis.exceptions.PersistenceException:
### Error updating database.  Cause: org.apache.ibatis.executor.ExecutorException: Error getting generated key or setting result to parameter object. Cause: java.lang.NullPointerException
### The error may involve org.fineweaver.dao.IUserDAO.insert-Inline
### The error occurred while setting parameters
### SQL: insert into User (userName,password,age)     values(?,?,?)
### Cause: org.apache.ibatis.executor.ExecutorException: Error getting generated key or setting result to parameter object. Cause: java.lang.NullPointerException

做查询操作是正常的。只有插入的时候报错。。。
有机会交流

能否把xml内容贴出来,或者发我邮箱chenzhou1025#126.com
8 楼 weii 2014-04-24  
我的做法跟你一样,不过我连接的是db2,插入前是0,然后就报错了
id=0
org.apache.ibatis.exceptions.PersistenceException:
### Error updating database.  Cause: org.apache.ibatis.executor.ExecutorException: Error getting generated key or setting result to parameter object. Cause: java.lang.NullPointerException
### The error may involve org.fineweaver.dao.IUserDAO.insert-Inline
### The error occurred while setting parameters
### SQL: insert into User (userName,password,age)     values(?,?,?)
### Cause: org.apache.ibatis.executor.ExecutorException: Error getting generated key or setting result to parameter object. Cause: java.lang.NullPointerException

做查询操作是正常的。只有插入的时候报错。。。
有机会交流
7 楼 hui94781674 2014-04-24  
谢谢。在项目使用中有帮助
6 楼 chenzhou123520 2013-08-09  
我叫张恒 写道
我看cyg的项目中有这样的东东,我在验证下。

User user = new User();
user.setUserName("chenzhou");
user.setPassword("xxxx");
user.setComment("测试插入数据返回主键功能");

System.out.println("插入前主键为:"+user.getUserId());
userDao.insertAndGetId(user);//插入操作
System.out.println("插入后主键为:"+user.getUserId());

你看下这段代码,当执行userDao.insertAndGetId(user);前主键是为0的。
执行完插入操作之后主键就有赋值了,并没有重新查询一次
5 楼 我叫张恒 2013-08-09  
我看cyg的项目中有这样的东东,我在验证下。
4 楼 chenzhou123520 2013-08-08  
我叫张恒 写道
嗯嗯 ,在新插入一条记录之后如果要获得该条记录的Id 必须要在查询一次该记录,然后才能得到记录,我现在明白了为什么在首次登陆插入值之后还有查询一次了。。

不需要查询啊,插入之后,该实体类的id属性就直接赋值了啊
3 楼 我叫张恒 2013-08-08  
嗯嗯 ,在新插入一条记录之后如果要获得该条记录的Id 必须要在查询一次该记录,然后才能得到记录,我现在明白了为什么在首次登陆插入值之后还有查询一次了。。
2 楼 chenzhou123520 2013-07-31  
chengcheng222e 写道
过来赞一下 

哈哈,谢谢
1 楼 chengcheng222e 2013-07-31  
过来赞一下 

相关推荐

    MyBatis+MySQL 返回插入的主键ID的方法

    首先,我们需要在MyBatis的Mapper接口中定义一个插入并返回主键ID的方法。这里我们以一个`UserDao`接口为例,定义一个`insertAndGetId`方法: ```java public interface UserDao { public int insertAndGetId(User...

    springmvc+spring+mybatis+Maven+mysql环境搭建,附源码

    ### Spring MVC + Spring + MyBatis + Maven + MySQL 环境搭建详解 #### 一、概述 在软件开发领域,尤其是Java Web开发中,**Spring MVC + Spring + MyBatis + Maven + MySQL**组合是一种非常流行的开发模式。本文...

    数据库课程设计-医院药品管理系统,符合 3NDF 的规范数据库设计,Spring Boot + MyBatis + MySQL

    例如,药品表可能包含药品ID、名称、规格、价格等,而医生表则有医生ID、姓名、科室等字段,确保每个字段都与主键直接相关。 Spring Boot是Java开发中的微服务框架,它简化了创建独立的、生产级别的基于Spring的...

    Python3 操作 MySQL 插入一条数据并返回主键 id的实例

    在Python3中操作MySQL数据库并插入一条数据,然后获取并返回这条数据的主键id是数据库编程中常见的需求。这一过程可以分为几个关键步骤:数据库连接、执行插入操作、获取主键id以及事务提交。下面详细说明每个步骤...

    Mybatis+注解轻松实现脱敏

    MyBatis插件机制允许开发者自定义拦截器,以在SQL执行前后插入额外的操作。在这个场景下,我们可以利用插件来对输入参数中的敏感数据进行加密,并对查询结果进行解密。主要涉及两个关键接口:`ParameterHandler`和`...

    spring boot整合mybatis利用Mysql实现主键UUID的方法

    `tk.mybatis.mapper.common.IdsMapper`则提供了处理主键ID的基本操作。 在Mapper接口中,你可以像平常一样定义CRUD方法。由于使用了UUID作为主键,插入数据时MyBatis会自动为新记录生成一个UUID。例如: ```java ...

    springboot+mybatis+thymeleaf实现简单的留言板

    可以使用MyBatis的Mapper接口和XML配置文件来编写SQL语句,例如插入、查询和删除留言。Mapper接口提供了方法,而XML文件中定义了对应的SQL逻辑,MyBatis会自动将方法调用转化为数据库操作。 接着,创建Thymeleaf的...

    MyBatis在insert插入操作时返回主键ID的配置(推荐)

    本文将详细介绍 MyBatis 在 insert 插入操作时返回主键 ID 的配置,包括 MySQL 和 Oracle 两个数据库的用法。 MySQL 用法 在 MySQL 中,MyBatis 提供了一个简单的配置来返回插入的主键 ID。我们可以在 insert 语句...

    spring-boot-mybatis-interceptor:mybatis自定义主键插件,通过该插件生成分布式唯一雪花ID作为数据库表的主键

    该插件项目可以直接运用于实际开发中,作为分布式数据库表主键ID使用。 一、项目概述 1、项目背景 在生成表主键ID时,我们可以考虑主键自增 或者 UUID,但它们都有很明显的缺点 主键自增:1、自增ID容易被爬虫遍历...

    mybatis返回插入的id1

    总结一下,MyBatis 中插入数据并返回插入记录的 ID 主要涉及以下知识点: 1. 使用 `&lt;insert&gt;` 标签定义插入语句。 2. 设置 `useGeneratedKeys="true"` 开启获取自增主键的功能。 3. 使用 `keyProperty` 指定对象的...

    详解Java MyBatis 插入数据库返回主键

    在处理插入数据到数据库并返回主键的场景时,MyBatis提供了两种主要的方法。这两种方法都是在映射文件(Mapper.xml)中配置,允许你在插入记录后获取自动生成的主键值。 **方式一:使用`useGeneratedKeys`和`...

    mybatis+Oracle做批量导入时的坑

    在XML映射文件中,我们看到对应的SQL语句采用了Oracle特有的序列来生成主键ID。这是因为在Oracle中,通常我们需要为每条新记录分配一个唯一的序列号,这里使用`SEQ_B_LEASE_INFORMATION.nextval`来获取序列的下一个...

    MyBatis插入数据返回主键的介绍

    但是,如果我们使用`useGeneratedKeys`属性,插入成功后,`UserDomain`实体类的`userId`属性将被赋值为具体的主键id值。 使用MyBatis插入数据返回主键的功能可以帮助我们更方便地实现数据的持久化操作。

    spring Boot+mybatis-plus+Thymeleaf+MySql增删改查(含有分页+雪花Id)

    - 设计数据库表结构,例如创建一个名为 `demo` 的表,包含 `id`(主键)、`name`、`description` 等字段。 - 创建对应的 Java 实体类,使用 Mybatis-Plus 的注解如 `@TableName("demo")`,字段上的 `@TableField` ...

    MyBatis insert操作插入数据之后返回插入记录的id

    在MyBatis的insert元素中,我们可以设置keyProperty="id"用来指定要返回的主键id,而useGeneratedKeys="true"则用于获取自增长的ID。 在上面的示例中,我们可以看到insert元素中设置了keyProperty="id"和...

    java基于MySQL的学生管理系统

    - **表结构设计**:创建学生表,包括ID(主键)、姓名、性别、年龄、班级等字段。 - **SQL操作**:使用INSERT插入学生信息,UPDATE更新信息,DELETE删除记录,以及SELECT查询所有、单个或条件筛选的学生数据。 - ...

    mybatis自增主键文档

    MyBatis在处理MySQL时,只需在插入语句中忽略主键字段即可,如下所示: ```xml &lt;sql id='TABLE_NAME'&gt;TEST_USER &lt;insert id="insert" parameterType="User"&gt; insert into &lt;include refid="TABLE_NAME" /&gt; ...

    通用mybatis-MySQL增删改查CRUD源码

    - `selectById()`:根据主键ID查询数据,通常对应于`selectOne(String sqlId, Object parameter)`。 - `updateById()`:根据主键ID更新数据,对应于`update(String sqlId, Object parameter)`。 - `deleteById()`:...

    Mybatis 插入一条或批量插入 返回带有自增长主键记录的实例

    Mybatis 插入一条或批量插入 返回带有自增长主键记录的实例 Mybatis 是一个基于 Java 的持久层框架,它提供了对数据库的访问和操作的功能。今天,我们将分享一个关于 Mybatis 插入一条或批量插入 返回带有自增长...

Global site tag (gtag.js) - Google Analytics