1.需求分析:

1. 提供index.html页面,页面中有一个省份 下拉列表
    2. 当页面加载完成后 发送ajax请求,加载所有省份

2. 项目结构

3.pom.xml文件配置

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.hotdas</groupId><artifactId>redis_ex</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.8</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.4</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.8</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>5.0.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.0.5.RELEASE</version></dependency><dependency><groupId>c3p0</groupId><artifactId>c3p0</artifactId><version>0.9.1.1</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.10</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.32</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.0.1</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>javax.servlet.jsp-api</artifactId><version>2.2.1</version><scope>provided</scope></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.9.0</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.0</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.9.0</version></dependency><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.1</version></dependency><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.9.0</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.3</version></dependency></dependencies><!-- 配置Tomcat插件 --><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>2.3.2</version><configuration><source>1.7</source><target>1.7</target></configuration></plugin><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><configuration><!-- 指定端口 --><port>8080</port><!-- 请求路径 --><path>/</path></configuration></plugin></plugins></build>
</project>

4.index页面

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>加载省份信息</title><script src="js/jquery-3.3.1.min.js"></script><script><!--$符号表示随着页面的加载而加载-->//定义异步请求方法,function ()表示里面的执行方法$(function () {//发送异步请求,gei方法发送请求,访问ProvinceServlet路劲,{}传参数,没有参数,回调时需要解析数据,回调方法function data()$.get("provinceServlet",{},function(data) {//1.select,获取id标签var province = $("#province");//遍历json数据,each代表遍历所有内容$(data).each(function () {//3.获取省份,有多个option,通过循环var option = "<option name='"+this.id+"'>"+this.name+"</option>";//4.调用#province添加option内容,append()方法表示在列表中追加节点province.append(option);})});});</script>
</head>
<body>
<!--selcet下拉列表-->
<select id="province"><option>--请选择省份--</option>
</select>
</body>
</html>

5.druid.properties

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/db_redis
username=root
password=zq1234
initialSize=5
maxActive=10
maxWait=3000

6.jedis.properties

host=127.0.0.1
port=6379
maxTotal=50
maxIdle=10

7.web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"version="3.1"><!--配置servlet--><servlet><!--servlet名称--><servlet-name>provinceServlet</servlet-name><!--servlet类--><servlet-class>com.lingnan.web.servlet.ProvinceServlet</servlet-class><!--启动初始化servlet--><load-on-startup>1</load-on-startup></servlet><!--配置servlet映射--><servlet-mapping><servlet-name>provinceServlet</servlet-name><!--servlet路径映射--><url-pattern>/provinceServlet/*</url-pattern></servlet-mapping>
</web-app>

8.ProvinceServlet

package com.lingnan.web.servlet;import com.lingnan.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;//加servlet请求路劲注解
@WebServlet("/ProvinceServlet")
public class ProvinceServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//调用dopost方法this.doPost(req,resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取servicerProvinceServiceImpl provinceService = new ProvinceServiceImpl();//查询所有信息转换为json格式String json =provinceService.findAllJson();System.out.println("json的值");System.out.println(json);//2.给页面返回响应结果,设置输出json类型,charset代表字符类型设置为utf-8resp.setContentType("application/json;charset=utf-8");//将结果写到页面,显示resp.getWriter().write(json);}}

9.ProvinceServiceImpl

package com.lingnan.service.impl;import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.lingnan.dao.impl.ProvinceDaoImpl;
import com.lingnan.domain.Province;
import com.lingnan.jedis.util.JedisPoolUtils;
import com.lingnan.service.ProvinceService;
import redis.clients.jedis.Jedis;import java.util.List;public class ProvinceServiceImpl implements ProvinceService {//service下一步需要调用Dao方法,声明Daoprivate ProvinceDaoImpl provinceDao= new ProvinceDaoImpl();private  String provincejson=null;@Overridepublic String findAllJson() {//一.应该先从redis中命中//连接redis服务器查询key的数据Jedis jedis = JedisPoolUtils.getJedis();String provincejson = jedis.get("province");//判断key是否存在,如果provincejson==null || provincejson.length()==0表示redis没有该key,需要从数据库中获取数据if(provincejson==null || provincejson.length()==0){//二.在缓存中没有该key,从数据库中获取System.out.println("从数据库中获取数据返回11");//1.获取province数据,拿到list集合List<Province> list =  provinceDao.findAll();//2.把list集合数据转换为json,ObjectMapper objectMapper=new ObjectMapper();try {provincejson = objectMapper.writeValueAsString(list);} catch (JsonProcessingException e) {e.printStackTrace();}//三.加入到redis缓存中,provinc为rediskey,数据provincejsonString province = jedis.set("province",provincejson);//四.释放redis连接jedis.close();}else {System.out.println("从redis缓冲中获取数据返回22");}return provincejson;}
}

