mybatis 保存返回对象id

背景

在看前辈代码的时候,偶然发现一个奇怪的现象。
使用save 、saveOrUpdate保存对象后,在下面直接使用他的Id。

去网上找后发现,这个功能在mybatis的时候就有了(没用过)
而mybatis-plus 好像是默认支持返回主键id自增的情况

mybatis-plus

可以直接使用

iCustomerUserService.saveOrUpdate(customerUser);
iCustomerUserService.save(customerUser);
System.out.println(customerUser.getId());

mybatis设置

方式一

useGeneratedKeys=“true” 开启(默认时false) 允许jdbc自动生成主键 ,适用于主键自增
keyProperty=“id” 返回的值保存在对象的那个属性
然后就可以直接getId()

    <insert id="insert" useGeneratedKeys="true" keyProperty="id">

    </insert>

方式二

order = “AFTER” 是执行主sql之后赋值
order = “BEFORE” 是执行主sql之前赋值
keyProperty = “mId” 对象属性
可适用uuid 或者自己想要的对应数据


<insert id = "insert">

    <selectKey resultType = "integer" order = "AFTER" keyProperty = "mId" >
            select last_insert_id()    //写个sql去赋自己需要的值,这里是最后一个id
    </selectKey>

    insert into student(id,name) values(#{id},#{name})

</insert>

拓展

不仅可以反id,可以通过keyColumn反多个值,都是可以直接get到的


    <insert id="addCompany" parameterType="company"   >

        <selectKey resultType="record" order="BEFORE" keyProperty="companyName,scale" keyColumn="name,age">
            select name, age from record limit  1
        </selectKey>

        insert into company (company_name,scale,company_address,company_industry)
        values (#{companyName},#{scale},#{companyAddress},#{companyIndustry})
    </insert>
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Mybatis-Plus可以通过以下方式保存返回id: 1. 在实体类中使用注解@TableId(type = IdType.AUTO)来指定主键生成策略为自增长,然后调用insert方法保存实体对象保存成功后会自动将生成的id赋值给实体对象的主键属性。 2. 在Mapper接口中定义一个返回值为int类型的方法,方法名为insertAndGetId,方法参数为实体对象,然后在方法上使用注解@Insert,并设置useGeneratedKeys=true和keyProperty="id",这样保存成功后会自动将生成的id赋值给实体对象的主键属性,并返回id。 例如: 1. 在实体类中使用注解@TableId(type = IdType.AUTO): ``` @Data public class User { @TableId(type = IdType.AUTO) private Long id; private String name; private Integer age; } User user = new User(); user.setName("Tom"); user.setAge(18); userMapper.insert(user); Long id = user.getId(); ``` 2. 在Mapper接口中定义一个返回值为int类型的方法insertAndGetId: ``` public interface UserMapper extends BaseMapper<User> { @Insert(useGeneratedKeys = true, keyProperty = "id") int insertAndGetId(User user); } User user = new User(); user.setName("Tom"); user.setAge(18); userMapper.insertAndGetId(user); Long id = user.getId(); ``` ### 回答2: Mybatis-plus是一种优秀的基于Mybatis的增强工具,可以帮助我们更快更方便地操作关系型数据库。在使用Mybatis-plus进行数据操作时,有时会遇到需要同时保存返回数据id的情况,下面我们来看一下如何使用Mybatis-plus来实现这一目的。 1.首先,我们需要在实体类中使用``@TableId``注解来标明主键字段,同时指定主键生成策略。例如: ```java @Data public class User { @TableId(type= IdType.AUTO) private Long id; private String name; private Integer age; } ``` 上面的代码中,我们使用了``@TableId``注解来标明了主键字段,并指定了主键生成策略为自增长。 2.然后,我们可以使用Mybatis-plus提供的``insert``方法来插入数据,并返回主键。我们可以通过在``insert``方法中传入插入的实体对象来实现这一操作。例如: ```java User user = new User(); user.setName("xiaoming"); user.setAge(18); int result = userMapper.insert(user); Long id = user.getId(); ``` 上面的代码中,我们首先创建了一个实体对象``user``,并设置了其``name``和``age``字段的值。然后,我们调用了``userMapper``的``insert``方法,将实体对象插入到数据库中,并返回插入结果。最后,我们通过``user.getId()``来获取插入后的主键。 需要注意的是,在使用``insert``方法时,如果实体类中的主键字段的值非空,则会将该值作为主键插入到数据库中;否则,会根据指定的主键生成策略来生成主键,并将其插入到数据库中。因此,在使用``insert``方法时,我们只需要设置实体对象的非主键字段的值即可。 综上所述,使用Mybatis-plus保存返回id的方法比较简单。我们只需要在实体类中使用``@TableId``注解来标明主键字段,并指定主键生成策略,然后使用``insert``方法来插入数据,即可同时保存返回数据id。 ### 回答3: Mybatis-plus是一款优秀的ORM框架,它在Mybatis的基础上做了很多优化,简化了一些操作,使得我们的代码更加简洁易懂。在使用mybatis-plus插入数据时,我们需要先建立mapper接口,然后在接口中定义插入数据的方法,接着就可以通过调用这个方法来向数据库中插入数据了。下面我们来讲一下如何在插入数据的同时保存返回idMybatis-plus插入操作可以分为两种,一种是使用save方法插入数据,另一种是使用insert方法插入数据。其中,save方法是mybatis-plus提供的一个通用方法,它既可以插入数据也可以更新数据。我们使用save方法插入数据时,需要在实体类中定义一个自增主键的字段,然后在插入数据时将这个字段置为null,mybatis-plus会自动为我们生成一个唯一的主键值。 例如,我们有一个User实体类,其中包含id、name、age和email四个属性: ``` public class User { private Long id; private String name; private Integer age; private String email; } ``` 我们在mapper接口中添加一个saveUser方法: ``` public interface UserMapper extends BaseMapper<User> { int saveUser(User user); } ``` 在实现类中,我们可以这样写: ``` @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public Long saveUser(User user) { user.setId(null); // 将自增主键置为null userMapper.insert(user); return user.getId(); // 返回自增主键值 } } ``` 在插入数据时,我们将id属性置为null,mybatis-plus会自动为我们生成一个自增主键值并保存到实体类中。接着我们就可以使用实体类的getId方法获取该自增主键值并返回了。 需要注意的是,如果我们使用insert方法插入数据,就不能自动生成自增主键值了,需要手动将自增主键值设置到实体类中。我们可以在insert方法中添加一个Options参数, ``` InsertOptions options = new InsertOptions(); options.setReturnGeneratedKeys(true); ``` 然后将这个参数传入到insert方法中,这样就可以让mybatis-plus自动返回我们插入的自增主键值了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值