电商项目第四天

电商项目第四天

提交修改

dao层:

//修改
public void updateBrandById(Brand brand);

dao.xml:

<!-- 修改 -->
	<update id="updateBrandById" parameterType="Brand">
		update bbs_brand 
		<set>
			<if test="name != null">
				name = #{name},
			</if>
			<if test="description != null">
				description = #{description},
			</if>
			<if test="imgUrl != null">
				img_url = #{imgUrl},
			</if>
			<if test="sort != null">
				sort = #{sort},
			</if>
			<if test="isDisplay != null">
				is_display = #{isDisplay}
			</if>
		</set>
		<where>
			id=#{id}
		</where>
	</update>

service层:

@Override
	public void updateBrandById(Brand brand) {
		// TODO Auto-generated method stub
		brandDao.updateBrandById(brand);
	}

controller层:

	//修改
	@RequestMapping(value="/brand/edit.do")
	public String edit(Brand brand){
		brandService.updateBrandById(brand);
		return "redirect:/brand/list.do";
	}
批量删除

唯一需要注意的就是如何获取已被选中的商品,通过form.js模拟表单提交

<script type="text/javascript">
//全选
function checkBox(name,checked){
	$("input[name="+name+"]").attr("checked",checked);
}
function optDelete(name,isDisplay,pageNo){
	//请至少选择一个
	var size = $("input[name=ids]:checked").size();
	if(size == 0){
		alert("请至少选择一个");
		return;
	}
	//您确认要删除么?
	if(!confirm("您确认要删除么?")){
		return;
	}
					
	$("#jvForm").attr("action","/brand/deletes.do?name="+name+"&isDisplay="+isDisplay+"&pageNo="+pageNo);
	$("#jvForm").attr("method","post").submit();
}
</script>

在Servers中server.xml进行get方法字符集设置

 <Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

后台普通流程,不做过多赘述

商品表间关系

四张表:
商品表(品牌id、商品id全国唯一redis获取、)
品牌表(品牌id)
库存表(商品id、颜色id)
颜色表(颜色id)

逆向工程

生成pojo、dao层,提升开发效率。
更改配置文件,粘贴引用即可

商品查询页面

因为用了逆向工程,所以无需写dao层,如有需要,只需进行小范围修改即可
serviceImpl层:

@Autowired
	private ProductDao productDao;
	
	//分页list
	public Pagination selectProductServiceByQuery(Integer pageNo,String name,Long brandId,Boolean isShow){
		ProductQuery productQuery = new ProductQuery();
		productQuery.setPageNo(Pagination.cpn(pageNo));
		productQuery.setPageSize(10);
		//排序
		productQuery.setOrderByClause("id desc");
		StringBuilder params = new StringBuilder();
		Criteria createCriteria = productQuery.createCriteria();
		if(null != name){
			createCriteria.andNameLike("%"+name+"%");
			params.append("name = ").append(name);
		}
		if(null != brandId){
			createCriteria.andBrandIdEqualTo(brandId);
			params.append("&brandId = ").append(brandId);
		}if(null != isShow){
			createCriteria.andIsShowEqualTo(isShow);
			params.append("&isShow = ").append(isShow);
		}else{
			createCriteria.andIsShowEqualTo(false);
			params.append("&isShow = ").append(false);
		}
		Pagination pagination = new Pagination(
				productQuery.getPageNo(),
				productQuery.getPageSize(),
				productDao.countByExample(productQuery)
				);
	/*	//回显第一个图片(自己写的,功能可实现,但有缺陷)
		List<Product> products = productDao.selectByExample(productQuery);
		for (Product product : products) {
			String[] img = product.getImgUrl().split(",");
			product.setImgUrl(img[0]);
		}
		pagination.setList(products);
		//结束
*/		pagination.setList(productDao.selectByExample(productQuery));
		pagination.pageView("/product/list.do", params.toString());
		return pagination;
	}

controller层:

