mybatis+postgresql10插入返回主键ID
MyBatis如果使用useGeneratedKeys去生成自增列会造成不成功,因为官方提供只支持这些数据库:mybatis generatedkeys,那么如果要用在oracle和postgresql上,就必须知道它们的自增列是通过序列进行完成的,所以根据这个思路可以在插入的时候调用序列获取下一个值,然后再插入,序列的问题不会有并发问题,因为每次操作都必须在同一个session中,每个session调用序列都是隔离的。那么可以通过selectKey来调用序列。
第一种:
long saveJob(ScheduleJobDto scheduleJob);
<insert id="saveJob" parameterType="com.common.model.schedule.ScheduleJobDto">
<selectKey resultType="java.lang.Long" order="BEFORE" keyProperty="id" >
select nextval('schedule_job_job_id_seq'::regclass) as id
</selectKey>
insert into schedule_job (id,job_group, bean_name, params, cron_expression, run_status, job_status, job_data, description, revision, create_by, create_time, update_by, update_time, remark, del_flag) values
(#{id}, #{jobGroup}, #{beanName}, #{params}, #{cronExpression}, #{runStatus}, #{jobStatus}, #{jobData}, #{description}, #{revision}, #{createBy}, #{createTime}, #{updateBy}, #{updateTime}, #{remark}, #{delFlag})
</insert>
第二种:
long saveJob(ScheduleJobDto scheduleJob); <insert id="saveJob" parameterType="com.common.model.schedule.ScheduleJobDto">
<selectKey resultType="java.lang.Long" order="AFTER" keyProperty="id" >
select currval('schedule_job_job_id_seq'::regclass) as id
</selectKey>
insert into schedule_job (job_group, bean_name, params, cron_expression, run_status, job_status, job_data, description, revision, create_by, create_time, update_by, update_time, remark, del_flag) values
(#{jobGroup}, #{beanName}, #{params}, #{cronExpression}, #{runStatus}, #{jobStatus}, #{jobData}, #{description}, #{revision}, #{createBy}, #{createTime}, #{updateBy}, #{updateTime}, #{remark}, #{delFlag})
</insert>
区别:第一种和第二种的区别在于AFTER和BEFORE,AFTER表示在执行完之后,获取刚才序列的值,BEFORE表示插入之前获取序列的下一个值然后再进行插入,需要注意的是AFTER对应的是currval,BEFORE对应nextval。还有注意的是,在Java方法上不要使用@Param参数执行,只需要在Mapper中写入parameterType指定列表即可,其实不难发现,selectKey的keyProperty对应的就是Java类的字段。
其它方法:
但这些方式在返回值上都要对应,而不能放回影响行数。
mybatis+postgresql10插入返回主键ID的更多相关文章
- mybatis 批量插入 返回主键id
我们都知道Mybatis在插入单条数据的时候有两种方式返回自增主键: 1.对于支持生成自增主键的数据库:增加 useGenerateKeys和keyProperty ,<insert>标签 ...
- mybatis批量插入返回主键问题
今天整合mybatis时候用到返回主键问题,批量插入总是返回不了主键还报错. 记录入下: pom版本: <mybatis.version>3.2.6</mybatis.version ...
- mybatis insert后返回主键ID
需求: mybatis 在添加记录时需要获取到记录主键id id=0 无法获取主键id的值 在插入方法中添加如下属性和相应的值 <insert useGeneratedKeys="t ...
- Mybatis中insert返回主键ID
记录解决的过程,这里就不搬砖了. 1.获取insert后的主键id 原文链接:http://www.cnblogs.com/fsjohnhuang/p/4078659.html 2.insert后返回 ...
- mybatise插入返回主键ID
之前遇到过一次解决了,结果这次又搞了半天,在这里记录一下吧. <insert id="insertUser" useGeneratedKeys="true" ...
- (转)MyBatis+MySQL 返回插入的主键ID
MyBatis+MySQL 返回插入的主键ID 需求:使用MyBatis往MySQL数据库中插入一条记录后,需要返回该条记录的自增主键值. 方法:在mapper中指定keyProperty属性,示例如 ...
- MyBatis插入记录时返回主键id的方法
有时候插入记录之后需要使用到插入记录的主键,通常是再查询一次来获取主键,但是MyBatis插入记录时可以设置成返回主键id,简化操作,方法大致有两种. 对应实体类: public class User ...
- mybatis 3 批量插入返回主键 Parameter 'id' not found
@Insert("<script>INSERT INTO scp_activity_gift (activity_id,type,gift_id,status,limit_num ...
- mybatis添加记录时返回主键id
参考:mybatis添加记录时返回主键id 场景 有些时候我们在添加记录成功后希望能直接获取到该记录的主键id值,而不需要再执行一次查询操作.在使用mybatis作为ORM组件时,可以很方便地达到这个 ...
随机推荐
- 编译安装最新版nettle和gnutls
编译安装最新版gnutls的时候,总是会出libnettle 3.4.1 was not found的报错信息. 即使编译安装了nettle的最新版3.5之后,依然会报该错. 原因是gnutls编译的 ...
- 在生成.net core 3.0程序时不包含nuget库
在.net core 3.0中,默认的生成行为有了两个变化,一个是默认生成可执行文件,另一个是会复制依赖的Nuget项. 前一个变化会默认生成可执行的exe,用起来更加方便了.另一个变化可能是为了减少 ...
- UserControl关闭
直接 Application.Current.Shutdown();关闭程序.
- Python【day 17】面向对象-成员
类的变量分成2种: 1.成员变量 概念:在构造方法中的变量,前面带有self 作用:可以在类中不同的方法间使用 2.类变量-静态变量 概念:在类中,构造方法和普通方法之外,定义的变量 作用: 1.调用 ...
- Dynamics CRM定制子网格添加按钮实例之二:调试代码、打开Web资源及获取选择的记录
关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复222或者20160501可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...
- 基于file上传文件的并发上传(多个文件一起上传到后台并把数据存储的同一条数据中,如 数据库字段videopath,imge。前台发送来的文件file1,file2。 videopath=file1,imge=file2)
前台代码: <div class="tab-content"> <dl> <dt>所属栏目</dt> <dd> < ...
- elasticsearch的window的安装和启动
1.下载elasticserch的window和kibana的安装包 2.解压 进入elasticseach的bin目录下elasticsearch.bat 启动页面localhost:9200 3 ...
- js 常用工具方法
1.格式化字符串 String.prototype.format = function () { let args = arguments; return this.replace(/\{(\d+)\ ...
- python基础 while 字符串方法 运算符
一.while 1.while 死循环 f=True while f: print(1) print(2) 2.while 活循环 ①.正序 count = 1 while count <= 5 ...
- redis 进程使用root用户启动 -- 整改方案
最近内部风险整改, 各种进程使用root身份进行启动不符合要求, 于是各路神仙各施其法,为的就是让 某进程不以root 启动: 先以 redis 为例: 原有进程如下: #超一流标准的执行文件位置及配 ...