MyBatis 取出insert的lastid

ccjjww1222 2012-01-13 11:41:40
xml 配置

<insert id="info" parameterType="info">
<selectKey resultType="int" keyProperty="id" order="AFTER" >
SELECT @@IDENTITY AS id
</selectKey>
insert into info(a,b)values(#{a},#{b});
</insert>


现在的情况是 数据能插入
insertid不晓得怎么取出,MyBatis默认的返回值是1,也就是插入的行数

debug信息
2012-01-13 11:17:33,857 DEBUG [java.sql.PreparedStatement] - ==> Executing: SELECT @@IDENTITY AS id
2012-01-13 11:17:33,857 DEBUG [java.sql.PreparedStatement] - ==> Parameters:
2012-01-13 11:17:33,885 DEBUG [java.sql.ResultSet] - <== Columns: id
2012-01-13 11:17:33,885 DEBUG [java.sql.ResultSet] - <== Row: 40

ID已经正确取出,请问各位大佬们,java怎么获取到这个值?
...全文
693 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
skyandairqun 2012-01-13
  • 打赏
  • 举报
回复
楼主取最后一个插入的值需要在插入后立马获取才可以,也就是说要确保取最后一个插入值的id要和插入的操作为同一个事务,还有楼主描述是不是有点不清晰!
sddcc123 2012-01-13
  • 打赏
  • 举报
回复
我是这么用的

<insert id="addHomework" parameterType="Map" useGeneratedKeys="true" keyProperty="homeworkid">
INSERT INTO
homework(homeworkbag_id,homeworkname,file_path,crt_iduser,crt_time,homeworkbagname)
VALUES(#{homeworkbag_id},#{homeworkname},' ',#{crt_iduser},now(),#{homeworkbagname})
<selectKey resultType="int" order="AFTER" keyProperty="homeworkid">
SELECT LAST_INSERT_ID();
</selectKey>
</insert>

我在Action中,调用包含这个sql的service,

this.service.addHomework(paraMap)

然后新插入的homeworkid会返回在paraMap中
这样获得

paraMap.get("homeworkid")
游一游走一走 2012-01-13
  • 打赏
  • 举报
回复
可以的,这是我这的输出

before insert >>>>>>People [age=20, firstName=zyz1111, id=null, lastName=1111zyz]
DEBUG 2012-01-13 16:03:22,243 org.apache.ibatis.logging.slf4j.Slf4jImpl: ==> Executing: INSERT INTO people(age,firstname,lastname)values(?,?,?);
DEBUG 2012-01-13 16:03:22,243 org.apache.ibatis.logging.slf4j.Slf4jImpl: ==> Parameters: 20(Integer), zyz1111(String), 1111zyz(String)
DEBUG 2012-01-13 16:03:22,243 org.apache.ibatis.logging.slf4j.Slf4jImpl: ==> Executing: SELECT @@IDENTITY AS id
DEBUG 2012-01-13 16:03:22,243 org.apache.ibatis.logging.slf4j.Slf4jImpl: ==> Parameters:
DEBUG 2012-01-13 16:03:22,274 org.apache.ibatis.logging.slf4j.Slf4jImpl: <== Columns: id
DEBUG 2012-01-13 16:03:22,274 org.apache.ibatis.logging.slf4j.Slf4jImpl: <== Row: 11
after insert >>>>>>People [age=20, firstName=zyz1111, id=11, lastName=1111zyz]


package com.test.www.mybatis;

import org.apache.log4j.Logger;

public class People {
private static Logger logger = Logger.getLogger(People.class.getName());
private Integer id;
private Integer age;
private String firstName;
private String lastName;

public static Logger getLogger() {
return logger;
}

public static void setLogger(Logger logger) {
People.logger = logger;
}

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public Integer getAge() {
return age;
}

public void setAge(Integer age) {
this.age = age;
}

public String getFirstName() {
return firstName;
}

public void setFirstName(String firstName) {
this.firstName = firstName;
}

public String getLastName() {
return lastName;
}

public void setLastName(String lastName) {
this.lastName = lastName;
}

@Override
public String toString() {
return "People [age=" + age + ", firstName=" + firstName + ", id=" + id
+ ", lastName=" + lastName + "]";
}
}


<mapper namespace="com.test.www.mybatis.People">
<insert id="insert" parameterType="People">
<selectKey keyProperty="id" order="AFTER" resultType="int">SELECT @@IDENTITY AS id</selectKey>
INSERT INTO people(age,firstname,lastname)values(#{age},#{firstName},#{lastName});
</insert>
</mapper>
fireelf000 2012-01-13
  • 打赏
  • 举报
回复
<insert id="insertRemark"parameterClass="RemarkInfo">
insert into SGS_REMARK(REMARK)values(#remark#)
<selectKeyresultClass="int" keyProperty="id" >
SELECT @@IDENTITY AS id
</selectKey>
</insert>

id是RemarkInfo中的属性,楼主试试这种写法
ss36290109 2012-01-13
  • 打赏
  • 举报
回复
你的JAVA代码法下
greency 2012-01-13
  • 打赏
  • 举报
回复
用查询语句不能取出么? LZ想要怎么取出?

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