复习电商笔记-18-商品描述代码实现和级联删除

 

 

*MySQL获取刚插入的自增长id的值

INSERT INTO TB_USER (id,username) VALUE(NULL,'a');
SELECT LAST_INSERT_ID();		#内部加锁实现,所以不会有并发的线程安全问题

 

 

新增

ItemDesc.java

package com.jt.manage.pojo;

import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Table;

@Table(name = "tb_item_desc")
public class ItemDesc extends BasePojo{
    
    @Id
    @Column(name = "item_id")
    private Long itemId;
    @Column(name = "item_desc")
    private String itemDesc;
    
    public Long getItemId() {
        return itemId;
    }
    public void setItemId(Long itemId) {
        this.itemId = itemId;
    }
    public String getItemDesc() {
        return itemDesc;
    }
    public void setItemDesc(String itemDesc) {
        this.itemDesc = itemDesc;
    }
    
    

}

ItemDescMapper.java

package com.jt.manage.mapper;

import com.jt.manage.mapper.base.mapper.SysMapper;
import com.jt.manage.pojo.ItemDesc;

public interface ItemDescMapper extends SysMapper<ItemDesc>{

}

ItemDescService.java

package com.jt.manage.service;
import org.springframework.stereotype.Service;

import com.jt.manage.pojo.ItemDesc;

@Service
public class ItemDescService extends BaseService<ItemDesc> {

}

修改ItemController.java

package com.jt.manage.controller;

import java.util.Date;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.jt.common.vo.SysResult;
import com.jt.manage.pojo.Item;
import com.jt.manage.service.ItemService;

/**
 * 商品相关的业务逻辑处理
 * 
 */
@RequestMapping("item")
@Controller
public class ItemController {

    private static final Logger log = LoggerFactory.getLogger(ItemController.class);

    @Autowired
    private ItemService itemService;

    //@ Autowired
    //private ItemDescService itemDescService;

    /**
     * 新增商品数据
     */
    @RequestMapping(value = "save", method = RequestMethod.POST)
    @ResponseBody
    public SysResult saveItem(Item item, @RequestParam("desc") String desc,
            @RequestParam("itemParams") String itemParams) {

        item.setCreated(new Date());
        item.setUpdated(item.getCreated());
 item.setStatus(1);
        if (item.getId() != null) {
        	log.warn("传入的商品数据中包含id数据! id = {}", item.getId());
        }
        item.setId(null);	// 安全方面考虑,强制设置id为null
        
        log.info("新增商品数据! title = {}, cid = {}", item.getTitle(), item.getCid());

        // 保存到数据库
        try {
            this.itemService.saveItem(item, desc);
        } catch (Exception e) {
            log.error("保存失败! title = " + item.getTitle(), e);
            // 返回错误状态
            return SysResult.build(500, "新增商品数据失败!");
        }

        if (log.isDebugEnabled()) {// 判断debug是否启用
            log.debug("商品添加成功! item = " + item);
        }

        return SysResult.ok();
    }


}

注意:

1)分表设计:纵向拆分,将大字段单独分表,这样充分保障主表的查询效率。

2)两个事务重构到一个事务中。将保存商品信息和商品的描述信息两个保存事务放到一个Service的方法中,从而变成一个事务。

3)事务嵌套:在ItemService中注入ItemDescService,利用Spring事务的传递,来保证它们使用一个事务。

 

 

修改

$.getJSON('/item/query/item/desc/'+data.id,function(_data){
	if(_data.status == 200){
		//UM.getEditor('itemeEditDescEditor').setContent(_data.data.itemDesc, false);
		itemEditEditor.html(_data.data.itemDesc);
	}
});

在ItemController中增加查询方法:

@RequestMapping(value = "query/item/desc/{itemId}", method = RequestMethod.GET)
@ResponseBody
public SysResult queryItemDescByItemId(@PathVariable("itemId") Long itemId) {
ItemDesc itemDesc = this.itemDescService.queryById(itemId);
	return SysResult.ok(itemDesc);
}

 

 

级联删除

mybatis是基于SQL的,无法按对象实现级联删除,只能自己手动去解决。

public void deleteItem(Long[] ids){
		//先删除从表,再删除主表;主外键一致调用更加方便
		itemDescMapper.deleteByIDS(ids);	
		itemMapper.deleteByIDS(ids);
	}

hibernate 级联删除,非常符合面向对象思想。

根本不考虑孙子之后关联,只考虑上下级即可;

