mybatis新增返回主键

在一些管理系统项目中,对于一些特殊的业务必须要进行返回主键id,那么在mybatis框架中是如何返回主键id的呢?mybatis提供了不少操作sql语句的标签,其中包括了新增的标签,其返回与主键相关属性也是该标签提供的,与返回主键相关的属性如下:

属性描述
keyProperty(仅对insert和update有用)此属性的作用是将插入或更新操作时的返回值赋值给PO类的某个属性,通常会设置为主键对应的属性。 如果需要设置联主键,可以在多个值之间用逗号隔开
keyColumn(仅对insert和update有用)此属性用于设置第几列是主键,当主键列不是表中的第一列时需要设置。在需要主键联合时,值可以用逗号隔开
useGeneratedKeys(仅对insert叶和update有用)此属性会使MyBatis使用JDBC的getGeneratedKeys()方法来获取由数据库内部生产的主键,如MySQL相SQLServer等自动递增的字段,其默认值为false

执行插入操作后,很多时候我们会需要返回插入成功的数据生成的主键值,此时就可以通过上面所讲解的3个属性来实现。如果使用的数据库支持主键自动增长(如MySQL),那么可以通过keyProperty 属性指定pojo类的某个属性接收主键返回值( 通常会设置到id 属性上),然后将useGeneratedKeys的属
性值设置为true, 其使用示例如下。
在相关映射文件中新增一条sql语句,其中在标签中添加keyProperty属性和useGenerateKeys属性:

<!-- 新增角色列表 -->
	<insert id="addRoleList" parameterType="URole" 
	 keyProperty="id" useGeneratedKeys="true">
		INSERT INTO
		u_role(name,type)VALUES (#{name},#{type})
	</insert>

在测试代码中测试是否成功返回主键:

public ResultInfo addRoleList(URole uRole) throws CustomException {
		try {
			userRoleMapper.addRoleList(uRole);
			System.out.println(uRole.getId());
		} catch (Exception e) {
			throw new CustomException("新增失败");
		}
	return ResultInfo.setResultInfo(true, "新增成功");
	}

在这里插入图片描述
如果使用的数据库不支持主键自动增长(如Oracle),或者支持增长的数据库取消了主键自增的规则时,也可以使用MyBatis提供的另一种方式来自定义生成主键,具体配置示例如下。

<!-- 新增角色列表 -->
	<insert id="addRoleList" parameterType="URole">
	<selectKey keyProperty="id" keyColumn="id" resultType="long" order="BEFORE">
	  select if(max(id) is null,1,max(id)+1)as id from u_role
	</selectKey>
		INSERT INTO
		u_role(id,name,type)VALUES (#{id},#{name},#{type})
	</insert>

在执行上述示例代码时,元素会首先运行,它会通过自定义的语句来设置数据表中的主键(如果u_role表中没有记录,则将id设置为1 ,否则就将id 的最大值加1 ,来作为新的主键),然后再调用插入语句。
在这里插入图片描述
在上述元素的几个属性中,keyProperty属性为返回主键到哪个列, order属性可以被设置为BEFORE或AFTER。 如果设置为BEFORE,那么它会首先执行元素中的配置来设置主键,然后执行插入语句;如果设置为AFTER,那么它会先执行插入语句,然后执行元素中的配置内容。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值