Mybatis insert方法主键回填和自定义操作
在数据库插入的时候,有很多属性需要我们自己处理,如主键自增字段。
MYSQL中主键根据一定规则生成后,需要我们在插入后去主动获取,以便后面的操作,Mybatis为我们提供了处理的方法。
主键回填
keyProperty
:指定哪个字段是主键useGeneratedKeys
:这个主键是否使用数据库内置生成策略
我们可以在XML文件中进行如下配置:
<insert id="insertUser" parameterType="user" useGeneratedKeys="true" keProperty="id"> insert into t_user(user_name,age) values (#${userName},#{age}) </insert>
这样我们传入的user对象无需设置id字段,Mybatis会自动进行设置处理,插入成功后id字段会回填到user对象中。
使用自定义规则生成主键
实际工作上有时候主键的生成规则并不是这么简单,比如我们取消t_user的主键自增规则。我们的要求是:
如果t_user表没有数据,我们也要设置主键为1,否则就取主键最大值加2,来设置新的主键。
对此,Mybatis也提供了处理方法,使用SelectKey元素进行处理
<insert id="insertUser" parameterType="user" useGeneratedKeys="true" keProperty="id"> <SelectKey keProperty="id" resultType="int" order="BEFORE> select if(max(id) is null, 1, max(id) + 2) as newId from t_user </SelectKey> insert into t_user(user_name,age) values (#${userName},#{age}) </insert>
这样我们就可以根据自定义的规则来处理生成主键了。
MyBatis中配置主键回填
主键回填是一个很常见的需求,我们经常需要添加完数据之后,需要获取刚刚添加的数据 id,数据库主键回填在 MyBatis 中的简单实现如下:
useGeneratedKeys设置为true,keyProperty为要回填的属性名。
当插入完成后,这个对象的 id 就会被自动赋值,值就是刚刚插入成功的id。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
mybatis generator只能生成insert和selectAll的操作
一般出现这个情况的时候,怎么办? 第一步:不要慌,保持冷静的思考和清醒的头脑,这很关键! 第二步:打开浏览器,搜索一下:Cannot obtain primary key information from the database, generated objects may be incomplete这个错误, 遇到这种情况的时候,代码生成器就只会生成insert和selectAll这两个方法,这个时候需要在jdbc配置的connectionURL上加上一个参数:nullCatalogMean
-
mybatis中insert主键ID获取和多参数传递的示例代码
一.插入数据主键ID获取 一般我们在做业务开发时,经常会遇到插入一条数据并使用到插入数据的ID情况.如果先插入在查询的话需要多一次sql查询,未免效率太低.因此mybatis也有提供插入数据并返回主键ID的方式.如下 1.Insert/update 1.1.属性解释 keyProperty selectKey 语句结果应该被设置的目标属性.如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表. resultType 结果的类型.MyBatis 通常可以推算出来,但是为了更加确定写上也不会有什
-
mybatis的insert语句插入数据时的返回值的实现
mybatis的sql语句一般是配置在配置文件中,现先给出一个例子, sqlMap.xml文件中的一条插入语句: <insert id="add" parameterClass="xxx"> insert into A(a, b, c, d) VALUE (#a#, #b#, #c#, #d#) </insert> 以上的代码片段只是最简单的插入语句,上面这条SQL语句无论执行结果是成功还是失败,它的返回值都是null 如果想要在执行插入之后
-
解析Mybatis的insert方法返回数字-2147482646的解决
前言:前几天在做项目demo的时候,发现有一个很奇怪的现象,就是MyBatis发现更新和插入返回值一直为"-2147482646".无论怎么改,这个值一直不变...是在摸不着头脑,百度和谷歌了一下,有这样的说法原来是由defaultExecutorType设置引起的,如果设置为BATCH,更新返回值就会丢失. If the BATCH executor is in use, the update counts are being lost. 操作:也就是说在spring的配置文件中,只
-
解决Mybatis 大数据量的批量insert问题
前言 通过Mybatis做7000+数据量的批量插入的时候报错了,error log如下: , ('G61010352', '610103199208291214', '学生52', 'G61010350', '610103199109920192', '学生50', '07', '01', '0104', ' ', , ' ', ' ', current_timestamp, current_timestamp ) 被中止,呼叫 getNextException 以取得原因. at org.p
-
解决Mybatis中mapper.xml文件update,delete及insert返回值问题
最近写了几个非常简单的接口(CRUD),在单元测试的时候却出了问题,报错如下: Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'messageListener': Unsatisfied dependency expressed through field 'reviewCheckInfoService'; nested exce
-
解决mybatis使用foreach批量insert异常的问题
异常 org.springframework.jdbc.BadSqlGrammarException: ### Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version fo
-
mybatis中insert返回值为1,但数据库却没有数据
今天在利用Mybatis框架进行数据库插入时,遇到了好几个超级奇怪的问题,也可能是我真的太菜鸡了.做个记录吧~ 1. 排除数据库中表设置错误 使用show variables like '%autocommit%';查看表是否设置自动提交 autocommit已经设置为on,无问题 2. 检查测试类代码 Test.java import entity.Data; import org.apache.ibatis.io.Resources; import org.apache.ibatis.ses
-
Mybatis insert方法主键回填和自定义操作
在数据库插入的时候,有很多属性需要我们自己处理,如主键自增字段. MYSQL中主键根据一定规则生成后,需要我们在插入后去主动获取,以便后面的操作,Mybatis为我们提供了处理的方法. 主键回填 keyProperty:指定哪个字段是主键 useGeneratedKeys:这个主键是否使用数据库内置生成策略 我们可以在XML文件中进行如下配置: <insert id="insertUser" parameterType="user" useGeneratedK
-
mybatis insert返回主键代码实例
这篇文章主要介绍了mybatis insert返回主键代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在使用ibatis插入数据进数据库的时候,会用到一些sequence的数据,有些情况下,在插入完成之后还需要将sequence的值返回,然后才能进行下一步的操作. 使用ibatis的selectKey就可以得到sequence的值,同时也会将值返回.不过对于不同的数据库有不同的操作方式. 对于oracle: <insert id="
-
详解MyBatis中主键回填的两种实现方式
主键回填其实是一个非常常见的需求,特别是在数据添加的过程中,我们经常需要添加完数据之后,需要获取刚刚添加的数据 id,无论是 Jdbc 还是各种各样的数据库框架都对此提供了相关的支持,本文我就来和和大家分享下数据库主键回填在 MyBatis 中的两种实现思路. 原生写法 框架来源于我们学过的基础知识,主键回填实际上是一个在 JDBC 中就被支持的写法,有的小伙伴可能不知道这一点,因此这里我先来说说在 JDBC 中如何实现主键回填. JDBC 中实现主键回填其实非常容易,主要是在构造 Prepar
-
tk.mybatis实现uuid主键生成的示例代码
引入依赖 <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>2.0.2</version> </dependency> 1.创建一个GenId的实现类 package com.xiaobu.base.entity; import tk.mybatis.ma
-
mybatis中返回主键一直为1的问题
目录 mybatis 返回主键一直为1 mybatis 自增主键 主键回传,返回id为null 踩坑 Mybatis主键回传流程 踩坑 总结 mybatis 返回主键一直为1 1是返回的插入成功的行数,这没有错 而自增id则是直接映射到对象里,直接输出 xxx.getId()即可 举例: 在xml中: <insert id="addUser" parameterType="blog.model.User" useGeneratedKeys="true
-
MyBatis处理mysql主键自动增长出现的不连续问题解决
问题产生 设置了mysql主键自动增长,但因为删除字段的操作导致主键不连续 解决方法 step1:在mapper.xml文件中添加update标签设置自动增长的增量为1 alter table student AUTO_INCREMENT=1; <!--StudentMapper.xml文件--> <mapper namespace="StudentMapper"> ... ... <update id="alter"> alte
-
Mysql 增加主键或者修改主键的sql语句操作
添加表字段 alter table table1 add transactor varchar(10) not Null; alter table table1 add id int unsigned not Null auto_increment primary key 修改某个表的字段类型及指定为空或非空 alter table 表名称 change 字段名称 字段名称 字段类型 [是否允许非空]; alter table 表名称 modify 字段名称 字段类型 [是否允许非空]; alt
-
详解mybatis plus使用insert没有返回主键的处理
项目使用springboot搭建.最初的时候是使用mybatis,后来升级到mybatis plus.按照mp的官网介绍,使用mp的insert方法,对于自增的数据库表,mp会把主键写入回实例的对应属性.但实际操作起来,却没有主键. entity 类设置如下: @TableName(value = "USERINFO") public class UserInfo { /** * 指定自增策略 */ @TableId(value = "user_id",type =
-
mybatis-plus拦截器、字段填充器、类型处理器、表名替换、SqlInjector(联合主键处理)
目录 组件介绍 表名处理器 字段填充器 类型处理器 补充 最近有个练手的小例子,大概就是配置两个数据源,从一个数据源读取数据写到另一个数据源,虽然最后做了出来,但是不支持事务...就当是对mybatis-plus/mybatis组件使用方式的记录吧,本次例子使用的仍是mybatis-plus 回忆一下mybatis核心对象: Configuration 初始化基础配置,比如MyBatis的别名等,一些重要的类型对象,如,插件,映射器,ObjectFactory和typeHandler对象,MyB
-
Redis中主键失效的原理及实现机制剖析
作为一种定期清理无效数据的重要机制,主键失效存在于大多数缓存系统中,Redis 也不例外.在 Redis 提供的诸多命令中,EXPIRE.EXPIREAT.PEXPIRE.PEXPIREAT 以及 SETEX 和 PSETEX 均可以用来设置一条 Key-Value 对的失效时间,而一条 Key-Value 对一旦被关联了失效时间就会在到期后自动删除(或者说变得无法访问更为准确).可以说,主键失效这个概念还是比较容易理解的,但是在具体实现到 Redis 中又是如何呢?最近本博主就对 Redis
随机推荐
- AngularJS入门教程之模块化操作用法示例
- Sql Server数据库各版本功能对比
- javascript 打印内容方法小结
- Java全面解析XML格式串(JDOM解析)
- 详解ABP框架中的数据过滤器与数据传输对象的使用
- 用javascript来控制 链接的target 属性的代码
- JavaScript常用脚本汇总(二)
- PHP的autoload机制的实现解析
- java编写ftp下载工具
- Linux在shell中自动生成1到100的数组方法(两种方法)
- 文本框css关闭输入法
- jQuery实现高亮显示的方法
- jquery(live)中File input的change方法只起一次作用的解决办法
- MSSQL安全设置的具体步骤和方法小结
- PHP实现长文章分页实例代码(附源码)
- 深入理解JavaScript中的传值与传引用
- 灵活定制收藏夹站点2法
- 试用google search的Ajax api
- linux下动态网站维护基本命令小结
- 基于Spring实现文件上传功能