@Autowired
	private ProductService productservice;
	@Autowired
	private BrandService brandService;

	//分页list查询
	@RequestMapping("/product/list.do")
	public String list(Integer pageNo,String name,Long brandId,Boolean isShow,Model model){
		//品牌结果集
		List<Brand> brands = brandService.selectBrandListByQuery(1);//1为商品可用 isShow
		model.addAttribute("brands",brands);
		
		//System.out.println(name);
		
		Pagination pagination = productservice.selectProductServiceByQuery(pageNo, name, brandId, isShow);
		model.addAttribute("pagination",pagination);
		model.addAttribute("name",name);
		model.addAttribute("brandId",brandId);
		if(null != isShow){
			model.addAttribute("isShow",isShow);
		}else{
			model.addAttribute("isShow",false);
		}
		return "product/list";
	}
去添加页面

添加页面需要回显品牌和数据,需要后台查好进行回显。

上传多张图片

js:

//设置multple属性,可上传多张
<input type="file" onchange="uploadPic()" name="pics" multiple="multiple"/>
//方法
function uploadPic(){
	//上传图片 异步的  	Jquery.form.js
	var options = {
			url : "/upload/uploadPics.do",
			type : "post",
			dataType : "json",
			success : function(data){
				//多图片回显(设置样式)
				var html = '<tr>'
						 + '<td width="20%" class="pn-flabel pn-flabel-h"></td>'
						 + '<td width="80%" class="pn-fcontent">';
				for(var i=0;i<data.length;i++){
					html += '<img width="100" height="100" src="' + data[i] + '" />'
					     +  '<input type="hidden" name="imgUrl" value="' + data[i] + '"/>'
				}
				html += '<a href="javascript:;" class="pn-opt" οnclick="jQuery(this).parents(\'tr\').remove()">删除</a>'
					 +  '</td>'
					 +  '</tr>';
				//回显
				$("#tab_2").append(html);
			}
	}
	$("#jvForm").ajaxSubmit(options);
}

controller层:

//上传多张图片
	@RequestMapping(value="/upload/uploadPics.do")
	public @ResponseBody List<String> uploadPics(@RequestParam(required=false) MultipartFile[] pics,HttpServletResponse response){
		List<String> urls = new  ArrayList<String>();
		try {
			for (MultipartFile pic : pics) {//MultipartFile为SpringMvc自带的上传文件的类
				String path = uploadService.upLoadPic(pic.getBytes(), pic.getOriginalFilename(), pic.getSize());
				String url = ConStants.IMG_URL+path;
				urls.add(url);
			}
			return urls;
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return urls;
	}
添加

serviceImpl层:

@Autowired
	private SkuDao skuDao;
	@Autowired
	private Jedis jedis;//这是Redis的java工具类,只需设置连接ip和端口号即可连接使用
	//商品保存
	public void insertProduct(Product product){
		//保存商品
		Long id = jedis.incr("pno");
		product.setId(id);
		product.setIsShow(false);//设置下架
		product.setIsDel(true);//设置删除
		productDao.insertSelective(product);
		//返回id
		String[] colors = product.getColors().split(",");
		String[] sizes = product.getSizes().split(",");
		for (String color : colors) {
			for (String size : sizes) {
				//保存sku
				Sku sku = new Sku();
				//
				//此处设置sku属性
				//
				skuDao.insertSelective(sku);
				
			}
		}

controller层;

//添加
@RequestMapping("/product/add.do")
public String add(Product product){
	productservice.insertProduct(product);
	return "redirect:/product/list.do";
}

第四天内容结束
所学知识:

  1. 了解redirect和forward区别于用途
  2. 了解并使用redis来获取商品id
  3. 学会了批量操作
  4. 了解到el表达式是获取的对象中的get方法,不是属性值!!

遇到错误:

  1. 下一页时页面一直报404,显示方法为找到(原因,pagevieww设置只写了请求方法名,未写.do
  2. dubbo请求失败,显示为找到服务,可我已经配好了(原因,eclipde编译失效,重启,手动编译)
  3. 保存时报空指针异常(原因,数据库中有商品数据图片为空,空调用split方法自然空指针异常)
  4. redis配置出错(原因,虚拟机镜像又损坏了。。。有空说啥自己配一个)
  5. 自己写了回显第一张图片,但是没有考虑业务逻辑,还需多加思考

致谢晓欣老师

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值