组合关系&采购单&easyUI日历插件

探讨JPA中组合关系的配置与级联操作,分析采购订单模型的设计,包括字段含义、类型选择及与供应商、员工等实体的关联。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

组合关系:就是强聚合,双向的多对一、一对多,他们之间是不能分割的。
在JPA中组合关系的配置:级联,级联要么不配,要么就配置最强的:all+孤儿删除
在单据的地方可配置级联+孤儿删除
UML,如果是实心的菱形,就是组合关系,如果是空心的菱形就是聚合关系。
要想整体和部分不可分割,代码就要配置级联。
一对多,性能超级差
双向一对多的话,就要让一方放弃关系维护,才能提高性能。
组合关系-采购订单模型
分析表字段:
1、每个字段的意思
2、这个字段的类型(为什么要用这个类型)
3、字段是否可以为空
4、这个字段的值应该从哪里来
配置采购单关系

private Date vdate;
    
    private BigDecimal totalamount;
    
    private BigDecimal totalnum;
    
    private Date inputtime=new Date();
    
    private Date auditortime;
//  状态
    private Integer status=0;

//   与 供应商的表关系
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "supplier_id")
    private Supplier supplier;
//    与审核人的关系
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "auditor_id")
    private Employee auditor;
//    与录入员的关系
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "inputUser_id")
    private Employee inputuser;
//    与采购员的关系
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "buyer_id")
    private Employee buyer;

//    一般组合关系使用list
    @OneToMany(cascade = CascadeType.ALL,mappedBy = "bill",fetch = FetchType.LAZY,orphanRemoval = true)
    private List<Purchasebillitem> items=new ArrayList<>();
配置采购详单关系
  private BigDecimal price;
    
    private BigDecimal num;
    
    private BigDecimal amount;
    
    private String descs;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "product_id")
    private Product product;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "bill_id")
//    表示不用理他
    @JsonIgnore
    private Purchasebill bill;

purchasebill.jsp
表格部分

<tr>

    <th data-options="field:'vdate',width:100">交易时间</th>

    <th data-options="field:'totalamount',width:100">总金额</th>

    <th data-options="field:'totalnum',width:100">总数量</th>

    <th data-options="field:'inputtime',width:100">录入时间</th>

    <th data-options="field:'supplier',width:100,formatter:formatName">供应商</th>

    <th data-options="field:'auditor',width:100,formatter:formatName">审核人</th>

    <th data-options="field:'inputuser',width:100,formatter:formatName">录入人</th>

    <th data-options="field:'buyer',width:100,formatter:formatName">采购员</th>
    <th data-options="field:'status',width:100,formatter:formatStatus">状态</th>

</tr>

高级查询部分

<div>
    <form id="searchForm">
        交易时间:
        <input name="beginDate" class="easyui-datebox" style="width:120px"/>--
        <input name="endDate" class="easyui-datebox" style="width:120px"/>
        状态:
        <select  class="easyui-combobox" panelHeight="auto" name="status" style="width:120px;">
            <option value="">--请选择--</option>
            <option value="0">待审核</option>
            <option value="1">已审核</option>
            <option value="-1">已废除</option>
        </select>
        <a href="javascript:;" data-method="search" class="easyui-linkbutton" iconCls="icon-search">查询</a>
    </form>
</div>

使前台显示的交易时间为我们定义的格式
我们用一个easyUI的日历插件来获取时间,设置日期格式,加上东八区

//添加下面的注解,进行时间配置,使前台显示的交易时间为我们定义的格式
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    public Date getVdate() {
        return vdate;
    }

提醒自己:jsp表格里面的field必须和domain里面配置的字段一样
做高级查询
后台接受前台的数据
PurchasebillQuery,get/set,

private String name;
// 查询的开始时间
private Date beginDate;
// 查询的结束时间
private Date endDate;
// 状态
private Integer status;

//这里帮我们直接返回Specification这个对象
//StringUtils.isNotBlank(stru):不为空且不是空字符串

// ge:大于等于,le:小于等于,lt:小于
@Override
public Specification createSpec(){
// 想在采购单管理表里面的高级查询里面,选择查询一天之内任何时间的数据,lang3给我们提供了这个方法
// 先在结束时间上加一天
Date addDays=null;
if(endDate!=null){
addDays = DateUtils.addDays(endDate, 1);
}
Specification spec = Specifications.and()
.like(StringUtils.isNotBlank(name),“name”, “%”+name+"%")
.ge(beginDate!=null,“vdate” ,beginDate )
// 为了能够实现可以查询一天内的所有数据,下面还要将上面加1的字段写入
.lt(endDate!=null,“vdate” ,addDays )
.eq(status!=null,“status”,status)
.build();
return spec;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public Date getBeginDate() {
    return beginDate;
}

// 在SpringMVC里面,要想接收一个日期参数,需要在set上面加上一个下面的注解,并配置格式
@DateTimeFormat(pattern = “yyyy-MM-dd”)
public void setBeginDate(Date beginDate) {
this.beginDate = beginDate;
}

public Date getEndDate() {
    return endDate;
}
//   在SpringMVC里面,要想接收一个日期参数,需要在set上面加上一个下面的注解,并配置格式
@DateTimeFormat(pattern = "yyyy-MM-dd")
public void setEndDate(Date endDate) {
    this.endDate = endDate;
}

public Integer getStatus() {
    return status;
}

public void setStatus(Integer status) {
    this.status = status;
}

}

小知识:400错误,表示参数类型出错。
SpringMVC接受日期参数
在SpringMVC里面,如果想要接受一个日期参数,要set上面加一个下面的注解@DateTimeFormat

在这里插入图片描述
后台的数据传到前台
在这里插入图片描述
在做高级查询的时候,时间选择我们使用日历,直接将class改成下图所示就可以了
在这里插入图片描述
设计高级查询
在设计高级查询的时候,做一个下拉框,在后台写死

交易时间: -- 状态: --请选择-- 待审核 已审核 已废除 查询

调节下拉框的长度(panelHeight)
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值