参考coupon开发cardcoupon-3

实现内容
这里写图片描述
删除选中的卡券

到处都是地雷
1. 删除不是实际的删除,而是修改卡券表的卡券状态,同时将删除的操作记录到卡券日志表中
2. 日志表比卡券表多两个字段:log_id和oper_type;log_id通过oracle的sequence获取唯一的值,oper_type是枚举值,相同的字段要通过set和get方法。
3. “删除”的操作复用update的sql,不要我写;log_id的获取通过工程已经写好的sequence,不要我写,Log对象实例和卡券对象实例相同的属性通过工具类方法,不要我写。
这里写图片描述
我本来想这样写的,但是可读性语义代码原则之一:15行的小方法轻舞飞扬,然后这26的字段,我调用的26次set和get方法;所以我自己设想在sql中实现取出卡券列表的值,再插入到log表中,问题就来了,log表多了两个字段,insert into log_table select * from cardcoupon_table 这种形式就没法用,再想能不能把 log_id,oper_type和 cardcoupon_table的字段连接起来,union all连接的是多个表中读取到的具有相同属性的列的连接,将多表查询的结果一并输出,join可以连接属性,但是两表连接必须有个属性是相同。然后我就问了大佬,工程里的解决方案是:
1. TfFCardcouponsLog tfFCardcouponsLog = BeanUtils.convertBean(tfFCardcoupon,TfFCardcouponsLog.class); 通过这个方法将卡券实例的值赋给 tfFCardcouponsLog 24行的set和get就变成了一行
2. tfFCardcouponsLog.setLogId(tfFCardcouponsMapper.getSeqNextValue()); 查数据库得到序列set给log实例
3. tfFCardcouponsLog.setOperType("1"); 设置本次操作的枚举类型
4. tfFCardcouponsLogMapper.insert(tfFCardcouponsLog); 插入数据。

学习:

1.oracle的sequence定义和获取
CREATE SEQUENCE CARD_COUPON_LOG_ID --为卡券操作历史表建立log_id
INCREMENT BY 1 --每次增加1
START WITH 24  --自定义从24开始,因为表中数据最小为23
NOMAXVALUE --不设置最大值
NOCYCLE  --一直累加不循环
CACHE 10  --每次去10个序列之放到缓存

oracle sequence参考博客
insert语句的三种写法

SELECT CARD_COUPON_LOG_ID.NEXTVAL FROM DUAL---首次使用
SELECT CARD_COUPON_LOG_ID.CURRVAL FROM DUAL---返回当前的值,如果创建sequence,但是没有执行nextval就执行currval会报错
2.用JQuery获取选中的checkBox,通过ajax传入数组发起请求,需要在ajax中设置属性:traditional:true
/**
 * 删除选中的卡券
 */
 function deletecardCoupons() {
     var chkboxGroup = $("[name='group']").filter(":checked");
     var cardIdGrp = new Array();
     for(var i = 0 ; i<chkboxGroup.length;i++){
         cardIdGrp.push(chkboxGroup[i].id);
     }
     confirmx('您确定删除吗?',function(){
        $.ajx({
            url:basePath+"deletecardCoupons",
            data:{cardIdGrp:cardIdGrp},
            dataType:json,
            traditional:true,//如果没有这个
            success:function(data){
                alertx(data.message);//显示提示
                $('#searchForm').submit();//刷新页面
            }
      });
    });
}

这里写图片描述
1. 发起的请求group后面有个[],servlet就无法取到数据了。
2. 返回结果后重新提交表单,就会刷新整个页面
checkbox注册事件

3.参考coupon开发cardcoupon-1的问题:不同按钮的不同操作,href没懂是怎么发起请求的,但是onclick是通过js发起了ajax请求,之前都没看到优惠券里面的js文件。

不同按钮的不同操作

按钮操作
修改带参数向servlet提交请求 href="updateCouponInit?couponBatchId=${couponBatch.couponBatchId}" RequestMapping(value = "updateCouponInit")
删除向servlet提交请求 onclick="deleteCouponBatch('${couponBatch.couponBatchId}')" @RequestMapping("deleteCouponBatch") 注解 public Object deleteCouponBatch(HttpServletRequest request, HttpServletResponse response, Model model,Long couponBatchId) 传参数

遗留问题
1.通过Spring,发起的请求参数可以放到
这里写图片描述
当做参数
但是一般的javaweb工程就只能使用request.getParameter
这里写图片描述
所以要详细了解@RequestMapping 的作用。
可以参考的博客
可以参考的博客
2. bean转化的两个方法完全看不懂,是用了反射机制吗,留个问题啊,这个不懂。

    public static <T> T convertBean(Object fromBean, Class<T> toBeanClassName) {
        Object toBean = null;

        try {
            toBean = getBeanInstance(toBeanClassName.getName());
            return convertBean(fromBean, toBean);
        } catch (Exception var4) {
            var4.printStackTrace();
            return toBean;
        }
    }

    private static <T> T convertBean(Object fromBean, T toBean) {
        BeanUtil.getBeanUtilBean().getTypeConverterManager().register(String.class, new StringConverter());
        BeanCopy.beans(fromBean, toBean).copy();
        return toBean;
    }

在写记录的编辑状态的时候,千万不要再将以前的记录弄到编辑状态,因为,会覆盖会覆盖会覆盖。
总的来说,这个页面的功能很简单,只高兴都没人催我,立个目标,通过这个项目,了解SSM的原理。
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值