1、场景:
插入数据库的值须要当即获得返回的主键id进行下一步程序操做html
2、解决方法:
第一种:使用通用mapper的插入方法
Mapper.insertSelective(record);java
此方法:插入一条数据,只插入不为null的字段,不会影响有默认值的字段
支持Oracle序列,UUID,相似Mysql的INDENTITY自动增加(自动回写)
优先使用传入的参数值,参数值空时,才会使用序列、UUID,自动增加sql
controller的实际应用:使用方法id会直接将映射到参数的实体上使用时直接使用参数的实体get获取值数据库
通用mapper相关配置查看其它文章 http://blog.csdn.net/isea533/article/details/41457529app
第二种:编写sql语句
dao层方法:post
- Integer insertBatchReturnId(Batch batch);
xml的sql语句写法spa
记得加上useGeneratedKeys和keyProperty配置便可,前者是指设置是否使用jdbc的getGenereatedKeys方法获取主键并赋值到keyProperty设置的属性中,后者即实体类主键字段(而且大小写要对应上).net
- <insert id="insertBatchReturnId" useGeneratedKeys="true" keyProperty="id" parameterType="org.uz.dxt.model.bankbase.Batch" >
-
- insert into t_batch (
- batchCode,
- bankCode,
- bizType,
- companyCode,
- wtEndDate,
- wtDate,
- contractId,
- totalCount,
- totalBase,
- handCode)
- values
- ( #{batchcode},
- #{bankcode},
- #{biztype},
- #{companycode},
- #{wtenddate},
- #{wtdate},
- #{contractid},
- #{totalcount},
- #{totalbase},
- #{handCode})
- </insert>
controller的实际应用:使用方法id会直接将映射到参数的实体上使用时直接使用参数的实体get获取值
- batchService.insertBatch(param);
- idlist.add(param.getId());
第三种:sql语句使用<selectKey>获取自增逐渐id
- <insert id="add" parameterType="EStudent">
- // 下面是SQLServer获取最近一次插入记录的主键值的方式
- <selectKey resultType="_long" keyProperty="id" order="AFTER">
- select @@IDENTITY as id
- </selectKey>
- insert into TStudent(name, age) values(#{name}, #{age})
- </insert>
使用用法同上
这里推荐使用第一种和第二种中方法code
第三种方法对oracl额外的配置xml
controller的实际应用:使用方法id会直接将映射到参数的实体上使用时直接使用参数的实体get获取值