首页 > 其他分享 >分类数据展示功能分析与实现

分类数据展示功能分析与实现

时间:2023-02-22 13:56:24浏览次数:37  
标签:itcast cn 功能分析 展示 travel 分类 List import public

分析:

 

代码实现

后台代码实现:

BaseServlet类

将对象序列化为json方法进行抽取

/**
     * 直接将传入的对象序列化json,并且写回客户端
     * @param obj
     */
    public void writeValue(Object obj,HttpServletResponse response) throws IOException {
        //2.序列化json返回
        ObjectMapper mapper = new ObjectMapper();
        //设置编码 response
        response.setContentType("application/json;charset=utf-8");
        mapper.writeValue(response.getOutputStream(),obj);//序列化json
    }

    /**
     *将传入的对象序列化为json,返回调用者
     * @param obj
     * @return
     */
    public String writeValueAsString(Object obj) throws JsonProcessingException {
        ObjectMapper mapper = new ObjectMapper();
        return mapper.writeValueAsString(obj);
    }

CategoryDao

package cn.itcast.travel.dao;

import cn.itcast.travel.domain.Category;

import java.util.List;

public interface CategoryDao {

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

CategoryDaoImpl

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.class));
    }
}

CategoryService

package cn.itcast.travel.service;

import cn.itcast.travel.domain.Category;

import java.util.List;

public interface CategoryService {

    //查询所有
    public List<Category> findAll();
}

CategoryServiceImpl

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 java.util.List;

public class CategoryServiceImpl implements CategoryService {

    private CategoryDao categoryDao = new CategoryDaoImpl();

    @Override
    public List<Category> findAll() {
        return categoryDao.findAll();
    }


}

前台代码

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

<div class="navitem">
        <ul id="category"  class="nav">
<!--            <li class="nav-active"><a href="index.html">首页</a></li>-->
<!--            <li><a href="route_list.html">门票</a></li>-->
<!--            <li><a href="route_list.html">酒店</a></li>-->
<!--            <li><a href="route_list.html">香港车票</a></li>-->
<!--            <li><a href="route_list.html">出境游</a></li>-->
<!--            <li><a href="route_list.html">国内游</a></li>-->
<!--            <li><a href="route_list.html">港澳游</a></li>-->
<!--            <li><a href="route_list.html">抱团定制</a></li>-->
<!--            <li><a href="route_list.html">全球自由行</a></li>-->
<!--            <li><a href="favoriterank.html">收藏排行榜</a></li>-->
        </ul>
    </div>
<script>
    $(function () {
        //查询用户登录名字信息
       $.get("user/findOne",{},function (data) {
           //{uid:1,name:'李四'}
           var msg = "欢迎回来,"+data.name;
           $("#span_username").html(msg);
       });

        //查询分页数据
        $.get("category/findAll",{},function (data) {
            // [{cid,1},{cname,国内游},{}] 数组
            var lis = '<li class="nav-active"><a href="index.html">首页</a></li>';
            //遍历数组,拼接字符串(<li>)
            for (let i = 0; i < data.length; i++) {
                var li = '<li><a href="route_list.html">'+data[i].cname+'</a></li>';

                lis += li;
            }
            // 拼接收藏排行榜的li,<li><a href="favoriterank.html">收藏排行榜</a></li>
            lis+= '<li><a href="favoriterank.html">收藏排行榜</a></li>';

            //将list字符串,设置到ul的html内容中
            $("#category").html(lis);
        });
    });

</script>

分类数据进行缓存优化-分析

分析发现,分类的数据在每一次页面加载后都会重新请求数据库来加载,对数据库的压力

比较大,而且分类的数据不会经常产生变化,所有可以使用redis来缓存这个数据

 

 

 

代码实现

CategoryServiceImpl实现类:

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.JDBCUtils;
import cn.itcast.travel.util.JedisUtil;
import redis.clients.jedis.Jedis;

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);//范围查询


        //2.判断查询的集合是否为空
        List<Category> cs = null;
        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 {// 进行数据结构的统一 set集合中的缓存数据存储到list集合当中 (转换代码)
            System.out.println("从redis中查询...");
            //4.如果不为空,将set数据存入list
            cs = new ArrayList<Category>();
            for (String name : categorys) {
                Category category = new Category();
                category.setCname(name);
                cs.add(category);
            }

        }

        return cs;
    }
}

 

标签:itcast,cn,功能分析,展示,travel,分类,List,import,public
From: https://www.cnblogs.com/xuche/p/17142732.html

相关文章