`
chenzhou123520
  • 浏览: 4249703 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MyBatis+MySQL 返回插入的主键ID

阅读更多

需求:使用MyBatis往MySQL数据库中插入一条记录后,需要返回该条记录的自增主键值。

 

方法:在mapper中指定keyProperty属性,示例如下:

<insert id="insertAndGetId" useGeneratedKeys="true" keyProperty="userId" parameterType="com.chenzhou.mybatis.User">
	insert into user(userName,password,comment)
	values(#{userName},#{password},#{comment})
</insert>

 如上所示,我们在insert中指定了keyProperty="userId",其中userId代表插入的User对象的主键属性。

 

User.java

public class User {
	private int userId;
	private String userName;
	private String password;
	private String comment;
	
	//setter and getter
}

 UserDao.java

public interface UserDao {

	public int insertAndGetId(User user);

}

 测试:

User user = new User();
user.setUserName("chenzhou");
user.setPassword("xxxx");
user.setComment("测试插入数据返回主键功能");

System.out.println("插入前主键为:"+user.getUserId());
userDao.insertAndGetId(user);//插入操作
System.out.println("插入后主键为:"+user.getUserId());

 输出:

插入前主键为:0
插入后主键为:15

 查询数据库:

 

如上所示,刚刚插入的记录主键id为15

 

分享到:
评论
18 楼 永立s 2017-12-26  
有帮助
17 楼 GGGGeek 2017-07-08  
这算是mybatis的奇巧淫技吗?哈哈哈
16 楼 di1984HIT 2015-12-30  
学习了! 
15 楼 qq_28108539 2015-08-04  
确实是,之前一直搞错了,把返回的那个int值放到了里面
14 楼 liuhegong 2015-07-09  
                                                                                                      












































































13 楼 蓝骑士 2015-03-27  
12 楼 yannanying 2014-11-22  
赞一个,确实是对的
11 楼 wuwenqiu0203 2014-11-03  
按你的方式写的,为什么我返回的ID都是1?
10 楼 寒风刺骨 2014-08-13  
赞一下。终于看到完整的代码了。。
9 楼 chenzhou123520 2014-05-02  
weii 写道
我的做法跟你一样,不过我连接的是db2,插入前是0,然后就报错了
id=0
org.apache.ibatis.exceptions.PersistenceException:
### Error updating database.  Cause: org.apache.ibatis.executor.ExecutorException: Error getting generated key or setting result to parameter object. Cause: java.lang.NullPointerException
### The error may involve org.fineweaver.dao.IUserDAO.insert-Inline
### The error occurred while setting parameters
### SQL: insert into User (userName,password,age)     values(?,?,?)
### Cause: org.apache.ibatis.executor.ExecutorException: Error getting generated key or setting result to parameter object. Cause: java.lang.NullPointerException

做查询操作是正常的。只有插入的时候报错。。。
有机会交流

能否把xml内容贴出来,或者发我邮箱chenzhou1025#126.com
8 楼 weii 2014-04-24  
我的做法跟你一样,不过我连接的是db2,插入前是0,然后就报错了
id=0
org.apache.ibatis.exceptions.PersistenceException:
### Error updating database.  Cause: org.apache.ibatis.executor.ExecutorException: Error getting generated key or setting result to parameter object. Cause: java.lang.NullPointerException
### The error may involve org.fineweaver.dao.IUserDAO.insert-Inline
### The error occurred while setting parameters
### SQL: insert into User (userName,password,age)     values(?,?,?)
### Cause: org.apache.ibatis.executor.ExecutorException: Error getting generated key or setting result to parameter object. Cause: java.lang.NullPointerException

做查询操作是正常的。只有插入的时候报错。。。
有机会交流
7 楼 hui94781674 2014-04-24  
谢谢。在项目使用中有帮助
6 楼 chenzhou123520 2013-08-09  
我叫张恒 写道
我看cyg的项目中有这样的东东,我在验证下。

User user = new User();
user.setUserName("chenzhou");
user.setPassword("xxxx");
user.setComment("测试插入数据返回主键功能");

System.out.println("插入前主键为:"+user.getUserId());
userDao.insertAndGetId(user);//插入操作
System.out.println("插入后主键为:"+user.getUserId());

你看下这段代码,当执行userDao.insertAndGetId(user);前主键是为0的。
执行完插入操作之后主键就有赋值了,并没有重新查询一次
5 楼 我叫张恒 2013-08-09  
我看cyg的项目中有这样的东东,我在验证下。
4 楼 chenzhou123520 2013-08-08  
我叫张恒 写道
嗯嗯 ,在新插入一条记录之后如果要获得该条记录的Id 必须要在查询一次该记录,然后才能得到记录,我现在明白了为什么在首次登陆插入值之后还有查询一次了。。

不需要查询啊,插入之后,该实体类的id属性就直接赋值了啊
3 楼 我叫张恒 2013-08-08  
嗯嗯 ,在新插入一条记录之后如果要获得该条记录的Id 必须要在查询一次该记录,然后才能得到记录,我现在明白了为什么在首次登陆插入值之后还有查询一次了。。
2 楼 chenzhou123520 2013-07-31  
chengcheng222e 写道
过来赞一下 

哈哈,谢谢
1 楼 chengcheng222e 2013-07-31  
过来赞一下 

相关推荐

Global site tag (gtag.js) - Google Analytics