SpringMVC+redis整合
在网络上有一个很多人转载的springmvc+redis整合的案例,不过一直不完整,也是被各种人装来转去,现在基本将该框架搭建起来。
- package com.pudp.bae.base;
- import java.io.Serializable;
- public abstract class BaseModel implements Serializable{
- }
- package com.pudp.bae.base;
- import java.util.Map;
- import org.springframework.web.servlet.ModelAndView;
- public class BaseMultiController {
- protected ModelAndView toView(final String url,final Map<String,Object> map)
- {
- ModelAndView view = new ModelAndView(url);
- return view;
- }
- }
- package com.pudp.bae.base;
- import java.io.Serializable;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.data.redis.core.RedisTemplate;
- import org.springframework.data.redis.serializer.RedisSerializer;
- public abstract class RedisGeneratorDao<K extends Serializable, V extends Serializable> {
- @Autowired
- protected RedisTemplate<K,V> redisTemplate ;
- /**
- * 设置redisTemplate
- * @param redisTemplate the redisTemplate to set
- */
- public void setRedisTemplate(RedisTemplate<K, V> redisTemplate) {
- this.redisTemplate = redisTemplate;
- }
- /**
- * 获取 RedisSerializer
- * <br>------------------------------<br>
- */
- protected RedisSerializer<String> getRedisSerializer() {
- return redisTemplate.getStringSerializer();
- }
- }
- package com.pudp.bae.controller;
- import java.util.HashMap;
- import java.util.Map;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.ModelAttribute;
- import org.springframework.web.bind.annotation.PathVariable;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RequestMethod;
- import org.springframework.web.servlet.ModelAndView;
- import com.pudp.bae.base.BaseMultiController;
- import com.pudp.bae.model.Member;
- import com.pudp.bae.service.MemberService;
- @Controller
- @RequestMapping(value = "/member")
- public class MemberController extends BaseMultiController {
- @Autowired
- private MemberService memberService;
- public void setMemberService(MemberService memberService) {
- this.memberService = memberService;
- }
- @RequestMapping(value = { "/add", "/add.html" }, method = { RequestMethod.GET })
- public ModelAndView add(HttpServletRequest request,
- HttpServletResponse response) {
- Map<String, Object> map = new HashMap<String, Object>();
- Member member = new Member();
- member.setId("1");
- member.setNickname("guoxiaoming");
- this.memberService.add(member);
- return toView("add", map);
- }
- @RequestMapping(value = { "/add", "/add.html" }, method = { RequestMethod.POST })
- public ModelAndView addMember(HttpServletRequest request,
- HttpServletResponse response,
- @ModelAttribute("member") Member member) {
- Map<String, Object> map = new HashMap<String, Object>();
- System.out.println(member);
- map.put("message", "成功添加数据到库," + member);
- this.memberService.add(member);
- return toView("message", map);
- }
- @RequestMapping(value = { "/{id:\\d+}/query", "/{id:\\d+}/query.html" }, method = {
- RequestMethod.GET, RequestMethod.POST })
- public ModelAndView queryMember(HttpServletRequest request,
- HttpServletResponse response, @PathVariable("id") String id) {
- Map<String, Object> map = new HashMap<String, Object>();
- System.out.println(id);
- Member member = this.memberService.get(id);
- if (null != member) {
- map.put("message", "查询Id=" + id + "的用户名为:" + member.getNickname());
- } else {
- map.put("message", "没有查询到与Id=" + id + "相关的数据");
- }
- return toView("message", map);
- }
- @RequestMapping(value = { "/{id:\\d+}/delete", "/{id:\\d+}/delete.html" }, method = {
- RequestMethod.GET, RequestMethod.POST })
- public ModelAndView deleteMember(HttpServletRequest request,
- HttpServletResponse response, @PathVariable("id") String id) {
- Map<String, Object> map = new HashMap<String, Object>();
- try {
- this.memberService.delete(id);
- map.put("message", "删除Id为" + id + "的用户成功.");
- } catch (Exception e) {
- e.printStackTrace();
- map.put("message", "删除Id为" + id + "的用户失败, " + e.getMessage());
- }
- return toView("message", map);
- }
- }
- package com.pudp.bae.dao.redis;
- import java.util.List;
- import com.pudp.bae.model.Member;
- public interface MemberDao {
- boolean add(Member member);
- abstract boolean add(List<Member> list);
- void delete(String key);
- Member get(String keyId);
- }
- package com.pudp.bae.dao.redis;
- import java.util.ArrayList;
- import java.util.List;
- import org.springframework.dao.DataAccessException;
- import org.springframework.data.redis.connection.RedisConnection;
- import org.springframework.data.redis.core.RedisCallback;
- import org.springframework.data.redis.serializer.RedisSerializer;
- import org.springframework.stereotype.Repository;
- import org.springframework.util.Assert;
- import com.pudp.bae.base.RedisGeneratorDao;
- import com.pudp.bae.model.Member;
- @Repository(value="memberDao")
- public class MemberDaoImpl extends RedisGeneratorDao<String,Member> implements MemberDao{
- /**
- * 添加对象
- */
- @Override
- public boolean add(final Member member) {
- boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {
- public Boolean doInRedis(RedisConnection connection)
- throws DataAccessException {
- RedisSerializer<String> serializer = getRedisSerializer();
- byte[] key = serializer.serialize(member.getId());
- byte[] name = serializer.serialize(member.getNickname());
- return connection.setNX(key, name);
- }
- });
- return result;
- }
- /**
- * 添加集合
- */
- @Override
- public boolean add(final List<Member> list) {
- Assert.notEmpty(list);
- boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {
- public Boolean doInRedis(RedisConnection connection)
- throws DataAccessException {
- RedisSerializer<String> serializer = getRedisSerializer();
- for (Member member : list) {
- byte[] key = serializer.serialize(member.getId());
- byte[] name = serializer.serialize(member.getNickname());
- connection.setNX(key, name);
- }
- return true;
- }
- }, false, true);
- return result;
- }
- /**
- * 删除对象 ,依赖key
- */
- @Override
- public void delete(String key) {
- List<String> list = new ArrayList<String>();
- list.add(key);
- delete(list);
- }
- /**
- * 删除集合 ,依赖key集合
- */
- public void delete(List<String> keys) {
- redisTemplate.delete(keys);
- }
- /**
- * 修改对象
- */
- public boolean update(final Member member) {
- String key = member.getId();
- if (get(key) == null) {
- throw new NullPointerException("数据行不存在, key = " + key);
- }
- boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {
- public Boolean doInRedis(RedisConnection connection)
- throws DataAccessException {
- RedisSerializer<String> serializer = getRedisSerializer();
- byte[] key = serializer.serialize(member.getId());
- byte[] name = serializer.serialize(member.getNickname());
- connection.set(key, name);
- return true;
- }
- });
- return result;
- }
- /**
- * 根据key获取对象
- */
- @Override
- public Member get(final String keyId) {
- Member result = redisTemplate.execute(new RedisCallback<Member>() {
- public Member doInRedis(RedisConnection connection)
- throws DataAccessException {
- RedisSerializer<String> serializer = getRedisSerializer();
- byte[] key = serializer.serialize(keyId);
- byte[] value = connection.get(key);
- if (value == null) {
- return null;
- }
- String nickname = serializer.deserialize(value);
- return new Member(keyId, nickname);
- }
- });
- return result;
- }
- }
- package com.pudp.bae.model;
- import com.pudp.bae.base.BaseModel;
- public class Member extends BaseModel{
- private static final long serialVersionUID = -1959528436584592183L;
- private String id;
- private String nickname;
- public Member(){}
- public Member(String id, String nickname){
- this.setId(id);
- this.setNickname(nickname);
- }
- public String getId() {
- return id;
- }
- public void setId(String id) {
- this.id = id;
- }
- public String getNickname() {
- return nickname;
- }
- public void setNickname(String nickname) {
- this.nickname = nickname;
- }
- }
- package com.pudp.bae.service;
- import javax.annotation.Resource;
- import com.pudp.bae.dao.redis.MemberDao;
- import com.pudp.bae.model.Member;
- public class MemberService {
- @Resource(name="memberDao")
- private MemberDao memberDao;
- public void setMemberDao(MemberDao memberDao)
- {
- this.memberDao = memberDao;
- }
- public void add(Member member){
- memberDao.add(member);
- }
- public void delete(String id){
- memberDao.delete(id);
- }
- public Member get(String id)
- {
- return memberDao.get(id);
- }
- }
redis-context.xml
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:p="http://www.springframework.org/schema/p"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xmlns:context="http://www.springframework.org/schema/context"
- xsi:schemaLocation="
- http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
- http://www.springframework.org/schema/tx
- http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-3.0.xsd
- ">
- <!-- scanner redis properties -->
- <context:property-placeholder location="/WEB-INF/property/redis.properties" />
- <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
- <property name="maxIdle" value="${redis.maxIdle}" />
- <property name="maxActive" value="${redis.maxActive}" />
- <property name="maxWait" value="${redis.maxWait}" />
- <property name="testOnBorrow" value="${redis.testOnBorrow}" />
- </bean>
- <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
- p:host-name="${redis.host}"
- p:port="${redis.port}"
- p:password="${redis.pass}"
- p:pool-config-ref="poolConfig"/>
- <bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">
- <property name="connectionFactory" ref="connectionFactory" />
- </bean>
- </beans>
spring-context.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
- xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"
- xmlns:util="http://www.springframework.org/schema/util"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
- http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
- http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd">
- <!-- 激活@Controller模式 -->
- <mvc:annotation-driven />
- <!-- 对包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 需要更改 -->
- <context:component-scan base-package="com.pudp.bae.*" />
- <bean id="memberService" class="com.pudp.bae.service.MemberService"/>
- <!-- 引入同文件夹下的redis属性配置文件 -->
- <import resource="redis-context.xml"/>
- </beans>
spring-mvc.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:mvc="http://www.springframework.org/schema/mvc"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-3.0.xsd
- http://www.springframework.org/schema/mvc
- http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
- <!-- 配置视图解析器,把控制器的逻辑视频映射为真正的视图 -->
- <!-- /WEB-INF/jsp/start.jsp -->
- <bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
- <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
- <property name="prefix" value="/WEB-INF/jsp/" />
- <property name="suffix" value=".jsp" />
- </bean>
- </beans>
redis.properties
- # Redis settings
- #redis.host=192.168.20.101
- #redis.port=6380
- #redis.pass=foobared
- redis.host=127.0.0.1
- redis.port=6379
- redis.pass=xx
- redis.maxIdle=300
- redis.maxActive=600
- redis.maxWait=1000
- redis.testOnBorrow=true
web.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app version="2.4" aaxmlns="http://java.sun.com/xml/ns/j2ee"
- aaxmlns:xsi="w3.org/2001/XMLSchema-instance"
- aaxsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
- <display-name>SpringMVCRedis</display-name>
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListener
- </listener-class>
- </listener>
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>/WEB-INF/context/spring-context.xml</param-value>
- </context-param>
- <filter>
- <filter-name>SpringEncodingFilter</filter-name>
- <filter-class>org.springframework.web.filter.CharacterEncodingFilter
- </filter-class>
- <init-param>
- <param-name>encoding</param-name>
- <param-value>UTF-8</param-value>
- </init-param>
- <init-param>
- <param-name>forceEncoding</param-name>
- <param-value>true</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>SpringEncodingFilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- <servlet>
- <servlet-name>mvc</servlet-name>
- <servlet-class>org.springframework.web.servlet.DispatcherServlet
- </servlet-class>
- <init-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>/WEB-INF/context/spring-mvc.xml</param-value>
- </init-param>
- <load-on-startup>2</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>mvc</servlet-name>
- <url-pattern>/</url-pattern>
- </servlet-mapping>
- <welcome-file-list>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
- </web-app>
2018年5月16号更
时过境迁,没想到两年多前的一个笔记还有那么多人关注,在此补上当时源码包(幸好找到了)
https://download.csdn.net/download/wuxinliulei/10417976
附上csdn的下载路径
SpringMVC+redis整合的更多相关文章
- ssm+redis整合(通过cache方式)
这几天的研究ssm redis 终于进入主题了,今天参考了网上一些文章搭建了一下ssm+redis整合,特别记录下来以便以后可以查询使用,有什么不足请大牛们提点 项目架构 1.pom.xml < ...
- [手把手教程][JavaWeb]优雅的SpringMvc+Mybatis整合之路
来源于:http://www.jianshu.com/p/5124eef40bf0 [手把手教程][JavaWeb]优雅的SpringMvc+Mybatis整合之路 手把手教你整合最优雅SSM框架:S ...
- Spring+springmvc+Mybatis整合案例 annotation版(myeclipse)详细版
Spring+springmvc+Mybatis整合案例 Version:annotation版 文档结构图: 从底层开始做起: 01.配置web.xml文件 <?xml version=&qu ...
- Spring+springmvc+Mybatis整合案例 xml配置版(myeclipse)详细版
Spring+springmvc+Mybatis整合案例 Version:xml版(myeclipse) 文档结构图: 从底层开始做起: 01.配置web.xml文件 <?xml version ...
- sonne_game网站开发03 spring-mvc+freemarker整合
今天的任务就是在spring+mybatis+springmvc的基础上,将freemarker整合进来. freemarker是什么? freemarker是一种模板引擎.它的目的是基于模板和数据, ...
- Nginx+Lua+Redis整合实现高性能API接口 - 网站服务器 - LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区! - Powered by Discuz!
Nginx+Lua+Redis整合实现高性能API接口 - 网站服务器 - LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区! - Powered by Disc ...
- SpringMVC 中整合之JSON、XML
每次看到好的博客我就想好好的整理起来,便于后面自己复习,同时也共享给网络上的伙伴们! 博客地址: springMVC整合Jaxb2.xStream: http://www.cnblogs.com/h ...
- 框架篇:Spring+SpringMVC+hibernate整合开发
前言: 最近闲的蛋疼,搭个框架写成博客记录下来,拉通一下之前所学知识,顺带装一下逼. 话不多说,我们直接步入正题. 准备工作: 1/ IntelliJIDEA的安装配置:jdk/tomcat等..(本 ...
- IDEA下使用maven构建web项目(SpringMVC+Mybatis整合)
需求背景:由于最近总是接到一些需求,需要配合前端团队快速建设移动端UI应用或web应用及后台业务逻辑支撑的需求,若每次都复用之前复杂业务应用的项目代码,总会携带很多暂时不会用到的功能或组件,这样的初始 ...
随机推荐
- Google Map Api 谷歌地图接口整理
一:基本知识: 1. 使用谷歌地图 API 的第一步就是要注册一个 API 密钥,需要注重一下两点: 1.假如使用 API 的页面还没有发布,只是在本地调试,可以不用密钥,随便用个字符串代替就可以了. ...
- 跟我学习dubbo-使用Maven构建Dubbo服务的可执行jar包(4)
Dubbo服务的运行方式: 1.使用Servlet容器运行(Tomcat.Jetty等)----不可取 缺点:增加复杂性(端口.管理) 浪费资源(内存) 官方:服务容器是一个standalone的启动 ...
- Android 联系人字母排序(仿微信)
现在很多APP只要涉及到联系人的界面,几乎都会采取字母排序以及导航的方式.作为程序猿,这种已经普及的需求还是需要学习的,于是小生开始了在网上默默的学习之路,网上学习的资料质量参差不齐,不过也有很不错的 ...
- 集合类学习之Hashmap机制研究
1.遍历的两种实现方法 //新建 Map map=new HashMap(); //存储值 map.put() ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 //遍历方式 ...
- 【学习笔记】【C语言】循环结构-for
1.使用: for (语句1; 条件; 语句2) { 循环体 } 语句1:初始化语句 语句2:增量语句(执行完循环体后再执行的语句) 1.for一开始就会执行一次语句1(整个for循环 ...
- C# 数据操作工具类
CREATE PROCEDURE [dbo].[RecordFromPage] @SelectList VARCHAR(max), @TableSource VARCHAR(100), @Search ...
- VS2013 不能打开DTCMS项目 的解决办法
<system.webServer> <validation validateIntegratedModeConfiguration="false"/> & ...
- 20141124-JS 变量,数据类型
变量: 变量是JS中存储信息的容器,必须以字母开头. 格式: 定义变量只能用 var 定义,用 = 赋值. <script> var x=2; </script> 字符串型的值 ...
- (转)RabbitMQ消息队列(四):分发到多Consumer(Publish/Subscribe)
上篇文章中,我们把每个Message都是deliver到某个Consumer.在这篇文章中,我们将会将同一个Message deliver到多个Consumer中.这个模式也被成为 "pub ...
- nyoj---t448(寻找最大数)
描述 请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大, 比如当n=92081346718538,m=10时,则新的最大数是9888 输入 第一行输入一个正整数T,表示有T组测 ...