mybatis返回主键ID(自增和非自增)的两种方式
一.mapper映射文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.mybatis.mapper.TableNameMapper"> <!-- 插入数据并返回自增ID 有自增ID功能数据库可以采用useGeneratedKeys="true"开启判断是否是自增ID keyProperty="id" 指定插入数据后自增ID返回时赋值给实体类的那个属性(这里是id属性) --> <insert id="insertData" parameterType="java.util.HashMap" useGeneratedKeys="true" keyProperty="id"> insert into tableName values(null,#{name}) </insert> <!-- 非自增主键 像Oracle数据库采用序列来作为自增主键,通过 selectKey子来获取主键值 MySQL同样适用(只是order属性处为after, 因为mysql自增完ID后才返回ID值) --> <insert id="insertDataAgain"> <!-- selectKey中resultType属性指定期望主键的返回的数据类型, keyProperty属性指定实体类对象接收该主键的字段名 order属性指定执行查询主键值SQL语句是在插入语句执行之前还是之后(可取值:after和before) --> <!-- oracle --> <selectKey resultType="integer" keyProperty="id" order="BEFORE"> SELECT LAST_INSERT_ID() </selectKey> <!-- <selectKey resultType="integer" keyProperty="id" order="AFTER"> SELECT id from tableName order by id desc limit 1 </selectKey> --> insert into tableName values(null,#{name}) </insert> </mapper>
注: ORACLE返回主键最好是在插入SQL执行之前执行,也就是order属性值设置为before
二.mapper接口
public interface TableNameMapper { //插入数据 public Integer insertData(Map<String, Object> map); //插入数据 public Integer insertDataAgain(Map<String, Object> map); }
三.如何取到ID
当数据添加成功之后,你打印接口中传入的map,会发现里面多了一个id属性,且值和数据库自增的id是一模一样的,这就是ID返回的实现
作者:皓月无边*半步青莲
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。