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

2023-10-27

一:首先明确需求:

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

二:数据库编写:

 CREATE DATABASE NBA; -- 创建数据库
USE NBA;                -- 使用数据库
CREATE TABLE province(   -- 创建表
    id INT PRIMARY KEY AUTO_INCREMENT,
    NAME VARCHAR(20) NOT NULL
    
);
-- 插入数据
INSERT INTO province VALUES(NULL,'勇士');
INSERT INTO province VALUES(NULL,'湖人');
INSERT INTO province VALUES(NULL,'篮网');
INSERT INTO province VALUES(NULL,'太阳');    

三:搭建环境:(导入jar包)+druid配置文件(放的是连接池的参数)+JS文件导入WEB

四:代码编写:

        001:pojo下写实体类:

public class Province {
    private int id;
    private String name;
    //在加get/set方法
}

        002:dao层

                0001:ProvinceDao:

public interface ProvinceDao {
    public List<Province> findAll();
}

             0002:ProvinceDaoImpl:

public class ProvinceDaoImpl implements ProvinceDao {
    //1.声明成员变量 jdbctemplement
    private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
    @Override
    public List<Province> findAll() {
        //1.定义sql
        String sql = "select * from province ";
        //2.执行sql
        List<Province> list = template.query(sql, new BeanPropertyRowMapper<Province>(Province.class));
        return list;
    }
}

        003:Service层:

                0001:ProvinceService:

public interface ProvinceService {

    public List<Province> findAll();
    //使用redis缓存 
    public String findAllJson();
}

                0002:ProvinceServiceImpl:

public class ProvinceServiceImpl implements ProvinceService {
    //声明dao
    private ProvinceDao dao = new ProvinceDaoImpl();

    @Override
    public List<Province> findAll() {
        return dao.findAll();
    }
    /**
        使用redis缓存
     */
    @Override
    public String findAllJson() {
        //1.先从redis中查询数据
        //1.1获取redis客户端连接
        Jedis jedis = JedisPoolUtils.getJedis();    //JedisPoolUtils是jedis的工具类
        String province_json = jedis.get("province");

        //2判断 province_json 数据是否为null
        if(province_json == null || province_json.length() == 0){
            //redis中没有数据
            System.out.println("redis中没数据,查询数据库...");
            //2.1从数据库中查询
            List<Province> ps = dao.findAll();
            //2.2将list序列化为json
            ObjectMapper mapper = new ObjectMapper();
            try {
                province_json = mapper.writeValueAsString(ps);
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }
            //2.3 将json数据存入redis
            jedis.set("province",province_json);
            //归还连接
            jedis.close();
        }else{
            System.out.println("redis中有数据,查询缓存...");
        }
        return province_json;
    }
}

        004:Servlet层:

@WebServlet("/provinceServlet")
public class ProvinceServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       /* //1.调用service查询
        ProvinceService service = new ProvinceServiceImpl();
        List<Province> list = service.findAll();
        //2.序列化list为json
        ObjectMapper mapper = new ObjectMapper();
        String json = mapper.writeValueAsString(list);*/

        //1.调用service查询
        ProvinceService service = new ProvinceServiceImpl();
        String json = service.findAllJson();

        System.out.println(json);
        //3.响应结果
        response.setContentType("application/json;charset=utf-8");
        response.getWriter().write(json);

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

        005:jsp(页面代码):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>  
    <script src="js/jquery-3.3.1.min.js"></script>  
    <script>
        $(function () {
           
            //发送ajax请求,加载所有省份数据
            $.get("provinceServlet",{},function (data) {
                //[{"id":1,"name":"北京"},{"id":2,"name":"上海"},{"id":3,"name":"广州"},{"id":4,"name":"陕西"}]

                //1.获取select
                var province = $("#province");
                //2.遍历json数组
                $(data).each(function () {
                    //3.创建<option>
                    var option = "<option name='"+this.id+"'>"+this.name+"</option>";

                    //4.调用select的append追加option
                    province.append(option);
                });
            });    
        });      
    </script>
    
</head>
<body>
        <select id="province">
            <option>--请选择省份--</option>
        </select>
</body>
</html>

