oracle结合mybatis 实现自增主键的insert和批量insert功能(未完)
发布时间:2020-12-12 15:35:49 所属栏目:百科 来源:网络整理
导读:一.引子 在最近的一次开发工作中,有自增主键这样的需求,而数据库使用的是oracle数据库; 由于oracle 数据库没有像mysql和sqlserver 那样提供自增主键的功能,所以在这里需要换一种思维去实现自增主键的功能!进而我们需要引入[序列]的概念! 二.序列的概
一.引子 在最近的一次开发工作中,有自增主键这样的需求,而数据库使用的是oracle数据库; 由于oracle 数据库没有像mysql和sqlserver 那样提供自增主键的功能,所以在这里需要换一种思维去实现自增主键的功能!进而我们需要引入[序列]的概念! 二.序列的概念 序列:是oracle提供的用于产生一系列唯一数字的数据库对象。 序列有以下几种特征: 1. 自动提供卫衣的数值; 2. 共享对象 3. 用于提供主键值 4. 将序列值装入内存可以提高访问效率 三.创建序列 --创建一个序列,序列名字叫SEQ_StudentInfo_Identity
--创建一个序列(序列名的规则一般建议是以SEQ开头,然后下划线,后面跟你的表名,表名前的T_可以去掉,然后以_Identity结尾,用来表示我这个序列是用在Id自增字段的序列)
create sequence SEQ_StudentInfo_Identity
increment by 1 --每次增加几个,我这里是每次增加1
start with 1 --从1开始计数
nomaxvalue --不设置最大值
nocycle --一直累加,不循环
nocache; --不建缓冲区
问题:为什么不用触发器? 四.什么是触发器? 五.触发器的性能 六.mybatis sql语句 由于在之前 已经执行过创建序列的语句,所以可以直接使用序列的函数nextVal了!这个函数简单来说可以得到一个数值,可以是上一个主键加一的结果,或者1;知道这些之后,让我们在mapper文件中加入如下语句 <!-- 序列 -->
<sql id='TABLE_SEQUENCE'>SEQ_FSO_ACTIVITY_USER_SIGN_UP.nextVal</sql>
此语句用于引入; <insert id="insert" parameterType="x x.x x.x.x.x.x.x.SignUp" >
insert into SignUp (ID,PRODUCT_CODE,STATUS,U_ID,REAL_NAME,CREATE_TIME
)
values (<include refid="TABLE_SEQUENCE" />,#{productCode,jdbcType=VARCHAR},#{status,jdbcType=CHAR},#{uId,#{realName,#{createTime,jdbcType=VARCHAR}
)
</insert>
此句中的 这句话是引入刚刚创建的sql片段;意思是将序列生成的数值作为ID插入到数据表中,其他value还是使用变量 至此自动主键的功能已实现;新手需要注意每个insert 的ID的值都要使用序列的nextVal函数 不然会出现可想而知的问题! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |