在做前后端分离的时候,我们平常接收前端的数据存入数据库时,一般参数都是实体类对象,
那么前端传送过来一个数组,我们数据库中没有该字段,该如和把数组中的内容添加到数据库呢?
操作如下:
我们在需要添加数据的实体类中声明一个假字段
Coupon实体类
// 注解是MP里的,表示该字段不属于数据库字段
// 需要给字段声明Get/Set/toString
@TableField(exist = false)
private String userIds;
看一下Web层的接口需要传入哪些参数
CouponController
coupon对象中有一个userIds数组参数,里面的内容需要存入到UserCoupon表里
/**
* 接收数组
* @param coupon
* @return DataResult
*/
@PostMapping("/add")
public DataResult insertCoupon(@RequestBody Coupon coupon){
return couponService.add(coupon);
}
可以看到是一个Coupon实体类的对象,我们的userIds是包含在Coupon对象中的一个数组,需要将数组中的内容转为key,value格式,接下来就在业务层处理数组转换,
注意:UserCoupon是另一张表的实体,数组中有UserCoupon中的对应参数
ServiceImpl
@Override
public DataResult add(Coupon coupon) {
int result = couponMapper.insert(coupon);
if (result != 0) {
if ("指定用户".equals(coupon.getCouUser())){
//获取到用户id串
String userIds = coupon.getUserIds();
//将userIds里的内容转为对象的一个集合
List<WycUserCoupon> list = JSONArray.parseArray(userIds, WycUserCoupon.class);
for (WycUserCoupon userCoupon : list) {
userCoupon.setCouId(coupon.getId());
userCoupon.setUserCouName(coupon.getCouName());
}
wycUserCouponMapper.designatedUsersToReceiveCoupons(list);
}
return DataResult.success("操作成功");
}
return DataResult.success("操作失败");
}
然后我们对list进行for循环,依次添加到数据库里
designatedUsersToReceiveCoupons这个方法是在XML中定义的批量插入操作
<!--批量插入-->
<insert id="designatedUsersToReceiveCoupons">
INSERT INTO wyc_user_coupon
(
user_id,
user_name)
VALUES
<foreach collection="list" item="item" separator=",">
(
#{item.userName}
)
</foreach>
</insert>
最后来进行测试:我是在ApiFox中进行的测试,数据的结构是下面的内容,userIds是数组格式
{
"id": 151,
"userIds": [
{
"userId": 2,
"userName": "蔡徐坤"
},{
"userId": 2,
"userName": "李亚痿"
}
]
}
最后测试运行就可以添加到数据库里。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/48515.html