方法有很多,参考 mysql函数之六:mysql插入数据后返回自增ID的方法,last_insert_id(),selectkey
这里记录一下工作中自己用到的selectkey方法的详细过程。
pojo类:
1 public class Client { 2 /** 3 * 客户id 4 */ 5 @Id 6 private Integer id; 7 8 /** 9 * 客户名称 10 */ 11 private String name; 12 13 //其他的一些域自己补充,对应get/set方法也要添加 14 15 /** 16 * 获取客户id 17 * 18 * @return id - 客户id 19 */ 20 public Integer getId() { 21 return id; 22 } 23 24 /** 25 * 设置客户id 26 * 27 * @param id 客户id 28 */ 29 public void setId(Integer id) { 30 this.id = id; 31 } 32 33 /** 34 * 获取客户名称 35 * 36 * @return name - 客户名称 37 */ 38 public String getName() { 39 return name; 40 } 41 42 /** 43 * 设置客户名称 44 * 45 * @param name 客户名称 46 */ 47 public void setName(String name) { 48 this.name = name; 49 } 50 }
xml映射文件:
keyProperty设置为pojo类的ID域, order为BEFORE则在insert方法之前调用,AFTER则在insert方法之后调用
<insert id="insertSelective" parameterType="com.zhouyufan.client.pojo.Client"> <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer"> select LAST_INSERT_ID() </selectKey> insert into client <trim prefix="(" suffix=")" suffixOverrides=","> <if test="name != null and name != ''">name,</if> <if test="test1 != null">test1,</if> <if test="test2 != null">test2,</if> </trim> <trim prefix="values (" suffix=")" suffixOverrides=","> <if test="name != null and name != ''">#{name,jdbcType=VARCHAR},</if> <if test="test1 != null">#{test1,jdbcType=TINYINT},</if> <if test="test2 != null">#{test2,jdbcType=TINYINT},</if> </trim> </insert>
在Java方法中调用:
1 // count仍然为insert操作返回的结果 2 int count = clientMapperCustom.insertSelective(client); 3 // 自增主键在client的id域里,通过client.getId();获取自增主键 4 int autoClientid = client.getId();