首先MySQL可以通过 SELECT LAST_INSERT_ID()
来获取最新插入记录的主键值。
那么在MyBatis中如何使用呢?
示例如下:
- 方法一
<insert id="insert" parameterType="****" >
<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id">
<!-- 注意这里的keyProperty值是实体类中的主键属性名 -->
SELECT LAST_INSERT_ID()
</selectKey>
INSERT INTO table_name(*,*,*) VALUES(#{?},#{?},#{?})
</insert>
AFTER是在执行插入语句之后再执行selectKey。BEFORE是先选择主键,设置keyProperty的值然后执行插入语句。
- 这里提供第二种方法:
<insert id="insert" useGeneratedKeys="true" keyProperty="id" parameterType="***">
INSERT INTO table_name(*,*,*) VALUES(#{?},#{?},#{?})
</insert>
获取插入的主键
那么如何获取到新插入的主键值呢?可以通过实体类中的getId()方法。
来个案例吧😁
- 实体类
package com.music.pojo;
public class Song {
private int id;
private String songName;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getSongName() {
return songName;
}
public void setSongName(String songName) {
this.songName = songName;
}
@Override
public String toString() {
return "Song [id=" + id + ", songName=" + songName + "]";
}
public Song() {
super();
}
public Song(int id, String songName, String singer) {
super();
this.id = id;
this.songName = songName;
}
}
- SongService.java
public int save(Song song) {
int result = songMapper.savaSong(song);
System.out.println("save-result: "+result); //这里输出的是执行成功的受影响行数
if(result >= 1) {
return song.getId(); //这里返回的就是插入成功返回的主键值了
}
return result;
}
- SongMapper.xml
<insert id="savaSong" parameterType="song" >
<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id">
SELECT LAST_INSERT_ID()
</selectKey>
insert into song(song,singer,time,url) values(#{songName},#{singer},#{time},#{url})
</insert>