mybaties+oracle:插入数据,返回自增长的id
2017-08-20 12:03
471 查看
mybaties
接口
自增长id的实现
日志和打印信息
数据库的PrivilegeID
为什么不是47,而是48?
原因是:插入代码的前面:SELECT Privilege_PrivilegeID_seq.Nextval as ID from DUAL
调用了一次序列;
在数据库中,数据插入前有一次调用序列:
select Privilege_PrivilegeID_seq.nextval into :new.PrivilegeID from dual;
所以数据库中PrivilegeID是48
修改如下就可以解决
<insert id="insertAndReturnID" parameterType="Privilege"> <!-- parameterType="Privilege": 是传入参数的对象,后面返回的privilegeID就是它的属性 --> <!-- 插入数据,并返回privilegeID,该privilegeID的值给对象的属性privilegeID,并返回Privilege对象--> <selectKey resultType="INTEGER" order="BEFORE" keyProperty="privilegeID"> SELECT Privilege_PrivilegeID_seq.Nextval as ID from DUAL </selectKey> insert into Privilege <trim prefix="(" suffix=")" suffixOverrides=","> <if test="privilegeID != null"> PrivilegeID, </if> <if test="type != null"> Type, </if> </trim> VALUES <trim prefix="(" suffix=")" suffixOverrides=","> <if test="privilegeID != null"> #{privilegeID}, </if> <if test="type != null"> #{type}, </if> </trim> </insert>
接口
/** * 插入数据,并返回自动增长的id */ public int insertAndReturnID(Privilege privilege);
@RequestMapping(value = "/basic/test.do") public void test(){ Privilege privilege= new Privilege(); privilege.setType("test"); int insertAndReturnID = privilegeService.insertAndReturnID(privilege); System.out.println("test: "+privilege.getPrivilegeID()); }
自增长id的实现
-----------------------------Privilege --创建自增id,名称为:表名_字段名_seq create sequence Privilege_PrivilegeID_seq -- 最小值 minvalue 10 -- 不设置最大值 nomaxvalue -- 每次加1 increment by 1 -- 从1开始计数 start with 10 -- 一直累加,不循环 nocycle -- 不建缓冲区 nocache; --为insert操作创建触发器,SysRole_ins_trg create or replace trigger Privilege_ins_trg before insert on Privilege for each row begin select Privilege_PrivilegeID_seq.nextval into :new.PrivilegeID from dual; end; /
日志和打印信息
数据库的PrivilegeID
为什么不是47,而是48?
原因是:插入代码的前面:SELECT Privilege_PrivilegeID_seq.Nextval as ID from DUAL
调用了一次序列;
在数据库中,数据插入前有一次调用序列:
select Privilege_PrivilegeID_seq.nextval into :new.PrivilegeID from dual;
所以数据库中PrivilegeID是48
修改如下就可以解决
将Privilege_PrivilegeID_seq.nextval改为如下 Privilege_PrivilegeID_seq.nextval-1 --修改后的代码如下 --为insert操作创建触发器,SysRole_ins_trg create or replace trigger Privilege_ins_trg before insert on Privilege for each row begin select Privilege_PrivilegeID_seq.nextval-1 into :new.PrivilegeID from dual; end; /
相关文章推荐
- mybaties+mysql:插入数据,返回自增长的id
- mybatis中插入数据自动返回自增长id的配置
- oracle表中有一列id她是自动增长的,插入一条数据时怎么取得id的值
- ASP.NET 往oracle插入一条数据并返回ID
- 在oracle中插入一条数据,id自动增长,插入之后怎么得到这个id(sequence的使用)
- oracle中插入一条数据id自动增长,插入之后得到这个id
- Oracle插入数据并获取自增长序列ID方法
- 插入数据的同时,返回插入数据某一列的值(可以获得自动增长的ID)
- mysql插入一条数据之后(ID为自动增长列),返回该条数据的ID
- mybatis返回插入数据的自增长id
- 在oracle中插入一条数据,id自动增长,插入之后怎么得到这个id(sequence的使用)
- SQL插入数据同时返回当前自增长ID
- 在oracle中插入一条数据,id自动增长,插入之后怎么得到这个id(sequence的使用)
- oracle中插入一条数据并且返回该条数据的id
- 在oracle中插入一条数据,id自动增长,插入之后怎么得到这个id(sequence的使用)
- oracle中插入一条数据,id自动增长,插入之后怎么得到这个id(sequence的使用)
- 返回自增Id,循环插入关联数据
- ibatis插入数据返回ID的方法
- SQL Insert into 语句插入后返回新插入的自动增长ID
- 【MyBatis】关于MyBatis插入自动增长id的Bean到数据库后返回的id为null的解决办法