使用hibernate映射文件,配置对象关联关系,只配置上级和下级。而使用mybatis就演化出几十种变化,而这种代码对业务丝毫没有帮助,纯手工劳动。从这里可以看出两个架构在设计层面,hibernate非常值得学习,但如果在项目中就性能而言,mybatis还是简单快速。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 滤波器级联指的是在一个信处理系统中,将多个滤波器连结在一起,依次进行信的滤波处理。Verilog是一种硬件描述语言,可以用于实现数字信处理系统中的滤波器级联。以下是实现滤波器级联的Verilog代码示例: module filter_cascade(input clk, input reset_n, input signed [15:0] data_in, output signed [15:0] data_out); // 定义滤波器的系数和状态变量 parameter coeff1 = 0.25; parameter coeff2 = 0.5; parameter coeff3 = 0.25; reg signed [15:0] state1 = 0; reg signed [15:0] state2 = 0; always @(posedge clk or negedge reset_n) begin if (~reset_n) begin // 复位状态变量 state1 <= 0; state2 <= 0; end else begin // 计算滤波器的输出 state1 <= (data_in * coeff1) + (state2 * coeff2) + (state1 * coeff3); state2 <= (state1 * coeff1) + (state2 * coeff2) + (data_in * coeff3); data_out <= state2; end end endmodule 上述Verilog代码实现了一个三阶Butterworth低通滤波器,由两个一阶滤波器和一个二阶滤波器级联组成。每个滤波器的输出作为下一个滤波器的输入,在时钟上升沿触发时完成滤波器的计算。在复位信reset_n为低电平时,状态变量会被清零,重新开始计算。通过这种方式实现滤波器级联,可以有效地对数字信进行滤波处理,提高信的质量和准确性。 ### 回答2: 滤波器级联是一种常用的数字信处理技术,在实际系统设计中也得到了广泛应用。Verilog作为一种硬件描述语言,可以用于设计数字信处理器件。 在Verilog中实现滤波器级联,可以采用模块化设计的思想,将每个滤波器模块作为一个独立的模块实现。通过将多个滤波器模块级联起来,就可以实现复杂的滤波器功能。 具体实现方式如下: 第一步,定义每个滤波器模块的输入输出端口。如下所示: module fir_filter ( input clk, input reset, input signed [15:0] in_data, output reg signed [15:0] out_data ); 第二步,实现每个滤波器模块的功能。这里以FIR滤波器为例,代码如下: always @(posedge clk) begin if (reset) out_data <= 0; else out_data <= in_data * c0 + delay1 * c1 + delay2 * c2 + delay3 * c3; delay3 <= delay2; delay2 <= delay1; delay1 <= in_data; end 其中,in_data是滤波器的输入数据,out_data是滤波器的输出数据。delay1、delay2、delay3是延迟线,用于存储历史输入数据。 第三步,将多个滤波器模块级联起来。这里以级联2个FIR滤波器为例,代码如下: fir_filter #(.SIZE(SIZE1), .COEFFS(COEFFS1)) fir1 ( .clk(clk), .reset(reset), .in_data(in_data), .out_data(sig1) ); fir_filter #(.SIZE(SIZE2), .COEFFS(COEFFS2)) fir2 ( .clk(clk), .reset(reset), .in_data(sig1), .out_data(out_data) ); 其中,fir1和fir2是两个FIR滤波器模块,sig1是fir1的输出,作为fir2的输入。 通过以上三步,就可以实现Verilog代码实现滤波器级联的功能了。需要注意的是,不同的滤波器模块需要设计不同的滤波器算法,并根据具体需求进行参数设置。同时,在级联多个滤波器模块的时候,需要考虑滤波器的延迟线对系统的影响,并进行适当的时序分析和优化。 ### 回答3: 滤波器级联是一种实现数字信处理中滤波器设计的方法。通过将多个滤波器级联,可以实现更复杂、更高阶的滤波器,提高信处理的效果。 在 Verilog 中实现滤波器级联可以通过模块化设计来完成。首先,需要编写一个单独的滤波器模块,该模块可以是低通滤波器、高通滤波器、带通滤波器等滤波器类型。滤波器模块需要包含输入信、输出信和滤波器系数等参数。 接下来,需要编写一个级联模块,该模块将多个滤波器模块连接起来,实现级联。级联模块需要定义每个滤波器的类型、参数和级联顺序。具体来说,可以通过组合各个滤波器模块的输入和输出信,来实现级联。 编写 Verilog 代码实现滤波器级联时需要注意以下几点。首先,需要确保每个滤波器模块的输入和输出信都能正确连接到级联模块中。其次,在级联模块中需要对每个滤波器模块进行初始化和参数设置。最后,需要提前设置好级联的顺序和滤波器的类型,确保级联后的滤波器能够达到预期的滤波效果。 总之,在 Verilog 中实现滤波器级联需要灵活运用模块化设计思想,并注意设置滤波器参数和级联顺序,才能成功地实现级联滤波器。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值