在网络上有一个很多人转载的springmvc+redis整合的案例,不过一直不完整,也是被各种人装来转去,现在基本将该框架搭建起来。

  1. package com.pudp.bae.base;
  2.  
  3. import java.io.Serializable;
  4.  
  5. public abstract class BaseModel implements Serializable{
  6.  
  7. }

  

  1. package com.pudp.bae.base;
  2.  
  3. import java.util.Map;
  4.  
  5. import org.springframework.web.servlet.ModelAndView;
  6.  
  7. public class BaseMultiController {
  8. protected ModelAndView toView(final String url,final Map<String,Object> map)
  9. {
  10. ModelAndView view = new ModelAndView(url);
  11. return view;
  12. }
  13. }
  1. package com.pudp.bae.base;
  2.  
  3. import java.io.Serializable;
  4.  
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.data.redis.core.RedisTemplate;
  7. import org.springframework.data.redis.serializer.RedisSerializer;
  8.  
  9. public abstract class RedisGeneratorDao<K extends Serializable, V extends Serializable> {
  10.  
  11. @Autowired
  12. protected RedisTemplate<K,V> redisTemplate ;
  13.  
  14. /**
  15. * 设置redisTemplate
  16. * @param redisTemplate the redisTemplate to set
  17. */
  18. public void setRedisTemplate(RedisTemplate<K, V> redisTemplate) {
  19. this.redisTemplate = redisTemplate;
  20. }
  21.  
  22. /**
  23. * 获取 RedisSerializer
  24. * <br>------------------------------<br>
  25. */
  26. protected RedisSerializer<String> getRedisSerializer() {
  27. return redisTemplate.getStringSerializer();
  28. }
  29.  
  30. }
  1. package com.pudp.bae.controller;
  2.  
  3. import java.util.HashMap;
  4. import java.util.Map;
  5.  
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8.  
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.stereotype.Controller;
  11. import org.springframework.web.bind.annotation.ModelAttribute;
  12. import org.springframework.web.bind.annotation.PathVariable;
  13. import org.springframework.web.bind.annotation.RequestMapping;
  14. import org.springframework.web.bind.annotation.RequestMethod;
  15. import org.springframework.web.servlet.ModelAndView;
  16.  
  17. import com.pudp.bae.base.BaseMultiController;
  18. import com.pudp.bae.model.Member;
  19. import com.pudp.bae.service.MemberService;
  20.  
  21. @Controller
  22. @RequestMapping(value = "/member")
  23. public class MemberController extends BaseMultiController {
  24.  
  25. @Autowired
  26. private MemberService memberService;
  27.  
  28. public void setMemberService(MemberService memberService) {
  29. this.memberService = memberService;
  30. }
  31.  
  32. @RequestMapping(value = { "/add", "/add.html" }, method = { RequestMethod.GET })
  33. public ModelAndView add(HttpServletRequest request,
  34. HttpServletResponse response) {
  35. Map<String, Object> map = new HashMap<String, Object>();
  36. Member member = new Member();
  37. member.setId("1");
  38. member.setNickname("guoxiaoming");
  39. this.memberService.add(member);
  40.  
  41. return toView("add", map);
  42. }
  43.  
  44. @RequestMapping(value = { "/add", "/add.html" }, method = { RequestMethod.POST })
  45. public ModelAndView addMember(HttpServletRequest request,
  46. HttpServletResponse response,
  47. @ModelAttribute("member") Member member) {
  48. Map<String, Object> map = new HashMap<String, Object>();
  49. System.out.println(member);
  50. map.put("message", "成功添加数据到库," + member);
  51. this.memberService.add(member);
  52. return toView("message", map);
  53. }
  54.  
  55. @RequestMapping(value = { "/{id:\\d+}/query", "/{id:\\d+}/query.html" }, method = {
  56. RequestMethod.GET, RequestMethod.POST })
  57. public ModelAndView queryMember(HttpServletRequest request,
  58. HttpServletResponse response, @PathVariable("id") String id) {
  59. Map<String, Object> map = new HashMap<String, Object>();
  60. System.out.println(id);
  61. Member member = this.memberService.get(id);
  62. if (null != member) {
  63. map.put("message", "查询Id=" + id + "的用户名为:" + member.getNickname());
  64. } else {
  65. map.put("message", "没有查询到与Id=" + id + "相关的数据");
  66. }
  67. return toView("message", map);
  68. }
  69.  
  70. @RequestMapping(value = { "/{id:\\d+}/delete", "/{id:\\d+}/delete.html" }, method = {
  71. RequestMethod.GET, RequestMethod.POST })
  72. public ModelAndView deleteMember(HttpServletRequest request,
  73. HttpServletResponse response, @PathVariable("id") String id) {
  74. Map<String, Object> map = new HashMap<String, Object>();
  75. try {
  76. this.memberService.delete(id);
  77. map.put("message", "删除Id为" + id + "的用户成功.");
  78. } catch (Exception e) {
  79. e.printStackTrace();
  80. map.put("message", "删除Id为" + id + "的用户失败, " + e.getMessage());
  81. }
  82. return toView("message", map);
  83. }
  84.  
  85. }

  

  1. package com.pudp.bae.dao.redis;
  2.  
  3. import java.util.List;
  4.  
  5. import com.pudp.bae.model.Member;
  6.  
  7. public interface MemberDao {
  8. boolean add(Member member);
  9.  
  10. abstract boolean add(List<Member> list);
  11.  
  12. void delete(String key);
  13.  
  14. Member get(String keyId);
  15.  
  16. }

 

  1. package com.pudp.bae.dao.redis;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5.  
  6. import org.springframework.dao.DataAccessException;
  7. import org.springframework.data.redis.connection.RedisConnection;
  8. import org.springframework.data.redis.core.RedisCallback;
  9. import org.springframework.data.redis.serializer.RedisSerializer;
  10. import org.springframework.stereotype.Repository;
  11. import org.springframework.util.Assert;
  12.  
  13. import com.pudp.bae.base.RedisGeneratorDao;
  14. import com.pudp.bae.model.Member;
  15.  
  16. @Repository(value="memberDao")
  17. public class MemberDaoImpl extends RedisGeneratorDao<String,Member> implements MemberDao{
  18.  
  19. /**
  20. * 添加对象
  21. */
  22. @Override
  23. public boolean add(final Member member) {
  24. boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {
  25. public Boolean doInRedis(RedisConnection connection)
  26. throws DataAccessException {
  27. RedisSerializer<String> serializer = getRedisSerializer();
  28. byte[] key = serializer.serialize(member.getId());
  29. byte[] name = serializer.serialize(member.getNickname());
  30. return connection.setNX(key, name);
  31. }
  32. });
  33. return result;
  34. }
  35.  
  36. /**
  37. * 添加集合
  38. */
  39. @Override
  40. public boolean add(final List<Member> list) {
  41. Assert.notEmpty(list);
  42. boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {
  43. public Boolean doInRedis(RedisConnection connection)
  44. throws DataAccessException {
  45. RedisSerializer<String> serializer = getRedisSerializer();
  46. for (Member member : list) {
  47. byte[] key = serializer.serialize(member.getId());
  48. byte[] name = serializer.serialize(member.getNickname());
  49. connection.setNX(key, name);
  50. }
  51. return true;
  52. }
  53. }, false, true);
  54. return result;
  55. }
  56.  
  57. /**
  58. * 删除对象 ,依赖key
  59. */
  60. @Override
  61. public void delete(String key) {
  62. List<String> list = new ArrayList<String>();
  63. list.add(key);
  64. delete(list);
  65. }
  66.  
  67. /**
  68. * 删除集合 ,依赖key集合
  69. */
  70. public void delete(List<String> keys) {
  71. redisTemplate.delete(keys);
  72. }
  73.  
  74. /**
  75. * 修改对象
  76. */
  77. public boolean update(final Member member) {
  78. String key = member.getId();
  79. if (get(key) == null) {
  80. throw new NullPointerException("数据行不存在, key = " + key);
  81. }
  82. boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {
  83. public Boolean doInRedis(RedisConnection connection)
  84. throws DataAccessException {
  85. RedisSerializer<String> serializer = getRedisSerializer();
  86. byte[] key = serializer.serialize(member.getId());
  87. byte[] name = serializer.serialize(member.getNickname());
  88. connection.set(key, name);
  89. return true;
  90. }
  91. });
  92. return result;
  93. }
  94.  
  95. /**
  96. * 根据key获取对象
  97. */
  98. @Override
  99. public Member get(final String keyId) {
  100. Member result = redisTemplate.execute(new RedisCallback<Member>() {
  101. public Member doInRedis(RedisConnection connection)
  102. throws DataAccessException {
  103. RedisSerializer<String> serializer = getRedisSerializer();
  104. byte[] key = serializer.serialize(keyId);
  105. byte[] value = connection.get(key);
  106. if (value == null) {
  107. return null;
  108. }
  109. String nickname = serializer.deserialize(value);
  110. return new Member(keyId, nickname);
  111. }
  112. });
  113. return result;
  114. }
  115.  
  116. }
  1. package com.pudp.bae.model;
  2.  
  3. import com.pudp.bae.base.BaseModel;
  4.  
  5. public class Member extends BaseModel{
  6.  
  7. private static final long serialVersionUID = -1959528436584592183L;
  8. private String id;
  9. private String nickname;
  10.  
  11. public Member(){}
  12.  
  13. public Member(String id, String nickname){
  14. this.setId(id);
  15. this.setNickname(nickname);
  16. }
  17.  
  18. public String getId() {
  19. return id;
  20. }
  21.  
  22. public void setId(String id) {
  23. this.id = id;
  24. }
  25.  
  26. public String getNickname() {
  27. return nickname;
  28. }
  29.  
  30. public void setNickname(String nickname) {
  31. this.nickname = nickname;
  32. }
  33.  
  34. }
  1. package com.pudp.bae.service;
  2.  
  3. import javax.annotation.Resource;
  4.  
  5. import com.pudp.bae.dao.redis.MemberDao;
  6. import com.pudp.bae.model.Member;
  7.  
  8. public class MemberService {
  9.  
  10. @Resource(name="memberDao")
  11. private MemberDao memberDao;
  12.  
  13. public void setMemberDao(MemberDao memberDao)
  14. {
  15. this.memberDao = memberDao;
  16. }
  17.  
  18. public void add(Member member){
  19. memberDao.add(member);
  20. }
  21.  
  22. public void delete(String id){
  23. memberDao.delete(id);
  24. }
  25.  
  26. public Member get(String id)
  27. {
  28. return memberDao.get(id);
  29. }
  30. }

