电商项目第四天
提交修改
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";
}
第四天内容结束
所学知识:
- 了解redirect和forward区别于用途
- 了解并使用redis来获取商品id
- 学会了批量操作
- 了解到el表达式是获取的对象中的get方法,不是属性值!!
遇到错误:
- 下一页时页面一直报404,显示方法为找到(原因,pagevieww设置只写了请求方法名,未写.do)
- dubbo请求失败,显示为找到服务,可我已经配好了(原因,eclipde编译失效,重启,手动编译)
- 保存时报空指针异常(原因,数据库中有商品数据图片为空,空调用split方法自然空指针异常)
- redis配置出错(原因,虚拟机镜像又损坏了。。。有空说啥自己配一个)
- 自己写了回显第一张图片,但是没有考虑业务逻辑,还需多加思考
致谢晓欣老师