mybatis 插入操作主键值获取
程序员文章站
2024-03-20 12:07:58
...
当前表支持主键自动增长
在JDBC技术中,可以通过Statement接口中getGeneratedKeys()方法获得本次插入后得到自动增长主键值.MyBatis框架也采用这个技术.因此MyBatis在插入完毕后也可以获得本次插入数据id.
做法如下
<?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="Dept">
<!-- useGeneratedKeys="true"
表示Mybatis可以通过getGeneratedKeys方法获得
本次自动增长的值
keyProperty="deptNo"
表示Mybatis将获得自动增长值给当前实体类对象哪个属性
比如
Dept dept = new Dept();
session.insert("insert",dept);
那个,在插入完毕后,dept.deptNo将会出现本次插入的id值
-->
<insert id="insertDept" parameterType="Dept" useGeneratedKeys="true" keyProperty="deptNo">
insert into dept (dname,loc)
values(#{dname}, #{loc})
</insert>
</mapper>
当前表不支持主键自动增长
在Mysql数据库中,可以通过max函数获得当前表中最后一条插入数据id.在MyBatis中,也可以通过这种方式来获得主键值
做法如下
<?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="Dept">
<!-- selectKey标签:
用于声明查询 当前表主键值的SQL语句
KeyProperty="deptNo"
表示将查询结果赋值给当前实体类对象中deptNo属性
resultType="Integer"
表示将查询结果转换为Integer类型
order="BEFORE"
表示当前查询语句要在insert语句之前执行
-->
<insert id="insertDept" parameterType="Dept">
<selectKey resultType="Integer" keyProperty="deptNo" order="BEFORE">
select max(deptNo)+1 from dept
</selectKey>
insert into dept (deptNo,dname,loc)
values(#{deptNo}, #{dname}, #{loc})
</insert>
</mapper>