当有时我们插入一条数据时,由于id很可能是自动生成的,如果我们想要返回这条刚插入的id怎么办呢。
在mysql数据中我们可以在insert下添加一个selectKey用以指定返回的类型和值:
方法一:
<insert id="addUser" parameterType="com.zhl.pojo.User">
<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id">
SELECT LAST_INSERT_ID() AS ID
</selectKey>
INSERT INTO
userinfo (name ,password, age, gender, email)
VALUES(#{name:VARCHAR} ,#{password:VARCHAR} ,#{age:INTEGER} ,
#{gender:INTEGER} ,#{email:VARCHAR})
</insert>
其中resultType表示返回的类型。ID就是返回的刚插入的ID。
在oracle中类似selectKey如下:
<selectKey resultType="java.lang.Integer" order="BEFORE" keyProperty="id">
SELECT LOGS_SEQ.nextval AS ID FROM DUAL
</selectKey>
方法二:
<insert id="addUser" parameterType="com.zhl.pojo.User" useGeneratedKeys="true" keyProperty="id">
INSERT INTO userinfo (name ,password, age, gender, email)
VALUES(#{name:VARCHAR} ,#{password:VARCHAR} ,#{age:INTEGER} ,
#{gender:INTEGER},#email:VARCHAR})
</insert>
查看返回id的具体java代码:
public void addUser(){
user.setPassword(user.getName());
UserServiceImpl userService = new UserServiceImpl();
PrintWriter w = null;
try {
w = ServletActionContext.getResponse().getWriter();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 执行插入操作
int count = userService.addUser(user);
// 执行完插入操作后,刚才的那个user中id就已经有值了
System.out.println("count="+count+" userId="+user.getId());
if(count!=0){
w.write("{\"success\":\"success\"}");
}
else{
w.write("{\"success\":\"fail\"}");
}
}
输出:count=1 userId=59