10.ProvinceService

package com.lingnan.service;public interface ProvinceService {public  String findAllJson();
}

11.Province实体类

package com.lingnan.domain;public class Province {private int id;private  String name;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "Province{" +"id=" + id +", name='" + name + '\'' +'}';}
}

12.ProvinceDaoImpl

package com.lingnan.dao.impl;import com.lingnan.dao.ProvinceDao;
import com.lingnan.domain.Province;
import com.lingnan.util.JDBCUtils;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.ResultSetExtractor;import java.util.List;public class ProvinceDaoImpl implements ProvinceDao {//1.使用JdbcTemplate查询,获取数据源private JdbcTemplate jdbcTemplate=new JdbcTemplate(JDBCUtils.getDataSource());@Overridepublic List<Province> findAll() {System.out.println(jdbcTemplate);//创建sql语句String sql="select * from province";//执行sql查询,返回list列表List<Province> provinceList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Province>(Province.class));System.out.println(provinceList);return provinceList;}
}

13.ProvinceDao

package com.lingnan.dao;import com.lingnan.domain.Province;import java.util.List;public interface ProvinceDao {public List<Province>  findAll();
}

14.JDBCUtils

package com.lingnan.util;import com.alibaba.druid.pool.DruidDataSourceFactory;import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;/*** JDBC工具类 使用Durid连接池*/
public class JDBCUtils {private static DataSource ds ;static {try {//1.加载配置文件Properties pro = new Properties();//使用ClassLoader加载配置文件,获取字节输入流InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");pro.load(is);//2.初始化连接池对象ds = DruidDataSourceFactory.createDataSource(pro);} catch (IOException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}/*** 获取连接池对象*/public static DataSource getDataSource(){return ds;}/*** 获取连接Connection对象*/public static Connection getConnection() throws SQLException {return  ds.getConnection();}
}

15.JedisPoolUtils

package com.lingnan.jedis.util;import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;/*
加载配置文件,并连接redis服务器
提供获取连接的方法*/
public class JedisPoolUtils {private static JedisPool jedisPool;//静态代码块,随着类的加载而加载static {//读取配置文件InputStream inputStream = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties");//封装属性对象Properties properties = new Properties();try {properties.load(inputStream);} catch (IOException e) {e.printStackTrace();}//构建连接池配置对象JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();//maxTotal需要转换为int,设置最大连接数,通过properties获取jedisPoolConfig.setMaxTotal(Integer.parseInt(properties.getProperty("maxTotal")));//设置活跃连接数jedisPoolConfig.setMaxIdle(Integer.parseInt(properties.getProperty("maxIdle")));//初始化jedisPool,设置主机,端口号jedisPool =new JedisPool(jedisPoolConfig,properties.getProperty("host"),Integer.parseInt(properties.getProperty("port")));}//提供获取连接方法public static Jedis getJedis(){return jedisPool.getResource();}
}

16.输出结果:

总结:使用redis缓存一些不经常发生变化的数据。
            数据库的数据一旦发生改变,则需要更新缓存。
            数据库的表执行 增删改的相关操作,需要将redis缓存数据情况,再次存入
            在service对应的增删改方法中,将redis数据删除。

注:若有侵权,请联系作者!

redis实例--加载所有省份相关推荐

  1. Flutter 实例 - 加载更多的ListView

    Dart4Flutter - 01 – 变量.类型和函数 Dart4Flutter – 02 –控制流 和异常 Dart4Flutter – 03 – 类和泛型 Dart4Flutter – 04 – ...

  2. redis 启动加载mysql_Redis分析系列:启动加载过程

