mapper.xml中的useGeneratedKeys和keyProperty属性的作用

  • Post author:
  • Post category:其他


useGeneratedKeys和keyProperty关键字

最近在写电商项目,写到地址管理模块的时候,遇到一个需求:添加地址时,添加地址成功之后给前端返回一个

id

方便给前端查询和测试,接下来就要用到mapper.xml中的

useGeneratedKeys



keyProperty

的两个属性。

Mybatis在插入的时候,需要获取自增主键,这时候就在mapper.xml的中将useGeneratedKeys和keyProperty,其中keyProperty对应的是Java对象的属性名,useGeneratedKeys的作用是允许 JDBC 支持自动生成主键,需要驱动支持。 如果设置为 true 则这个设置强制使用自动生成主键,尽管一些驱动不能支持但仍可正常工作(比如 Derby)如:

 <insert id="insert" parameterType="com.mmall.domain.Shipping" useGeneratedKeys="true" keyProperty="id">
    insert into mmall_shipping (id, user_id, receiver_name, 
      receiver_phone, receiver_mobile, receiver_province, 
      receiver_city, receiver_district, receiver_address, 
      receiver_zip, create_time, update_time
      )
    values (#{id,jdbcType=INTEGER}, #{userId,jdbcType=INTEGER}, #{receiverName,jdbcType=VARCHAR}, 
      #{receiverPhone,jdbcType=VARCHAR}, #{receiverMobile,jdbcType=VARCHAR}, #{receiverProvince,jdbcType=VARCHAR}, 
      #{receiverCity,jdbcType=VARCHAR}, #{receiverDistrict,jdbcType=VARCHAR}, #{receiverAddress,jdbcType=VARCHAR}, 
      #{receiverZip,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP}
      )
  </insert>

Mybatis执行完插入语句后,自动将自增长值赋值给对象Shipping的属性id,我们可以通过shipping.getId()方法获取,然后传回给前端:

@Service
public class ShippingServiceImpl {

    @Autowired
    private ShippingMapper shippingMapper;

    public ServerResponse add(Integer userId,Shipping shipping){
        shipping.setUserId(userId);
        int rowCount = shippingMapper.insert(shipping);
        if (rowCount>0){//我们与前端的约定是一旦地址添加成功返回一个shippingId给前端,
            Map result = Maps.newHashMap();
            result.put("shippingId",shipping.getId());
            return ServerResponse.createBySuccess("新增地址成功",result);
        }
        return ServerResponse.createBySuccess("新增地址失败");
    }
}



版权声明:本文为weixin_40936211原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。