首页 > 其他 > 详细

Redis - 6 案例:异步加载数据

时间:2020-11-27 11:53:40      阅读:35      评论:0      收藏:0      [点我收藏+]

Redis - 案例:异步加载数据

需求:

页面加载成功以后,异步获取省份信息

环境准备

1. 搭建项目(使用上次案例环境)
2. 创建省份表

CREATE TABLE `province` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `NAME` varchar(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;


insert  into `province`(`id`,`NAME`) values (1,‘北京‘),(2,‘上海‘),(3,‘广州‘),(4,‘陕西‘),(5,‘台湾‘),(6,‘安徽‘);

步骤分析

1. 导入jar包(jedis...) 、配置文件、工具类 -- 暂时不管
2. 编写实体类 Province
3. 编写Dao
4. 编写Service
5. 编写Servlet
6. 编写页面

Province 实体类

package com.itheima.bean;

public class Province {

    private Integer id;
    private String name;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

ProvinceMapper

package com.itheima.mapper;

import com.itheima.bean.Province;
import org.apache.ibatis.annotations.Select;

import java.util.List;

public interface ProvinceMapper {

    @Select("select * from province")
    public List<Province> findAll();
}

ProvinceService

package com.itheima.service;

import com.itheima.bean.Province;

import java.util.List;

public interface ProvinceService {

    public List<Province> findAll();

    public String findAllJson() throws Exception;
}

ProvinceServiceImpl

package com.itheima.service.impl;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.itheima.bean.Province;
import com.itheima.mapper.ProvinceMapper;
import com.itheima.service.ProvinceService;
import com.itheima.utils.DaoInstanceFactory;
import com.itheima.utils.JedisUtils;
import redis.clients.jedis.Jedis;

import java.util.List;

public class ProvinceServiceImpl implements ProvinceService {
    @Override
    public List<Province> findAll() {
        ProvinceMapper mapper = DaoInstanceFactory.getMapper(ProvinceMapper.class);

        return mapper.findAll();
    }


    // [{"id":1,"name":"北京"},{"id":2,"name":"上海"}]
    public String findAllJson() throws Exception {
        //1. 读取缓存
        Jedis jedis = JedisUtils.getJedis();
        String province_json = jedis.get("province_json");

        //2. 判断是否有缓存
        if (province_json == null) {
            // 没有缓存
            // 查询数据
            ProvinceMapper mapper = DaoInstanceFactory.getMapper(ProvinceMapper.class);
            List<Province> list = mapper.findAll();

            // 转换
            province_json = new ObjectMapper().writeValueAsString(list);

            // 放入缓存
            jedis.set("province_json", province_json);

            System.out.println("查询数据库.....");
        }

        return province_json;
    }
}

ProvinceServlet

package com.itheima.controller;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.itheima.bean.Province;
import com.itheima.service.ProvinceService;
import com.itheima.service.impl.ProvinceServiceImpl;

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

@WebServlet("/provinceServlet")
public class ProvinceServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            //1. 设置响应响应编码和类型
            response.setContentType("application/json;charset=utf-8");
            //2. 调用service查询
            ProvinceService service = new ProvinceServiceImpl();
       /* List<Province> list = service.findAll();
        //3. 将集合转换为JSON, 返回到浏览器
        new ObjectMapper().writeValue(response.getWriter(),list);*/

            String allJson = service.findAllJson();

            response.getWriter().write(allJson);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
}

provice.html

<!DOCTYPE html>
<html lang="en">
<head>
    
    <title>异步加载省份</title>
    <script src="js/vue.js"></script>
    <script src="js/axios-0.18.0.js"></script>
</head>
<body>

<div id="app">
    省份
    <select>

        <!--[{"id":1,"name":"北京"},{"id":2,"name":"上海"}]-->
        <option v-for="p in provices" v-bind:value="p.id">{{p.name}}</option>
    </select>
</div>

<script>
    // 使用vue加载异步加载数据
    new Vue({
        el: "#app",
        data: {
            provices: [],
        },
        methods: {
            findProinceJson() {
                // 异步请求
                axios.get("provinceServlet").then(resp => {
                    // 给数据赋值  [{"id":1,"name":"北京"},{"id":2,"name":"上海"}]
                    this.provices = resp.data;
                })
            }
        },

        created() {
            // vue对象创建以后, 调用方法发生异步请求
            this.findProinceJson();
        }
    });
</script>

</body>
</html>

Redis - 6 案例:异步加载数据

原文:https://www.cnblogs.com/60kmph/p/14046853.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!