SSH框架和Redis的整合(2)
5. 添加功能的实现
新建一个Action:RClasAction,实现向Redis添加课程数据,并同步到MySQL。
package com.school.action; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import com.opensymphony.xwork2.ActionSupport;
import com.school.entity.Clas;
import com.school.redisclient.RedisService;
import com.school.redisclient.RedisTool;
import com.school.service.ClasService; @SuppressWarnings("serial")
public class RClasAction extends ActionSupport { @Autowired
private ClasService clasService; RedisService rs = RedisTool.getRedisService();
List<Clas> claslist = new ArrayList<Clas>(); private Clas clas;
public Clas getClas() {
return clas;
}
public void setClas(Clas Clas) {
this.clas = Clas;
} public String execute(){
saveClas(clas);
return SUCCESS;
} @SuppressWarnings({ "rawtypes", "unchecked" })
private void saveClas(Clas c){
List<String> ids = rs.getList("clas:id");
// clas:id
int num = ids.size();
int id = Integer.parseInt(ids.get(num-1)) + 1;
rs.rightPushList("clas:id", String.valueOf(id));
// clas:count
int count = Integer.parseInt(rs.get("clas:count"));
rs.set("clas:count", String.valueOf(count+1), -1);
// 增加
HashMap hashmap = new HashMap();
hashmap.put("ID", String.valueOf(id));
hashmap.put("NAME", clas.getName());
hashmap.put("COMMENT", clas.getComment());
rs.addHash("clas:" + id, hashmap);
// 同步到MySQL
clasService.saveClas(clas);
} }
clas:id是一个List类型的Key-Value,记录了所有的课程ID,取出最后一个ID,再+1,作为增加的课程的ID,同时clas:count的值也要+1。使用addHash()方法向Redis添加了一个Hash类型的Key-Value(也就是一门课程):
@SuppressWarnings({ "unchecked", "rawtypes" })
public synchronized void addHash(K key, HashMap map){
redisTemplate.opsForHash().putAll(key, map);
}
同时将该门课程增加到MySQL。
6. 删除功能的实现
新建一个Action:RClasDeleteAction,实现删除Redis的课程数据,并同步到MySQL。
package com.school.action; import org.springframework.beans.factory.annotation.Autowired; import com.opensymphony.xwork2.ActionSupport;
import com.school.redisclient.RedisService;
import com.school.redisclient.RedisTool;
import com.school.service.ClasService; @SuppressWarnings("serial")
public class RClasDeleteAction extends ActionSupport { @Autowired
private ClasService clasService; RedisService rs = RedisTool.getRedisService(); private int id;
public int getId(){
return id;
}
public void setId(int id){
this.id=id;
} public String execute(){
deleteClas(id);
// 同步到MySQL
clasService.deleteClas(id);
return SUCCESS;
} private void deleteClas(int id){
// 删除
rs.del("clas:" + id);
// clas:count
int count = Integer.parseInt(rs.get("clas:count"));
rs.set("clas:count", String.valueOf(count-1), -1);
// clas:id
rs.delListItem("clas:id", String.valueOf(id));
} }
直接删除clas:id,再将clas:count的值-1,这两步比较简单,复杂的是从clas:id中删除该课程的ID,使用了delListItem()方法来实现:
@Override
public synchronized void delListItem(K key, V value){
redisTemplate.opsForList().remove(key, 1, value);
}
redisTemplate.opsForList().remove()方法类似于LREM命令。最后在MySQL中也删除相同的课程。
7. 修改功能的实现
新建一个Action:RClasUpdateAction,实现删除Redis的课程数据,并同步到MySQL。
package com.school.action; import java.util.HashMap; import org.springframework.beans.factory.annotation.Autowired; import com.opensymphony.xwork2.ActionSupport;
import com.school.entity.Clas;
import com.school.redisclient.RedisService;
import com.school.redisclient.RedisTool;
import com.school.service.ClasService; @SuppressWarnings("serial")
public class RClasUpdateAction extends ActionSupport{ @Autowired
private ClasService clasService; RedisService rs = RedisTool.getRedisService(); private Clas clas;
public Clas getClas() {
return clas;
}
public void setClas(Clas clas) {
this.clas = clas;
} @SuppressWarnings({ "unchecked", "rawtypes" })
public String execute(){
HashMap hashmap = new HashMap();
hashmap.put("ID", String.valueOf(clas.getId()));
hashmap.put("NAME", clas.getName());
hashmap.put("COMMENT", clas.getComment());
rs.putHash("clas:" + clas.getId(), hashmap);
// 同步到MySQL
clasService.updateClas(clas);
return SUCCESS;
} }
使用了putHash()方法来更新:
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public synchronized void putHash(K key, HashMap map){
redisTemplate.boundHashOps(key).putAll(map);
}
同时在MySQL做相同的更新操作。
SSH框架和Redis的整合(2)的更多相关文章
- SSH框架和Redis的整合(1)
一个已有的Struts+Spring+Hibernate项目,以前使用MySQL数据库,现在想把Redis也整合进去. 1. 相关Jar文件 下载并导入以下3个Jar文件: commons-pool2 ...
- J2EE进阶(六)SSH框架工作流程项目整合实例讲解
J2EE进阶(六)SSH框架工作流程项目整合实例讲解 请求流程 经过实际项目的进行,结合三大框架各自的运行机理可分析得出SSH整合框架的大致工作流程. 首先查看一下客户端的请求信息: 对于一个Web项 ...
- SSH框架整合
SSH框架整合 一.原理图 action:(struts2) 1.获取表单的数据 2.表单的验证,例如非空验证,email验证等 3.调用service,并把数据传递给service Service: ...
- ssh框架整合---- spring 4.0 + struts 2.3.16 + maven ss整合超简单实例
一 . 需求 学了这么久的ssh,一直都是别人整合好的框架去写代码,自己实际动手时才发现框架配置真是很坑爹,一不小心就踏错,真是纸上得来终觉浅! 本文将记录整合struts + spring的过程 , ...
- dwr与ssh框架整合教程
(1)dwr与ssh框架整合教程dwr框架介绍. DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开 发人员开发包含AJ ...
- [Java] SSH框架笔记_框架整合示例(一)
本文描述的是框架SSH集成的示例,由于在这个过程中有一些小的细节容易被遗忘,特别撰写了一篇小的博文来记录这个过程,希望对自己以及后来者能够起到积极意义. 本文中使用的框架和版本号为: struts-2 ...
- 【转载】SSH框架总结(将网上朋友写的给整合了下)
一.Struts 在没有学习SSH框架前,我们一般采用Jsp+javabean+servlet开发,这里就是MVC架构.而Struts其实就是替代了Servlet,我们知道Servlet在一般的开发中 ...
- ssh框架整合之登录以及增删改查
1.首先阐述一下我用得开发工具,myeclipse2017+oracle,所以我的基本配置步骤可能不一样,下面我用几张图来详解我的开发步骤. ---1先配置structs (Target 选择apac ...
- Struts2+Spring+Hibernate实现员工管理增删改查功能(一)之ssh框架整合
前言 转载请标明出处:http://www.cnblogs.com/smfx1314/p/7795837.html 本项目是我写的一个练习,目的是回顾ssh框架的整合以及使用.项目介绍: ...
随机推荐
- Tomcat一个BUG造成CLOSE_WAIT
之前应该提过,我们线上架构整体重新架设了,应用层面使用的是Spring Boot,前段日子因为一些第三方的原因,略有些匆忙的提前开始线上的内测了.然后运维发现了个问题,服务器的HTTPS端口有大量的C ...
- URL安全的Base64编码
Base64编码可用于在HTTP环境下传递较长的标识信息.在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式.此时,采用Base64编码不仅比较简短,同时也具有不可 ...
- WPF 微信 MVVM
公司的同事离职了,接下来的日子可能会忙碌,能完善DEMO的时间也会少了,因此,把做的简易DEMO整体先记录一下,等后续不断的完善. 参考两位大神的日志:WEB版微信协议部分功能分析.[完全开源]微信客 ...
- dubbox微服务实例及引发的“血案”
Dubbo 是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成. 主要核心部件: Remoting: 网络通信框架 ...
- <译>通过PowerShell工具跨多台服务器执行SQL脚本
有时候,当我们并没有合适的第三方工具(大部分需要付费)去管理多台数据库服务器,那么如何做最省力.省心呢?!Powershell一个强大的工具,可以很方便帮到我们处理日常的数据库维护工作 .简单的几步搞 ...
- Unity3D框架插件uFrame实践记录(一)
1.概览 uFrame是提供给Unity3D开发者使用的一个框架插件,它本身模仿了MVVM这种架构模式(事实上并不包含Model部分,且多出了Controller部分).因为用于Unity3D,所以它 ...
- 基于fis3的组件可视化道路
首先说明一下,即使不熟悉fis3,阅读文本应该也会有所收获. 本文以fis-parser-imweb-tplv2插件为模板插件,目的不在于使用哪个模板,而是组件可视化的实现思路,不必担心. 先说说模板 ...
- Java—恶心的java.lang.NumberFormatException解决
项目中要把十六进制字符串转化为十进制, 用到了到了Integer.parseInt(str1.trim(), 16):这个是不是后抛出java.lang.NumberFormatException异常 ...
- IOS开发基础知识--碎片51
1:https关闭证书跟域名的验证 AFSecurityPolicy *securityPolicy = [AFSecurityPolicy defaultPolicy]; securityPolic ...
- myrocks复制中断问题排查
背景 mysql可以支持多种不同的存储引擎,innodb由于其高效的读写性能,并且支持事务特性,使得它成为mysql存储引擎的代名词,使用非常广泛.随着SSD逐渐普及,硬件存储成本越来越高,面向写优化 ...