redis-context.xml

  1. <beans xmlns="http://www.springframework.org/schema/beans"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xmlns:p="http://www.springframework.org/schema/p"
  4. xmlns:tx="http://www.springframework.org/schema/tx"
  5. xmlns:context="http://www.springframework.org/schema/context"
  6. xsi:schemaLocation="
  7. http://www.springframework.org/schema/beans
  8. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  9. http://www.springframework.org/schema/tx
  10. http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
  11. http://www.springframework.org/schema/context
  12. http://www.springframework.org/schema/context/spring-context-3.0.xsd
  13. ">
  14.  
  15. <!-- scanner redis properties -->
  16. <context:property-placeholder location="/WEB-INF/property/redis.properties" />
  17.  
  18. <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
  19. <property name="maxIdle" value="${redis.maxIdle}" />
  20. <property name="maxActive" value="${redis.maxActive}" />
  21. <property name="maxWait" value="${redis.maxWait}" />
  22. <property name="testOnBorrow" value="${redis.testOnBorrow}" />
  23. </bean>
  24.  
  25. <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
  26. p:host-name="${redis.host}"
  27. p:port="${redis.port}"
  28. p:password="${redis.pass}"
  29. p:pool-config-ref="poolConfig"/>
  30.  
  31. <bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">
  32. <property name="connectionFactory" ref="connectionFactory" />
  33. </bean>
  34.  
  35. </beans>

