JavaWeb黑马旅游网-学习笔记05【分类数据展示功能】

  1. JavaWeb黑马旅游网-学习笔记01【准备工作】
  2. JavaWeb黑马旅游网-学习笔记02【注册功能】
  3. JavaWeb黑马旅游网-学习笔记03【登陆和退出功能】
  4. JavaWeb黑马旅游网-学习笔记04【BaseServlet抽取】
  5. JavaWeb黑马旅游网-学习笔记05【分类数据展示功能】
  6. JavaWeb黑马旅游网-学习笔记06【旅游线路分页展示分页展示】
  7. JavaWeb黑马旅游网-学习笔记07【旅游线路查询】
  8. JavaWeb黑马旅游网-学习笔记08【旅游线路详情】
  9. JavaWeb黑马旅游网-学习笔记09【旅游线路收藏】
  10. JavaWeb黑马旅游网-学习笔记10【项目代码】

目录

26-分类数据展示功能_分析

27-分类数据展示功能_实现_后台代码

CategoryDao.java

CategoryDaoImpl.java

CategoryService.java

CategoryServlet.java

在BaseServlet中封装了序列化json的方法

28-分类数据展示功能_实现_前台代码

29-分类数据展示功能_缓存优化_分析

30-分类数据展示功能_缓存优化_代码实现

CategoryServiceImpl.java


26-分类数据展示功能_分析

效果:

分析:

27-分类数据展示功能_实现_后台代码

CategoryDao.java

package cn.itcast.travel.dao;

import cn.itcast.travel.domain.Category;

import java.util.List;

public interface CategoryDao {
    /**
     * 查询所有
     *
     * @return
     */
    public List<Category> findAll();
}

CategoryDaoImpl.java

package cn.itcast.travel.dao.impl;

import cn.itcast.travel.dao.CategoryDao;
import cn.itcast.travel.domain.Category;
import cn.itcast.travel.util.JDBCUtils;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

import java.util.List;

public class CategoryDaoImpl implements CategoryDao {
    private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());

    @Override
    public List<Category> findAll() {
        String sql = "select * from tab_category";
        return template.query(sql, new BeanPropertyRowMapper<Category>(Category.class));
    }
}

CategoryService.java

package cn.itcast.travel.service;

import cn.itcast.travel.domain.Category;

import java.util.List;

public interface CategoryService {
    public List<Category> findAll();
}

CategoryServlet.java

package cn.itcast.travel.web.servlet;

import cn.itcast.travel.domain.Category;
import cn.itcast.travel.service.CategoryService;
import cn.itcast.travel.service.impl.CategoryServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

@WebServlet("/category/*")
public class CategoryServlet extends BaseServlet {
    private CategoryService service = new CategoryServiceImpl();

    /**
     * 查询所有
     *
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */
    public void findAll(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.调用service查询所有
        List<Category> cs = service.findAll();
        //2.序列化json返回
       /* ObjectMapper mapper = new ObjectMapper();
        response.setContentType("application/json;charset=utf-8");
        mapper.writeValue(response.getOutputStream(),cs);*/
        writeValue(cs, response);
    }
}

在BaseServlet中封装了序列化json的方法

28-分类数据展示功能_实现_前台代码

hader.html加载后,发送ajax请求,请求category/findAll。

29-分类数据展示功能_缓存优化_分析

分析发现,分类的数据在每一次页面加载后 都会重新请求数据库来加载,对数据库的压力比较大,而且分类的数据不会经常产生变化,所以可以使用redis来缓存这个数据。

分析:

30-分类数据展示功能_缓存优化_代码实现

期望 数据中存储的顺序 就是 将来展示的顺序,使用redis的sortedset。

CategoryServiceImpl.java

package cn.itcast.travel.service.impl;

import cn.itcast.travel.dao.CategoryDao;
import cn.itcast.travel.dao.impl.CategoryDaoImpl;
import cn.itcast.travel.domain.Category;
import cn.itcast.travel.service.CategoryService;
import cn.itcast.travel.util.JedisUtil;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Tuple;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;

public class CategoryServiceImpl implements CategoryService {
    private CategoryDao categoryDao = new CategoryDaoImpl();

    @Override
    public List<Category> findAll() {
        //1.从redis中查询
        //1.1获取jedis客户端
        Jedis jedis = JedisUtil.getJedis();
        //1.2可使用sortedset排序查询
        //Set<String> categorys = jedis.zrange("category", 0, -1);
        //1.3查询sortedset中的分数(cid)和值(cname)
        Set<Tuple> categorys = jedis.zrangeWithScores("category", 0, -1);
        List<Category> cs = null;
        //2.判断查询的集合是否为空
        if (categorys == null || categorys.size() == 0) {
            System.out.println("从数据库查询...");
            //3.如果为空,需要从数据库查询,在将数据存入redis
            //3.1 从数据库查询
            cs = categoryDao.findAll();
            //3.2 将集合数据存储到redis中的category的key
            for (int i = 0; i < cs.size(); i++) {
                jedis.zadd("category", cs.get(i).getCid(), cs.get(i).getCname());
            }
        } else {
            System.out.println("从redis中查询...");
            //4.如果不为空,将set的数据存入list
            cs = new ArrayList<Category>();
            for (Tuple tuple : categorys) {
                Category category = new Category();
                category.setCname(tuple.getElement());
                category.setCid((int) tuple.getScore());
                cs.add(category);
            }
        }
        return cs;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_44949135/article/details/114272117