由于每次都需要查询数据库,速度会慢,但是我们所要查的数据基本不怎么变动,不是经常发生变化的,每一次我都加载数据库,性能会受到影响。所以到现在我们可以使用缓存的方法(redis缓存)

在ProvinceServiceImpl中编写完代码就不用在Servlet层中打注释那样麻烦   可以写成想Servlet中的代码!!直接查询一个json出来

此处就优化完毕了 但是!!!

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

案列 : 提供index.html页面,页面中有一个省份 下拉列表 2. 当 页面加载完成后 发送ajax请求,加载所有省份 的相关文章

  • 如何在实时添加对象时从 Redis 中弹出对象?

    我想让 Node js 进程运行 因为它正在检查 Redis 服务器是否有任何新的弹出内容 另一个进程将偶尔进行推送 而 Node 进程将尝试弹出任何进来的内容 Node 进程将保持运行 有人能给我指出一个好的方向吗 我正在尝试找出如何监听
  • 有没有办法在 Redis 和关系数据库中使用带有 @RedisHash 的实体?

    我正在使用Spring引导 为了将我的实体保存在关系数据库上 我配置了一个数据源和我的域类 例如 Entity Table schema schema name name tb name public class table name ex
  • Redis多插入问题

    我尝试多次插入 但它给了我错误 http pastie org 7337421 http pastie org 7337421 cat mass insert txt 3 r n 3 r nSET r n 3 r nkey r n 5 r
  • Redis 写入 .ssh/authorized_keys

    当前设置 2 个主服务器 12 个工作服务器 工作人员通过 ssh copy id 连接到主设备 主设备和工作人员正在主设备上的 redis 队列中写入数据 过去一周我遇到的问题是 Redis 正在将数据写入authorized keys
  • Redis部署配置-主从复制

    目前我有两台服务器 我已经部署了基于node js Express JS的Web服务API 我正在使用 Redis 来缓存 JSON 字符串 将此设置部署到生产中的最佳选择是什么 我懂了here https stackoverflow co
  • Stackexchange.redis 缺乏“WAIT”支持

    我在客户端应用程序正在使用的负载均衡器后面有 3 个 Web API 服务器 我正在使用这个库来访问具有一个主服务器和几个从服务器的 Redis 集群 目前不支持 WAIT 操作 我需要此功能来存储新创建的用户会话并等待它复制到所有从属服务
  • 仅当尚未设置时才进行原子设置

    仅当尚未在 Redis 中设置时 是否有办法执行原子设置 具体来说 我正在创建一个像 myapp user user email 这样的用户 并且希望 Redis 在 user email 已被占用时返回错误 而不是默默地替换旧值 比如声明
  • PooledRedisClientManager 未释放连接

    我将 json 数据列表存储在 redis 中并使用 ServiceStack c 客户端访问它 我本质上是在管理自己的外键 我在其中存储zrangeid 我使用应用程序内部的接口从zrange然后从 Redis 获取底层 json 对象并
  • 如何统计 Redis 流中未读或已确认的消息?

    使用 Redis 5 0 3 假设我们创建一个名为streamy和一个消费群体consumers XGROUP CREATE streamy consumers MKSTREAM 然后向其中添加一些消息 XADD streamy messa
  • WSL Redis 遇到系统尚未使用 systemd 作为 init 系统(PID 1)启动。无法操作[已关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试遵循本文中讨论的 Redis 安装过程article https www digitalocean com community
  • 库存管理系统的 SQL 与 NoSQL

    我正在开发一个基于 JAVA 的网络应用程序 主要目的是拥有在多个称为渠道的网站上销售的产品的库存 我们将担任所有这些渠道的管理者 我们需要的是 用于管理每个渠道的库存更新的队列 库存表 其中包含每个通道上分配的正确快照 将会话 ID 和其
  • 如果另一个键中的计数器低于零,则从集合中原子删除一个项目?

    雷迪斯2 0 3 在我的 Redis DB 中 我有一组项目 每个项目都有一个与其关联的计数器 MULTI SADD items set foo INCRBY items foo 10000 EXEC 新项目会以随机间隔添加到集合中 当用户
  • Spring Data Redis - Lettuce连接池设置

    尝试在 spring data redis 环境中设置 Lettuce 连接池 下面是代码 Bean LettuceConnectionFactory redisConnectionFactory GenericObjectPoolConf
  • 如何在Redis中进行持久化存储?

    关闭redis服务器后 使用set存储的值被破坏 在这里我找到了使用持久性存储的方法 有人帮助我 如何使用javascript实现这一点 我想将客户端的一些值存储在 redis 数据库中 并且必须在其他客户端中使用该值 您需要配置 Redi
  • 如何在Redis中从hmset()切换到hset()?

    我收到弃用警告 即 Redis hmset 已弃用 请改用 Redis hset 但是 hset 采用第三个参数 我不知道是什么name应该是 info users 10 timestamp datetime utcnow strftime
  • Redis、会话过期和反向查找

    我目前正在构建一个网络应用程序 并想使用 Redis 来存储会话 登录时 会话会使用相应的用户 ID 插入到 Redis 中 并且过期时间设置为 15 分钟 我现在想实现会话的反向查找 获取具有特定用户 ID 的会话 这里的问题是 由于我无
  • Redis是如何实现高吞吐量和高性能的?

    我知道这是一个非常普遍的问题 但是 我想了解允许 Redis 或 MemCached Cassandra 等缓存 以惊人的性能极限工作的主要架构决策是什么 如何维持连接 连接是 TCP 还是 HTTP 我知道它完全是用C写的 内存是如何管理
  • StackExchange.Redis Get 函数抛出 TimeoutException

    我在用着StackExchange Redis与 C 和StackExchangeRedisCacheClient Get函数抛出以下异常 myCacheClient Database StringGet txtKey Text myCac
  • redis dump.rdb / 保存小文件

    Context 我正在使用redis 数据库小于 100 MB 但是 我想进行每日备份 我也在 Ubuntu Server 12 04 上运行 当输入 redis cli save 我不知道 dump rdb 保存到哪里 因为 redis
  • 想要在后台不间断地运行redis-server

    我已经下载了 redis 2 6 16 tar gz 文件并安装成功 安装后我运行 src redis server 它工作正常 但我不想每次都手动运行 src redis server 而是希望 redis server 作为后台进程持续

随机推荐

  • 程序员应该避开的20个低级不良用户体验

    前往老猿Python博文目录 https blog csdn net LaoYuanPython 前2天碰到一件事 只因职业信息没登记汉口银行的系统居然禁止我使用银行卡账号 这样的神操作一看十有八九是程序员干的 由此联想到平时开发中遇到的一
  • Core Java(十三)

    Java API5 0新特性 优化的功能 对编译器进行的优化 静态引入 什么是静态引入 将类的静态成员预先引用进来 直接使用就可以了 例如 System out 直接写成out printl 就可以了 语法 import static 包名
  • H5页面判断来源是 微信小程序、百度小程序、微信浏览器、其他环境

    小程序打开H5页面有一些链接需要隐藏掉 不让用户随意跳转 在页面中引入微信 第一个 百度小程序 第二个 外部 js 在页面的js中判断即可
  • vlan接口类型和划分

    vlan接口类型 access 一般不带标签发送 负责标签压入与剥离 trunk 一般带标签发送 每个trunk接口都有一个pvid hybrid 发的时候可以带多个pvid 控制数据带标签或不带标签发送 access端口收到没有没有带ta
  • .NET MAUI 多平台应用 UI 应用

    NET 多平台应用 UI 使用文档 NET 多平台应用 UI NET MAUI 允许你使用面向 Android iOS macOS Windows 和 Tizen 上的移动和桌面外形规格的 NET 跨平台 UI 工具包生成本机应用 本教程介
  • chrome扩展开发中文教程

    chrome扩展开发中文教程 文档地址 http chrome cenchy com index html 既然是中文文档 可能存在翻译的过程 就会出现翻译更新不及时的情况 如果看最新最准确的文档 请移步到官方文档
  • 轻松高薪之---java基础(一)

    轻松高薪系列将分为五期为大家呈现 java基础 WEB 数据库 框架 技术点五大部分 由于每一个内容比较多 每一部分将分为若干小结进行分享 欢迎持续跟踪 一 Java 基础 1 Java 基础 知识 1 1 面向对象的特征 了解 面向对象的
  • CUDA编程(七)共享内存与Thread的同步

    CUDA编程 七 共享内存与Thread的同步 在之前我们通过block 继续增大了线程的数量 结果还是比较令人满意的 但是也产生了一个新的问题 即 我们在CPU端的加和压力变得很大 所以我们想到能不能从GPU上直接完成这个工作 我们知道每
  • ES6笔记( 五 )- Object

    目录 新增的对象字面量语法 成员速写 方法速写 计算属性名 新增的Object方法 Object is Object assign Object setPrototypeOf Object keys Object values Object
  • 内联函数总结

    定义 它们看起来像函数 运作起来像函数 比宏 macro 要好得多 使用时还不需要承担函数调用的负担 当内联一个函数时 编译器可以对函数体执行特定环境下的优化工作 这样的优化对 正常 的函数调用时不可能的 规则 inline关键字必须和函数
  • vue+vue-matomo实现埋点

    安装 npm install vue matomo save main js import createApp from vue import manotoUse from utils manotoUse import router fro
  • linux 符号连接文件,Linux 硬链接和软链接(符号链接)

    什么是目录 Linux 文件系统是树状结构的 根目录下存在一系列子目录 目录里边有文件或者子目录 但问题在于 目录是什么 文件又是什么 文件是 数据 属性 比如名字 创建时间 所有者之类 目录是 一个列表 列表中的每一项是 inode gt
  • 婴幼儿奶酪怎么选

    总原则 天然奶酪 高钙 少钠 无添加剂 奶酪 分天然奶酪 和再制奶酪 天然奶酪成分非常简单 是主要以牛奶为原材料 没有经过深加工的原生奶酪 再制奶酪配料表复杂 是天然奶酪加上水 以及添加剂后的产物 营养价值降低不少 天然奶酪 并且高钙低钠是
  • Ubuntu18.04 “A start job is running for Raise network interface(5min 1s)”

    在启动Ubuntu时出现如下情况 5min过后 虽然会进入ubuntu的用户登陆界面 但是登陆成功后 输入ifconfig命令 如下图 会发现ens33中没有ip地址 因此xshell无法与该虚拟机进行远程连接 经过分析 我采用的连接方式为
  • java swing 天天酷跑游戏 功能完善 完整代码 下载即可以运行

    今天天气不错 利用一段时间给大家分享一个天天酷跑的游戏435 该游戏也属于一个比较优秀的作品 整个系统界面漂亮 有完整得源码 希望大家可以喜欢 喜欢的帮忙点赞和关注 一起编程 一起进步 开发环境 开发语言为Java 开发环境Eclipse或
  • 使用 styled-components 定义组件样式

    每个项目产品都要加埋点 加500行埋点是不是会占用你一两天的时间而且很容易犯错 想只用一小时准确加完这500行埋点剩下一天喝茶聊天么 来试试这520web工具 高效加埋点 目前我们公司100号前端都在用 因为很好用 所以很自然普及开来了 推
  • django-xadmin自定义widget插件(自定义详情页字段的显示样式)

    有时候我们想要修改xadmin详情页字段的显示方式 比如django默认的ImageField在后台显示的是image的url 我们更希望看到image的缩略图 再比如django将多对多字段显示为多选的下拉框或者左右选择栏的方式 向图片展
  • axios+qs发送ajax请求获取接口数据

    axios qs发送ajax请求获取接口数据 一 html页面中需要引入axios和qs库 如下 二 后台接口如下 1 getDemo1接口 测试传参id 必须 和 name 不必须 CrossOrigin RestController p
  • sort排序

    文章目录 一 Arrays sort 1 1 基本数据类型排序 1 2 引用对象类型排序 二 Collections sort Java中常用的数组或集合排序的方法有两个 一个是java util Arrays中的静态方法Arrays so
  • 案列 : 提供index.html页面,页面中有一个省份 下拉列表 2. 当 页面加载完成后 发送ajax请求,加载所有省份

    一 首先明确需求 案例需求 1 提供index html页面 页面中有一个省份 下拉列表 2 当 页面加载完成后 发送ajax请求 加载所有省份 二 数据库编写 CREATE DATABASE NBA 创建数据库 USE NBA 使用数据库