mybatis 新增返回id

第一种方式:

在实体类的映射文件 "*Mapper.xml" 这样写:

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

Tips:

useGeneratedKeys="true" 表示给主键设置自增长
keyProperty="userId"  表示将自增长后的Id赋值给实体类中的userId字段。
parameterType="com.chenzhou.mybatis.User" 这个属性指向传递的参数实体类

这里提醒下,<insert></insert> 中没有resultType属性,不要乱加。
实体类中uerId 要有getter() and setter(); 方法

由于我在MySQL数据库中建表时候已经设置了字段自增长,

第二种方式:

同样在实体类的映射文件 "*Mapper.xml" 但是要这样写:

<!-- 插入一个商品 -->
    <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>

Tips:

<insert></insert> 中没有resultType属性,但是<selectKey></selectKey> 标签是有的。

order="AFTER" 表示先执行插入语句,之后再执行查询语句。

可被设置为 BEFORE 或 AFTER。

如果设置为 BEFORE,那么它会首先选择主键,设置 keyProperty 然后执行插入语句。

如果设置为 AFTER,那么先执行插入语句,然后是 selectKey 元素-这和如 Oracle 数据库相似,可以在插入语句中嵌入序列调用
keyProperty="userId"  表示将自增长后的Id赋值给实体类中的userId字段。
SELECT LAST_INSERT_ID() 表示MySQL语法中查询出刚刚插入的记录自增长Id.

实体类中uerId 要有getter() and setter(); 方法

调用:

    UserAccount userAccount1  = new UserAccount();
        userAccount1.setAccountname("test2");
        userAccount1.setPassword("test2");
        userAccount1.setRegistos("IOS");
        userAccount1.setStutas(0);
        userAccount1.setCreatetime(System.currentTimeMillis());
        userAccount1.setImei("test");
        userAccount1.setChannel("test");
        userAccount1.setRegistip("0.0.0.0");
        int i = userAccountMapper.insertSelective(userAccount1);
        System.out.println(userAccount1.getAccountid());


原文地址:https://www.cnblogs.com/lxn0216/p/10120719.html

时间: 2024-11-14 12:04:09

mybatis 新增返回id的相关文章

mybatis 插入数据返回ID

hibernate中插入数据后会返回插入的数据的ID,mybatis要使用此功能需要在配置文件中显示声明两个属性即可: mybatis 插入数据返回ID,布布扣,bubuko.com

MyBatis+MySQL 返回插入记录的主键ID

今天用到了多个表之间的关系,另一个表中的一个字段要以第一个表的主键作为外键. 下面说两种方法,MyBatis+MySQL 返回插入记录的主键ID: 第一种: <insert id="insertAndGetId" useGeneratedKeys="true" keyProperty="userId" parameterType="com.chenzhou.mybatis.User"> insert into us

mybatis中返回自动生成的id

当有时我们插入一条数据时,由于id很可能是自动生成的,如果我们想要返回这条刚插入的id怎么办呢. 在mysql数据中我们可以在insert下添加一个selectKey用以指定返回的类型和值: 方法一: <insert id="addUser" parameterType="com.zhl.pojo.User"> <selectKey resultType="java.lang.Integer" order="AFTER

Mybatis自增长id处理

目录 1.使用useGenerateKey 2.使用select LAST_INSERT_ID() 3.使用select @@IDENTITY 4.在MySql中模拟Sequence 参考: 1.使用useGenerateKey <insert id="insert" parameterType="Person" useGeneratedKeys="true" keyProperty="personId"> ins

PHP获取MySql新增记录ID值的方法

今天发现用mysql_insert_id()获取到的新增记录的id不正确, 虽然发现源代码的事务写的有问题,但是最根本的原因是,我插入数据的id类型是bigint型 获取MySql新增记录ID值的方法有 1.使用语句 mysql_query("select max(id) from user",$link); 2.使用函数msyql_insert_id(); (1)mysql版 int mysql_insert_id ([ resource $link_identifier = NUL

MyBatis insert返回主键(sqlserver2008)

mybatis insert返回主键(sqlserver2008) MyBatisXML配置,下面两种方式都行 方式1: <insert id="insert" parameterType="com.user.model.User" > <selectKey resultType="java.lang.Integer" keyProperty="id" order="AFTER" >

mybatis sql返回多个参数

最近做项目的时候碰到一个问题,查询一个表单,返回多个字段和函数计算的值,对于mybatis来说返回类型就不好定义了,想了半天,查了很多的资料, 最后成功解决问题,下面详细介绍一下. 一 需求分析 计算当天所有的评价人数,评价分数,评价次数,表的结构如下: 二 实现 定义一个返回类: public class SellerAllEvalPo { private Integer totalScore; private Integer totalEval; private Integer totalP

PHP获取MySql新增记录ID值的3种方法

From: http://www.jb51.net/article/51473.htm 这篇文章主要介绍了PHP获取MySql新增记录ID值的3种方法,一般使用PHP自带函数mysql_insert_id() 即可实现,另2种方法权作特殊情况下使用,需要的朋友可以参考下 一.使用语句: 复制代码 代码如下: mysql_query("select max(id) from t1",$link); 使用此方法得到的是 id最大的值,确为最后一个值,但当多链接线程时,这个最大的id并不一定

Mysql批量插入返回Id错乱(原因分析)

在项目中经常会有如下场景: 往数据库中批量插入一批数据后,需要知道哪些插入成功,哪些插入失败了. 这时候往往会有两种思路,一个是在插入之前判断相同的记录是否存在,过滤掉重复的数据:另外一种就是边插入边判断,动态过滤. 第一种方式对于数据量过大的情况并不适用,为了采用第二种方法,我们使用了"Mybatis批量插入返回自增主键"的方式进行处理. mysql插入操作后返回主键是jdbc的功能,用到的方法是getGeneratedKeys()方法,使用此方法获取自增数据,性能良好,只需要一次交