欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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>
相关标签: Java专栏