在数据库中主键的值是通过自动递增的方式创建的,然而在通过mybatis插入数据之后想获取插入数据的主键值可以通过下面两种方法:
方法一:
在xml的配置文件中的insert标签中加入<selectKey>
标签
<insert id="insert">
<selectKey keyProperty="id" resultType="int" order="AFTER">
select LAST_INSERT_ID()
</selectKey>
insert into t_student(uname,pass,stu_name,gender,birthdate,score)
values(#{uname},#{pass},#{stu_name},#{gender},#{birthdate},#{score})
</insert>
public static void doInsert() {
SqlSession sqlSession = MybatisUtil.getSqlSession();
Student s = new Student();
s.setBirthdate("2020-01-01");
s.setGender('1');
s.setPass("123");
s.setScore(69.3);
s.setStu_name("张四");
s.setUname("jack");
int i = sqlSession.insert("student.insert",s);
System.out.println("i="+i);
System.out.println("新插入的学生的id为:"+s.getId());
sqlSession.commit();
sqlSession.close();
}
注意:
selectKey标签中的 select LAST_INSERT_ID() 语句就能获取生成的主键
selectKey标签中的keyProperty属性就是主键名,MyBatis会自动将获取的主键封装给此属性。
order的值有两种:BEFORE、AFTER
BEFORE:先获取主键,然后执行insert; 比如 Oracle数据库。
AFTER:先执行insert,然后获取主键; 比如 MySql数据库。
方法二:
在select标签中加入useGeneratedKeys=“true” keyProperty=“id”
<insert id="insert2" useGeneratedKeys="true" keyProperty="id">
insert into t_student(uname,pass,stu_name,gender,birthdate,score)
values(#{uname},#{pass},#{stu_name},#{gender},#{birthdate},#{score})
</insert>