MyBatis中mysql 插入数据并返回自增主键和非自增主键的方式

MyBatis中mysql 插入数据并返回自增主键和非自增主键的方式

MyBatis的insert操作,如何在插入数据的同时返回主键呢?分为两种情况,一种情况是该主键是自增主键,另一种情况是该主键非自增,接下来对两种情况详细解释。

mysql支持自增主键,而Oracle不支持自增主键,在JDBC中可以使用getGeneratedKeys()方法获得自增主键。

获取自增主键的值
  • CompetitionMapper.java中的接口
int createCompetition(Competition competition);
  • CompetitionMapper.xml中的xml写法
<insert id="createCompetition" useGeneratedKeys="true" parameterType="com.ebusiness.reviewer.model.Competition" keyProperty="id">
  insert into 
  	competition  
  		(id,c_name,start_time,end_time,create_time)
  values 
  	(default ,#{cname},#{startTime},#{endTime},NOW()})
</insert>

以上使用useGeneratedKeys="true"表示使用自增主键获取策略,keyProperty指定对应的主键属性,也就是MyBatis获取到主键以后,将这个值封装给javaBean的哪个属性。

  • CompetitionService.java中调用CompetitionMapper.java中createCompetition方法以及接收自增主键的写法。
//competitionMapper是注入到容器中的CompetitionMapper对象,competition是传入的对象
competitionMapper.createCompetition(competition);
//id 就是自增主键
int id = competition.getId();
获取非自增主键的方法
 <insert id="createCompetition" parameterType="com.ebusiness.reviewer.model.Competition">
	<selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">
		SELECT uuid()
	</selectKey>
	insert into 
		competition  
			(id,c_name,start_time,end_time,create_time)
	values 
		(#{id},#{cname},#{startTime},#{endTime},NOW())
</insert>

keyProperty:将查询出的主键设置到parameterType中的哪个属性上
order:相对于sql语句的执行顺序,BEFORE代表是在插入之前查询主键
resultType:指定返回值类型

  • selectKey标签中查询非自增主键的值,然后赋值给insert中要插入的主键的值。

  • 数据库debug模式打印日志
    在这里插入图片描述

  • 调用完方法接收非递增主键
    在这里插入图片描述

  • 控制台打印日志
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43941676/article/details/108699020