spring-context.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
  4. xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:util="http://www.springframework.org/schema/util"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  7. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
  8. http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
  9. http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd">
  10.  
  11. <!-- 激活@Controller模式 -->
  12. <mvc:annotation-driven />
  13.  
  14. <!-- 对包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 需要更改 -->
  15. <context:component-scan base-package="com.pudp.bae.*" />
  16.  
  17. <bean id="memberService" class="com.pudp.bae.service.MemberService"/>
  18.  
  19. <!-- 引入同文件夹下的redis属性配置文件 -->
  20. <import resource="redis-context.xml"/>
  21.  
  22. </beans>

spring-mvc.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:mvc="http://www.springframework.org/schema/mvc"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  8. http://www.springframework.org/schema/context
  9. http://www.springframework.org/schema/context/spring-context-3.0.xsd
  10. http://www.springframework.org/schema/mvc
  11. http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
  12.  
  13. <!-- 配置视图解析器,把控制器的逻辑视频映射为真正的视图 -->
  14. <!-- /WEB-INF/jsp/start.jsp -->
  15. <bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
  16. <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
  17. <property name="prefix" value="/WEB-INF/jsp/" />
  18. <property name="suffix" value=".jsp" />
  19. </bean>
  20.  
  21. </beans>

redis.properties

  1. # Redis settings
  2. #redis.host=192.168.20.101
  3. #redis.port=6380
  4. #redis.pass=foobared
  5. redis.host=127.0.0.1
  6. redis.port=6379
  7. redis.pass=xx
  8. redis.maxIdle=300
  9. redis.maxActive=600
  10. redis.maxWait=1000
  11. redis.testOnBorrow=true

