springboot往数据库存json并且取json
我也不知道是不是自己设置的数据类型
这个过程太痛苦了 已经不知道该不该记录了。
保存数据到数据库存的形式是varchar 取出来不能原样取了,只能是string然后还要自己处理数据整合成map才可以
这里是以list的形式存数据 在数据库中设置json但是varchar也是可以的
/**
* 用户点击确定后把购物车的内容存放到sql
* @param jsonArray
* @param request
* @return
*/
@PostMapping("/GenerateTable")
public Result GenerateTable(@RequestBody JSONArray jsonArray,HttpServletRequest request){
Long userId = AuthContextHolder.getUserId(request);
advancePaymentService.insert(jsonArray,userId);
return Result.ok();
}
其中模板类需要加入注解如:
@Data
@ApiModel(value = "商品信息")
@TableName("advance_payment")
public class AdvancePayment extends BaseEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "商品价格")
@TableField("price")
private Integer price;
@ApiModelProperty(value = "商品名称")
@TableField("userId")
private long userId;
@TableField(typeHandler = FastjsonTypeHandler.class,value = "join_cart_id")
private List<Integer> joinCartId;
@TableField(typeHandler = FastjsonTypeHandler.class,value = "detail")
private List<HashMap<String,Object>> detail;
@TableField("payId")
private long payId;
}
但是拿取数据的时候会以string返回(求解答怎么从sql中拿到json数据并且以list的形式存放)
@Override
public List<AdvancePaymentVo> getPageList(OrderQueryVo orderQueryVo) {
Integer commodityId = orderQueryVo.getCommodityId();
String isPay = orderQueryVo.getIsPay();
String commodityName = null;
String pay = null;
String noPay = null;
if (!StringUtils.isEmpty(isPay)){
if ("已支付".equals(isPay)){
pay = "0";
//如果未支付 那么pay=-1 已支付则pay=0
orderQueryVo.setPay(pay);
}else {
noPay = "0";
orderQueryVo.setNoPay(noPay);
}
}
if (!StringUtils.isEmpty(commodityId)){
commodityName = commodityService.getById(commodityId).getName();
orderQueryVo.setCommodityName(commodityName);
}
//调用mapper的方法
List<AdvancePaymentVo> aList = advancePaymentMapper.selectAll(orderQueryVo);
aList.stream().forEach(itemVo->{
//条件查询完毕整理数据
String detail = itemVo.getDetail();
List<Map> arrayList = new ArrayList<>();
String[] numberList = detail.substring(0,detail.length()-2).replace("\"","").split("},");
Arrays.stream(numberList).forEach(list->{
String[] split = list.split(",");
HashMap<String, String> map = new HashMap<>();
String name = split[0].split(":")[1];
String price = split[1].split(":")[1];
String types = split[2].split(":")[1];
String number = split[3].split(":")[1];
String cart = split[4].split(":")[1];
map.put("name",name);
map.put("price",price);
map.put("types",types);
map.put("number",number);
map.put("cart",cart);
arrayList.add(map);
itemVo.setParam(arrayList);
long payId = itemVo.getPayId();
if (payId==0){
itemVo.setPayStatus("未支付");
}else {
itemVo.setPayStatus("已支付");
}
});
});
return aList ;
}