本周主要完成超市改价功能和改价记录查询接口的编写工作。
本项目中,数据库商品表的商品id被分为前七位和后六位,而数据库中改价记录表和其他与商品相关联的表所使用的的都是前七位和后六位拼接后的商品id。所以在对数据库进行操作之前,必须将从前端传递过来的完整id分割成前七位和后六位的形式。
在改价记录功能中,为了方便操作,除了创建了与数据库关联的实体类外,我还创建了一个存储前后端数据的非关联数据库实体类。
@Entity
@Table(name = "super_price_recoard")
@IdClass(Admin_SuperPriceRecord.class)
public class Admin_SuperPriceRecord implements Serializable {
@Id
@Column(name = "super_user_id")
private int super_user_id;
@Id
@Column(name = "super_goods_id")
private String super_goods_id;
private double super_goods_preprice;
private double super_goods_price;
@Id
@Column(name = "super_change_time")
private Timestamp super_change_time;
public String getSuper_goods_id() {
return super_goods_id;
}
public void setSuper_goods_id(String super_goods_id) {
this.super_goods_id = super_goods_id;
}
public double getSuper_goods_preprice() {
return super_goods_preprice;
}
public void setSuper_goods_preprice(double super_goods_preprice) {
this.super_goods_preprice = super_goods_preprice;
}
public double getSuper_goods_price() {
return super_goods_price;
}
public void setSuper_goods_price(double super_goods_price) {
this.super_goods_price = super_goods_price;
}
public Timestamp getSuper_change_time() {
return super_change_time;
}
public void setSuper_change_time(Timestamp super_change_time) {
this.super_change_time = super_change_time;
}
public int getSuper_user_id() {
return super_user_id;
}
public void setSuper_user_id(int super_user_id) {
this.super_user_id = super_user_id;
}
}
public class Admin_PriceRecord {
private String goods_id;
private String super_goods_name;
private double super_goods_preprice;
private double super_goods_price;
private Timestamp super_change_time;
public String getGoods_id() {
return goods_id;
}
public void setGoods_id(String goods_id) {
this.goods_id = goods_id;
}
public String getSuper_goods_name() {
return super_goods_name;
}
public void setSuper_goods_name(String super_goods_name) {
this.super_goods_name = super_goods_name;
}
public double getSuper_goods_preprice() {
return super_goods_preprice;
}
public void setSuper_goods_preprice(double super_goods_preprice) {
this.super_goods_preprice = super_goods_preprice;
}
public double getSuper_goods_price() {
return super_goods_price;
}
public void setSuper_goods_price(double super_goods_price) {
this.super_goods_price = super_goods_price;
}
public Timestamp getSuper_change_time() {
return super_change_time;
}
public void setSuper_change_time(Timestamp super_change_time) {
this.super_change_time = super_change_time;
}
}
在关联数据库的实体类中出现了多个主键的情况,所以在我最初编写的时候没有学习相关知识,出现了错误。最后通过查找相关的资料,知道了如何正确关联多个主键。方法如下:
1.在未编写构造器的情况下,在类前添加注释@IdClass(xxx.class)
2.使用Serializable接口
3.在每个主键前添加@Id注释
除此之外,还需要在Controller层进行数据的处理。
public Map findRecordByName(@RequestBody Object obj, HttpServletRequest request){
Map para = (Map) obj;
HttpSession session = request.getSession();
String super_user_name = (String) para.get("super_user_name");
int super_user_id = superUserDao.findSuperUserIdBySuperUserName(super_user_name);
List<Admin_SuperPriceRecord> list1 = super_price_recordDao.findSuperPriceRecordBySuperUserName(super_user_id);
List<Admin_SuperGoodsNum> list2 = admin_superGoodsNumDao.findAdmin_SuperGoodsNumByUserName(super_user_id);
List<Admin_PriceRecord> list = new ArrayList<>();
Map data = new HashMap();
Map namemap = new HashMap();
for (int i=0;i<list2.size();i++){
String str = list2.get(i).getSuper_goods_id()+list2.get(i).getSuper_goods_num_id();
String goodsname = list2.get(i).getSuper_goods_name();
if (!namemap.containsKey(str)){
namemap.put(str,goodsname);
}
}
for (int j=0;j<list1.size();j++){
Admin_PriceRecord admin_priceRecord = new Admin_PriceRecord();
admin_priceRecord.setGoods_id(list1.get(j).getSuper_goods_id());
admin_priceRecord.setSuper_goods_name((String) namemap.get(list1.get(j).getSuper_goods_id()));
admin_priceRecord.setSuper_goods_preprice(list1.get(j).getSuper_goods_preprice());
admin_priceRecord.setSuper_goods_price(list1.get(j).getSuper_goods_price());
admin_priceRecord.setSuper_change_time(list1.get(j).getSuper_change_time());
list.add(admin_priceRecord);
}
if (list!=null&&list.size()!=0){
data.put("records",list);
data.put("status","1");
data.put("message","查询成功");
}else {
data.put("status","-1");
data.put("message","没有找到记录");
}
data.put("sessionId",session.getId());
return data;
}