web.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="2.4" aaxmlns="http://java.sun.com/xml/ns/j2ee"
  3. aaxmlns:xsi="w3.org/2001/XMLSchema-instance"
  4. aaxsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  5. <display-name>SpringMVCRedis</display-name>
  6. <listener>
  7. <listener-class>org.springframework.web.context.ContextLoaderListener
  8. </listener-class>
  9. </listener>
  10.  
  11. <context-param>
  12. <param-name>contextConfigLocation</param-name>
  13. <param-value>/WEB-INF/context/spring-context.xml</param-value>
  14. </context-param>
  15.  
  16. <filter>
  17. <filter-name>SpringEncodingFilter</filter-name>
  18. <filter-class>org.springframework.web.filter.CharacterEncodingFilter
  19. </filter-class>
  20.  
  21. <init-param>
  22. <param-name>encoding</param-name>
  23. <param-value>UTF-8</param-value>
  24. </init-param>
  25.  
  26. <init-param>
  27. <param-name>forceEncoding</param-name>
  28. <param-value>true</param-value>
  29. </init-param>
  30. </filter>
  31.  
  32. <filter-mapping>
  33. <filter-name>SpringEncodingFilter</filter-name>
  34. <url-pattern>/*</url-pattern>
  35. </filter-mapping>
  36.  
  37. <servlet>
  38. <servlet-name>mvc</servlet-name>
  39. <servlet-class>org.springframework.web.servlet.DispatcherServlet
  40. </servlet-class>
  41. <init-param>
  42. <param-name>contextConfigLocation</param-name>
  43. <param-value>/WEB-INF/context/spring-mvc.xml</param-value>
  44. </init-param>
  45. <load-on-startup>2</load-on-startup>
  46. </servlet>
  47.  
  48. <servlet-mapping>
  49. <servlet-name>mvc</servlet-name>
  50. <url-pattern>/</url-pattern>
  51. </servlet-mapping>
  52.  
  53. <welcome-file-list>
  54. <welcome-file>index.jsp</welcome-file>
  55. </welcome-file-list>
  56. </web-app>

2018年5月16号更

时过境迁,没想到两年多前的一个笔记还有那么多人关注,在此补上当时源码包(幸好找到了)

https://download.csdn.net/download/wuxinliulei/10417976

附上csdn的下载路径

SpringMVC+redis整合的更多相关文章

  1. ssm+redis整合(通过cache方式)

    这几天的研究ssm redis 终于进入主题了,今天参考了网上一些文章搭建了一下ssm+redis整合,特别记录下来以便以后可以查询使用,有什么不足请大牛们提点 项目架构 1.pom.xml < ...

  2. [手把手教程][JavaWeb]优雅的SpringMvc+Mybatis整合之路

    来源于:http://www.jianshu.com/p/5124eef40bf0 [手把手教程][JavaWeb]优雅的SpringMvc+Mybatis整合之路 手把手教你整合最优雅SSM框架:S ...

  3. Spring+springmvc+Mybatis整合案例 annotation版(myeclipse)详细版

    Spring+springmvc+Mybatis整合案例 Version:annotation版 文档结构图: 从底层开始做起: 01.配置web.xml文件 <?xml version=&qu ...

  4. Spring+springmvc+Mybatis整合案例 xml配置版(myeclipse)详细版

    Spring+springmvc+Mybatis整合案例 Version:xml版(myeclipse) 文档结构图: 从底层开始做起: 01.配置web.xml文件 <?xml version ...

  5. sonne_game网站开发03 spring-mvc+freemarker整合

    今天的任务就是在spring+mybatis+springmvc的基础上,将freemarker整合进来. freemarker是什么? freemarker是一种模板引擎.它的目的是基于模板和数据, ...

  6. Nginx+Lua+Redis整合实现高性能API接口 - 网站服务器 - LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区! - Powered by Discuz!

    Nginx+Lua+Redis整合实现高性能API接口 - 网站服务器 - LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区! - Powered by Disc ...

  7. SpringMVC 中整合之JSON、XML

    每次看到好的博客我就想好好的整理起来,便于后面自己复习,同时也共享给网络上的伙伴们! 博客地址: springMVC整合Jaxb2.xStream:  http://www.cnblogs.com/h ...

  8. 框架篇:Spring+SpringMVC+hibernate整合开发

    前言: 最近闲的蛋疼,搭个框架写成博客记录下来,拉通一下之前所学知识,顺带装一下逼. 话不多说,我们直接步入正题. 准备工作: 1/ IntelliJIDEA的安装配置:jdk/tomcat等..(本 ...

  9. IDEA下使用maven构建web项目(SpringMVC+Mybatis整合)

    需求背景:由于最近总是接到一些需求,需要配合前端团队快速建设移动端UI应用或web应用及后台业务逻辑支撑的需求,若每次都复用之前复杂业务应用的项目代码,总会携带很多暂时不会用到的功能或组件,这样的初始 ...

随机推荐

  1. Google Map Api 谷歌地图接口整理

    一:基本知识: 1. 使用谷歌地图 API 的第一步就是要注册一个 API 密钥,需要注重一下两点: 1.假如使用 API 的页面还没有发布,只是在本地调试,可以不用密钥,随便用个字符串代替就可以了. ...

  2. 跟我学习dubbo-使用Maven构建Dubbo服务的可执行jar包(4)

    Dubbo服务的运行方式: 1.使用Servlet容器运行(Tomcat.Jetty等)----不可取 缺点:增加复杂性(端口.管理) 浪费资源(内存) 官方:服务容器是一个standalone的启动 ...

  3. Android 联系人字母排序(仿微信)

    现在很多APP只要涉及到联系人的界面,几乎都会采取字母排序以及导航的方式.作为程序猿,这种已经普及的需求还是需要学习的,于是小生开始了在网上默默的学习之路,网上学习的资料质量参差不齐,不过也有很不错的 ...

  4. 集合类学习之Hashmap机制研究

    1.遍历的两种实现方法 //新建 Map map=new HashMap(); //存储值 map.put() ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 //遍历方式 ...

  5. 【学习笔记】【C语言】循环结构-for

    1.使用: for (语句1; 条件; 语句2) {     循环体 }   语句1:初始化语句 语句2:增量语句(执行完循环体后再执行的语句)   1.for一开始就会执行一次语句1(整个for循环 ...

  6. C# 数据操作工具类

    CREATE PROCEDURE [dbo].[RecordFromPage] @SelectList VARCHAR(max), @TableSource VARCHAR(100), @Search ...

  7. VS2013 不能打开DTCMS项目 的解决办法

    <system.webServer> <validation validateIntegratedModeConfiguration="false"/> & ...

  8. 20141124-JS 变量,数据类型

    变量: 变量是JS中存储信息的容器,必须以字母开头. 格式: 定义变量只能用 var 定义,用 = 赋值. <script> var x=2; </script> 字符串型的值 ...

  9. (转)RabbitMQ消息队列(四):分发到多Consumer(Publish/Subscribe)

    上篇文章中,我们把每个Message都是deliver到某个Consumer.在这篇文章中,我们将会将同一个Message deliver到多个Consumer中.这个模式也被成为 "pub ...

  10. nyoj---t448(寻找最大数)

    描述 请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大, 比如当n=92081346718538,m=10时,则新的最大数是9888   输入 第一行输入一个正整数T,表示有T组测 ...