品牌管理
前台展示后台查询的分页对象
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业务流程。
特此鸣谢,晓欣老师!