insert主键返回 selectKey使用

有时候新增一条数据,知道新增成功即可,但是有时候,需要这条新增数据的主键,以便逻辑使用,再将其查询出来明显不符合要求,效率也变低了。这时候,通过一些设置,mybatis可以将insert的数据的主键返回,直接拿到新增数据的主键,以便后续使用。这里主要说的是selectKey标签设计表的时候有两种主键,一种自增主键,一般为int类型,一种为非自增的主键,例如用uuid等。首先说自增类型的主键。

  1. 映射xml中添加如下代码,注释写的很清楚了,不多做赘述。
<!--新增信息,并拿到新增信息的表主键信息。      
新增数据,得到主键的外层写法没什么特别,跟普通的insert一样。
只不过里面加了selectKey-->  
<insert id="insertAndgetkey"parameterType="com.soft.mybatis.model.User">      
<!--selectKey  会将 SELECT LAST_INSERT_ID()的结果放入到传入的model的主键里面,         
 keyProperty 对应的model中的主键的属性名,这里是 user 中的id,因为它跟数据库的主键对应          
 order AFTER 表示 SELECT LAST_INSERT_ID() 在insert执行之后执行,多用与自增主键,               
  BEFORE 表示 SELECT LAST_INSERT_ID() 在insert执行之前执行,这样的话就拿不到主键了,                     
  这种适合那种主键不是自增的类型          
  resultType 主键类型 -->     
 <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">          
 SELECT LAST_INSERT_ID()      </selectKey>     
  insert into t_user (username,password,create_date) values(#{username},#{password},#{createDate})  
  </insert>  

2 接口 UserDao

/**  * 新增用户信息,并得到新增数据的主键 
*  主键自增  
* @return  
*/ 
 int insertAndGeyKey(User user);  

3 实现类 UserDaoImpl

public int insertAndGeyKey(User user) {      
  SqlSession sqlSession = null;      
  try {          
  	sqlSession = SqlsessionUtil.getSqlSession();          
  	int key =  sqlSession.insert("test.insertAndgetkey",user);         
  	 // commit          
  	 sqlSession.commit();         
  	  return key;      
  } catch (Exception e) {          
  	sqlSession.rollback();          
  	e.printStackTrace();      
  } finally {          
  	SqlsessionUtil.closeSession(sqlSession);     
 }      
  return 0;  
 }  

接下来就是测试了,UserDaoTest

/**  
* 注意,user.xml中已经说过,selectKey会将得到的主键放入model的主键属性中,  
* 所以这里获取主键的方法一定是通过model.get主键才能获取新增的主键  
* @throws Exception  
*/  @Test  
public void insertAndGeyKey() throws Exception {      
	User user = new User();      
	user.setUsername("新增得到主键5");     
         user.setPassword("123456");      
         user.setCreateDate(new Date());      
         int  result = dao.insertAndGeyKey(user);      
         System.out.println("insertAndGeyKey :" + result);      
         // 获取新增数据主键      
         System.out.println("新增数据的主键 :" + user.getId());  
 }  

数据库表新增数据主键为 34
在这里插入图片描述
junit测试结果 得到主键 34 测试成功。
在这里插入图片描述
2 自增主键的获取方法,说完了,下面来讲讲非自增主键的获取方法。大致一样,些许不同。
源文链接
https://blog.csdn.net/qq_29663071/article/details/79486048

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值