4.2 MyBatis_映射文件_insert_Oracle使用序列生成主键演示和获取非自增主键的值_selectKey
2018-02-01 01:33
323 查看
一.引子
2
二.序列的概念
2
3
4
5
6
7
三.创建序列
2
3
4
5
6
7
8
问题:为什么不用触发器?
开发中遇到问题之后,我先在网上查了些资料,发现好多推荐使用触发器;使用触发器确实能够省时省成本,但与同事沟通过之后发现生产环境是不允许使用触发器的,基本原因有二,一个是维护成本高;线上环境数据库问题由DBA处理,研发无法介入;二是对于目前的服务器环境会有效率问题;所以放弃触发器;
四.什么是触发器?
五.触发器的性能
六.mybatis sql语句
由于在之前 已经执行过创建序列的语句,所以可以直接使用序列的函数nextVal了!这个函数简单来说可以得到一个数值,可以是上一个主键加一的结果,或者1;知道这些之后,让我们在mapper文件中加入如下语句
2
此语句用于引入;
然后创建insert节点
2
3
4
5
6
7
8
此句中的 这句话是引入刚刚创建的sql片段;意思是将序列生成的数值作为ID插入到数据表中,其他value还是使用变量
至此自动主键的功能已实现;新手需要注意每个insert 的ID的值都要使用序列的nextVal函数 不然会出现可想而知的问题!
来源于:http://blog.csdn.net/u010430099/article/details/53515154
在最近的一次开发工作中,有自增主键这样的需求,而数据库使用的是oracle数据库; 由于oracle 数据库没有像mysql和sqlserver 那样提供自增主键的功能,所以在这里需要换一种思维去实现自增主键的功能!进而我们需要引入[序列]的概念!1
2
二.序列的概念
序列:是oracle提供的用于产生一系列唯一数字的数据库对象。 序列有以下几种特征: 1. 自动提供卫衣的数值; 2. 共享对象 3. 用于提供主键值 4. 将序列值装入内存可以提高访问效率1
2
3
4
5
6
7
三.创建序列
--创建一个序列,序列名字叫SEQ_StudentInfo_Identity --创建一个序列(序列名的规则一般建议是以SEQ开头,然后下划线,后面跟你的表名,表名前的T_可以去掉,然后以_Identity结尾,用来表示我这个序列是用在Id自增字段的序列) create sequence SEQ_StudentInfo_Identity increment by 1 --每次增加几个,我这里是每次增加1 start with 1 --从1开始计数 nomaxvalue --不设置最大值 nocycle --一直累加,不循环 nocache; --不建缓冲区1
2
3
4
5
6
7
8
问题:为什么不用触发器?
开发中遇到问题之后,我先在网上查了些资料,发现好多推荐使用触发器;使用触发器确实能够省时省成本,但与同事沟通过之后发现生产环境是不允许使用触发器的,基本原因有二,一个是维护成本高;线上环境数据库问题由DBA处理,研发无法介入;二是对于目前的服务器环境会有效率问题;所以放弃触发器;
四.什么是触发器?
五.触发器的性能
六.mybatis sql语句
由于在之前 已经执行过创建序列的语句,所以可以直接使用序列的函数nextVal了!这个函数简单来说可以得到一个数值,可以是上一个主键加一的结果,或者1;知道这些之后,让我们在mapper文件中加入如下语句
<!-- 序列 --> <sql id='TABLE_SEQUENCE'>SEQ_FSO_ACTIVITY_USER_SIGN_UP.nextVal</sql>1
2
此语句用于引入;
然后创建insert节点
<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,jdbcType=VARCHAR}, #{realName,jdbcType=VARCHAR}, #{createTime,jdbcType=VARCHAR} ) </insert>1
2
3
4
5
6
7
8
此句中的 这句话是引入刚刚创建的sql片段;意思是将序列生成的数值作为ID插入到数据表中,其他value还是使用变量
至此自动主键的功能已实现;新手需要注意每个insert 的ID的值都要使用序列的nextVal函数 不然会出现可想而知的问题!
来源于:http://blog.csdn.net/u010430099/article/details/53515154
相关文章推荐
- 4.1 MyBatis_映射文件_insert_MySQL获取自增主键的值
- Mybatis第六篇【配置文件和映射文件再解读、占位符、主键生成与获取、Mapper代理】
- 在eclipse中使用MyBatis Geneator自动生成出对应数据库的实体与映射文件
- 使用mybatis的generator自动生成映射文件
- 简单三步快速学会使用Mybatis-Generator自动生成entity实体、dao接口以及mapper映射文件(postgre使用实例)
- 如何在MyEclipse中使用MyBatis将MySQL数据表生成相应的实体类和映射文件
- 使用generator自动生成Mybatis映射配置文件
- 原生JDBC ,MyBatis 使用 insert 获取主键值对比(MySQL)
- Mybatis使用generator自动生成映射配置文件信息
- oracle的序列使用,创建、表中调用、主键自动生成
- 使用mybatis命令工具生成映射文件
- Mybatis使用generator自动生成映射配置文件信息
- 使用MyBatis-Generator自动生成映射文件
- 使用Mybatis-Generator逆向生成po,映射文件和mapper接口
- Mybatis使用generator自动生成映射配置文件信息
- Mybatis使用generator自动生成映射配置文件信息
- 使用Mybatis生成工具自动生成实体类和对应的mapper映射文件以及接口文件
- 使用generator自动生成Mybatis映射配置文件
- Mybatis使用generator自动生成映射配置文件信息
- 使用mybatis的generator自动生成po及mapper映射文件