Home Mybatis插入数据时返回主键
Post
Cancel

Mybatis插入数据时返回主键

方式一

1
2
3
4
5
<insert id="insertAndGetId" useGeneratedKeys="true" keyProperty="userId" 
        parameterType="com.chenzhou.mybatis.User">
    insert into user(userName, password, comment)
    values(#{userName}, #{password}, #{comment})
</insert>
1
2
3
4
5
User user = new User();  
user.setUserName("ceshi");  
user.setPassword("123456"); 
userDao.insertUser(user);
System.out.println("插入后主键为:" + user.getUserId());  
  • useGeneratedKeys="true"表示给主键设置自增长
  • keyProperty="userId"表示将自增长后的id赋值给实体类中的userId字段
  • parameterType="com.chenzhou.mybatis.User"这个属性指向传递的参数实体类
  • 实体类中uerId要有getter()setter()方法

方式二

1
2
3
4
5
6
7
<insert id="insertProduct" parameterType="domain.model.ProductBean" >
    <selectKey resultType="java.lang.Long" order="AFTER" keyProperty="productId">
      SELECT LAST_INSERT_ID()
    </selectKey>
      INSERT INTO t_product(productName, productDesrcible, merchantId)
      values(#{productName}, #{productDesrcible}, #{merchantId})
</insert>
  • <insert></insert>中没有resultType属性,但是<selectKey></selectKey>标签是有的
  • order="AFTER"表示先执行插入语句,之后再执行查询语句,可被设置为BEFOREAFTER,如果设置为BEFORE,那么它会首先选择主键,设置keyProperty然后执行插入语句,如果设置为AFTER,那么先执行插入语句,然后是selectKey元素,这和如Oracle数据库相似,可以在插入语句中嵌入序列调用keyProperty="userId"表示将自增长后的id赋值给实体类中的userId字段
  • SELECT LAST_INSERT_ID()表示MySQL语法中查询出刚刚插入的记录自增长id
  • 实体类中uerId要有getter()setter()方法
This post is licensed under CC BY 4.0 by the author.