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 版权协议,转载请附上原文出处链接和本声明。