1. XML方案
1 . MyBatis在各个实体类对应的 mapper.xml文件中加入 这句 :useGeneratedKeys="true" keyProperty="ID"
注意: keyProperty="数据库中的主键字段名对应的实体类字段名" ;【填实体类字段名】
<insert id="insertSelective" parameterType="com.yc.Student"
useGeneratedKeys="true" keyProperty="sid">
2. 加 SELECT LAST_INSERT_ID()
<insert id="saveUser" parameterType="com.yc.Student">
<selectKey keyColumn="id" keyProperty="id" order="AFTER"
resultType="int">
SELECT LAST_INSERT_ID()
</selectKey>
INSERT INTO `student`
(username) VALUES
(#{username})
</insert>
3. 不适用自增ID ,使用UUID做主键 加 SELECT uuid()
<insert id="saveUser1" parameterType="com.yc.Student">
<selectKey keyColumn="uuid" keyProperty="uuid" order="BEFORE"
resultType="string">
SELECT uuid()
</selectKey>
INSERT INTO `student`
(username) VALUES
(#{username})
</insert>
二. 注解
1. 自增主键用法:
@Data // lombok 注解,节省getter, setter
@Table(name = "pic")
public class Pic {
@Id // JPA注解,指定此属性为表中的主键
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id; //注意: 对应的数据表中的字段名叫 book_id
private String path;
private String description;
}
2. 序列主键用法(适用Oracle):
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY,Generator = "select SEQ_ID.nextval from dual" )
private Integer id;
以下是输出 的日志:
20:25:34.724 [main] DEBUG org.mybatis.spring.transaction.SpringManagedTransaction - JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@687a762c] will be managed by Spring
20:25:34.730 [main] DEBUG com.yc.piclib.dao.impl.PicMapper.insert - ==> Preparing: INSERT INTO pic ( id,path,description ) VALUES( ?,?,? )
20:25:34.761 [main] DEBUG com.yc.piclib.dao.impl.PicMapper.insert - ==> Parameters: null, new pic4534(String), very very good(String)
20:25:34.763 [main] DEBUG com.yc.piclib.dao.impl.PicMapper.insert - <== Updates: 1
20:25:34.812 [main] DEBUG com.yc.piclib.dao.impl.PicMapper.insert!selectKey - ==> Executing: SELECT LAST_INSERT_ID()
20:25:34.840 [main] DEBUG com.yc.piclib.dao.impl.PicMapper.insert!selectKey - <== Total: 1