电商项目第三天

品牌管理

前台展示后台查询的分页对象

POJO层

在品牌对象实体类中,新增字段分页等

//附加条件
	private Integer pageNo=1;//当前页    
	private Integer pageSize=10; //每页个数
	//开始行
	private Integer startRow;
	
	public Integer getPageNo() {
		return pageNo;
	}
	public void setPageNo(Integer pageNo) {
		//计算开始
		this.startRow = (pageNo-1)*pageSize;
		this.pageNo = pageNo;
	}
	public Integer getPageSize() {
		return pageSize;
	}
	public void setPageSize(Integer pageSize) {
		//计算开始
		this.startRow = (pageNo-1)*pageSize;
		this.pageSize = pageSize;
	}
	public Integer getStartRow() {
		return startRow;
	}
	public void setStartRow(Integer startRow) {
		this.startRow = startRow;
	}

Dao层

查询总条数
结果集
dao.java

//查询结果集
	public List<Brand> selectBrandByQuery(BrandQuery brandQuery);
	//查询总条数
	public Integer selectCount(BrandQuery brandQuery);

dao.xml

<resultMap type="Brand" id="brand">
		<result column="img_url" property="imgUrl" />
		<result column="is_display" property="isDisplay" />
	</resultMap>
		
	<select id="selectBrandByQuery" parameterType="BrandQuery" resultMap="brand" >
		select id , name , description , img_url , sort , is_display
		from bbs_brand 
		<where>
			<if test="name != null">
				 name like "%"#{name}"%"
			</if>
			<if test="isDisplay != null">
				and is_display=#{isDisplay}
			</if>
		</where>
		<if test="startRow!=null">
		<!-- 从startRow开始,查询pageSize个 -->
			limit #{startRow},#{pageSize}
		</if>
	</select>
	
	<select id="selectCount" parameterType="BrandQuery" resultType="Integer" >
		select count(1)
		from bbs_brand 
		<where>
			<if test="name != null">
				 name like "%"#{name}"%"
			</if>
			<if test="isDisplay != null">
				and is_display=#{isDisplay}
			</if>
		</where>
	</select>

注意:标签可以去除and或or,
在配置mybatis.xml是,dao实现了自动注入
前提,dao接口和dao.xml名必须一致

Server层

入参:品牌名称、(品牌)是否可用、页号
返回值:分页对象(结果集、分页( 当前页、每页展示数、总条数))
brandServiceImpl.java

public Pagination selectPaginationByQuery(String name,Integer isDisplay,Integer pageNo){
		BrandQuery brandQuery = new BrandQuery();
		//当前页 
		brandQuery.setPageNo(Pagination.cpn(pageNo));
		//每页展示商品数
		brandQuery.setPageSize(5);
		
		StringBuilder params = new StringBuilder();
		//条件
		if(null!= name){
			brandQuery.setName(name);
			params.append("name=").append(name);
		}
		if(null!= isDisplay){
			brandQuery.setIsDisplay(isDisplay);
			params.append("&isDisplay=").append(isDisplay);
		}else{
			brandQuery.setIsDisplay(1);
			params.append("&isDisplay=").append(1);
		}
		
		Pagination pagination = new Pagination(brandQuery.getPageNo(),
											   brandQuery.getPageSize(),
											   brandDao.selectCount(brandQuery)
											   );
		//设置结果集
		pagination.setList(brandDao.selectBrandByQuery(brandQuery));
		//分页展示
		String url="/brand/list.do";
		pagination.pageView(url, params.toString());
		
		return pagination;
		
	}

Pagination.cpn(pageNo)当pageNo为null或者小于1时,会给一个默认值1。
params拼接的字符串,用于下方的分页展示

Controller层

brandController.java

@RequestMapping("/brand/list.do")
	public String list(String name,Integer isDisplay,Integer pageNo,Model model){
		
		Pagination pagination = brandService.selectPaginationByQuery(name, isDisplay, pageNo);
		model.addAttribute("pagination",pagination);
		model.addAttribute("name",name);
		if(null!=isDisplay){
			model.addAttribute("isDisplay",isDisplay);
		}else{
			model.addAttribute("isDisplay",1);
		}
		return "brand/list";
	}

前台分页对象

//结果集
<c:forEach items="${pagination.list }" var="brand" >
</c:forEach>
//分页展示
<c:forEach items="${pagination.pageView }" var="page" >
		${page }
	</c:forEach>

FastDFS图片上传

使用前提,虚拟机自行安装并配置FastDFS
1.创建配置文件fdfs_client.conf,设置其中tracker_server的IP地址和端口号
tracker_server=192.168.200.128:22122
2.建立工具类
FastDFSUtils和Constant
FastDFSUtils.java

public class FastDFSUtils {

	public static String upload(byte[] pic,String name,long size){
		//ClientGlobal读配置文件
		//读classpath下配置文件路径
		String path = null;
		ClassPathResource resource = new ClassPathResource("fdfs_client.conf");
		try {
			//找到文件位置
			ClientGlobal.init(resource.getClassLoader().getResource("fdfs_client.conf").getPath());
			//老大的客户端
			TrackerClient trackerClient = new TrackerClient();//创建连接
			//获取小弟的地址
			TrackerServer trackerServer = trackerClient.getConnection();
			//创建小弟客户端
			StorageClient1 storageClient1 = new StorageClient1(trackerServer, null);
			
			String ext = FilenameUtils.getExtension(name);
			NameValuePair[] meta_list = new  NameValuePair[3];
			meta_list[0] = new NameValuePair("fileName", name);
			meta_list[1] = new NameValuePair("fileExt", ext);
			meta_list[2] = new NameValuePair("fileSize", String.valueOf(size));
			//	group1/M00/00/01/wKjIgFWOYc6APpjAAAD-qk29i78248.jpgz
			path=storageClient1.upload_file1(pic, ext, meta_list);
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return path;
	}

}

Constant.java

public interface Constants {
	
	//图片服务器
	public static final String IMG_URL="http://192.168.200.128:8888/";

}

3.Controller中接取前端图片对象,调用两个工具类,拼接图片在FastDFS的存储路径,通过json串回显到前端

public void uploadPic(@RequestParam MultipartFile pic,HttpServletResponse response) throws IOException{
		
		String path = uploadService.upload(pic.getBytes(), pic.getOriginalFilename(), pic.getSize());
		String url = Constants.IMG_URL+path;
		JSONObject jo = new JSONObject();
		jo.put("url", url);
		response.setContentType("application/json;charset=UTF-8");
		response.getWriter().write(jo.toString());
	}

4.前端使用ajax,并使用js,模拟from表单提交。

<script type="text/javascript">
	//上传图片
	function uploadPic(){
		//jquery.from.js模拟from表单提交
		var options = {
				url:"/upload/uploadPic.do",
				dataType:"json",
				type:"post",
				success:function(data){
					$("#allUrl").attr("src",data.url);
					$("#imgUrl").val(data.url);
				}
		}
		$("#jvForm").ajaxSubmit(options);
	}
</script>

今日学习到技能点
1.分页对象的使用与实现
2.FastDFS的使用

不足
1.分页对象使用不熟练
2.未尝试在虚拟机中安装配置FastDFS,还需熟悉FastDFS业务流程。

特此鸣谢,晓欣老师!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值