    从本篇文章开始(命名为Redis分析系列),将会通过分析Redis的源代码(以Redis 2.2.0 RC1为准),来对它的内部实现做一些探讨.本文主要介绍Redis启动加载过程,总体上可以分为如下几 ...

  3. python redis模块_大数据入门4 | Redis安装及python中的redis模块加载

    引:前面学习了中文分词.HMM.jieba...这些有很多内容需要总结,但是时间太紧,一下写不完.所以前面的就先放一边,届时复习时再写吧. 今天把刚学的遇到的问题总结一下. 实践部分遇到的问题: 1. ...

  4. redis 重新加载_Redis持久化和Redis持久化方式

    1.啥是Redis持久化 持久化就是把内存中的数据存到硬盘中去,防止进程退出后数据丢失. 分析:redis 如果仅仅只是将数据缓存在内存里面,如果 redis 宕机了再重启,内存里的数据将全部丢失.为 ...

  5. 实例:加载图片并添加文本水印

    2019独角兽企业重金招聘Python工程师标准>>> <?php //加载已有图像 header('Content-Type:image/png'); //imagecrea ...

  6. Pytorch 词嵌入word_embedding2实例(加载已训练词向量)

    目录 1.加载已训练好的词嵌入 2.是否需要重新训练词嵌入 3.不重新训练词嵌入时优化器设置

  7. 第18.1节 OE3.1实例-加载本地瓦片数据

    致谢 感谢网友提出这个问题.大家有问题也可以在评论区提出,有问必有答.如果涉及商业需求,需要较完整/详尽的工程,可以联系作者133-2459-8743. 问题描述 网友提出要做一个基于osgearth ...

  8. Echarts3实例 加载地图

    前言 Echarts加载GeoJson数据生成canvas地图,可以实现地图简单的展示,获取GeoJson数据的方法见:https://blog.csdn.net/idomyway/article/d ...

  9. 利用classloader同一个项目中加载另一个同名的类_线程上下文类加载器ContextClassLoader内存泄漏隐患...

    前提 今天(2020-01-18)在编写Netty相关代码的时候,从Netty源码中的ThreadDeathWatcher和GlobalEventExecutor追溯到两个和线程上下文类加载器Cont ...

最新文章

  1. python abs()函数是什么意思?
  2. Win8 官方培训课程
  3. future java 多线程_Java多线程之Future与FutureTask
  4. 电子设计速成_Web设计速成课程:从一个非设计者到另一个
  5. c++远征之多态篇——运行时类型识别(RTTI)
  6. python消息队列模块_day43-python消息队列二-queue模块
  7. python 程序运行在阿里云主机_阿里云主机Access key利用工具
  8. 小车故障灯亮显示大全_车辆故障灯亮了,还能继续行驶吗?该怎么做?
  9. [转]C# 中的常用正则表达式总结
  10. 微博登陆python学习
  11. wps文字表格制作拼音田字格模板_最新用WPS表格快速制作拼音田字格的方法
  12. 计算机表格两行互换步骤,excel怎么让两行互换位置,EXCEL里两个格的内容怎么互换?...
  13. 打造前端 Deepin Linux 工作环境——安装 nodejs 环境,git 版本管理
  14. Wordpress 网站添加打赏插件
  15. 名人(国家)·经典语录——向 先 辈 低 头, 向 文 明 低 头
  16. 电能管理系统在中材萍乡水泥4500t/d生产线改造上的应用
  17. 零基础如何学习单片机,一位入门者的进阶路径,可参考
  18. [Setting]win7下运行exe失败:应用程序无法启动,因为应用程序的并行配置不正确
  19. anaconda安装rdkit安装指南
  20. vue 环信im 发送图片、接收图片

热门文章

  1. 介绍一款|用于多组学整合和网络可视化分析的在线平台
  2. code.org免费的少儿编程入门平台
  3. 解决Win7安装更新补丁提示0x80240037
  4. 服装erp出产系统是如何作业的?有哪些流程?
  5. java自定义注解详解
  6. java唯一码_唯一邀请码生成(Java版本)
  7. 2023上海工程技术大学计算机考研信息汇总
  8. nodejs 面试题
  9. 数据图表与分析图_堆积图表界的翘楚!河流图如何搞定“巨量”数据
  10. 冰封王座人工只能_魔兽争霸3冰封王座地图编辑器worldedit..._网络编辑_帮考网