spring mvc +redis 例子

来源:互联网 发布:数据库系统包括 编辑:程序博客网 时间:2024/06/05 03:54
配置文件整合159 160 Web.xml文件配置161 162 <?xml version="1.0" encoding="UTF-8"?>163 <web-app version="2.4"164      xmlns="http://java.sun.com/xml/ns/j2ee"165      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"166      xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">167 168   <listener>169     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>170   </listener>171   172   <context-param>173     <param-name>contextConfigLocation</param-name>174     <param-value>/WEB-INF/context/spring-context.xml</param-value>175   </context-param>176   177   <!-- Spring字符集过滤器 -->178   <filter>179     <filter-name>SpringEncodingFilter</filter-name>180     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>181     <init-param>182       <param-name>encoding</param-name>183       <param-value>UTF-8</param-value>184     </init-param>185     <init-param>186       <param-name>forceEncoding</param-name>187       <param-value>true</param-value>188     </init-param>189   </filter>190   <filter-mapping>191     <filter-name>SpringEncodingFilter</filter-name>192     <url-pattern>/*</url-pattern>193   </filter-mapping>194   195   196   <servlet>197     <servlet-name>mvc</servlet-name>198     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>199     <init-param>200          <param-name>contextConfigLocation</param-name>201          <param-value>/WEB-INF/context/spring-mvc.xml</param-value>202      </init-param>203      <load-on-startup>2</load-on-startup>204   </servlet>205   206   <servlet-mapping>207     <servlet-name>mvc</servlet-name>208     <url-pattern>/</url-pattern>209   </servlet-mapping>210 211   <welcome-file-list>212     <welcome-file>index.jsp</welcome-file>213   </welcome-file-list>214 215 </web-app>216 spring-context.xml内容217 218 <?xml version="1.0" encoding="UTF-8"?>219 <beans xmlns="http://www.springframework.org/schema/beans"220     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"221     xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"222     xmlns:util="http://www.springframework.org/schema/util"223     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  224       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd  225       http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd          226       http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd">227     228     229     <!-- 激活@Controller模式 -->230     <mvc:annotation-driven />231     232     <!-- 对包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 需要更改 -->233     <context:component-scan base-package="com.pudp.bae.*" />234     235     <!-- 引入同文件夹下的redis属性配置文件 -->236     <import resource="redis-context.xml"/>237 238 </beans>239 redis-context.xml内容240 241 <beans     xmlns="http://www.springframework.org/schema/beans" 242        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"243        xmlns:p="http://www.springframework.org/schema/p" 244        xmlns:tx="http://www.springframework.org/schema/tx"245        xmlns:context="http://www.springframework.org/schema/context"246        xsi:schemaLocation="247       http://www.springframework.org/schema/beans 248       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd249       http://www.springframework.org/schema/tx 250       http://www.springframework.org/schema/tx/spring-tx-3.0.xsd251       http://www.springframework.org/schema/context252       http://www.springframework.org/schema/context/spring-context-3.0.xsd253          ">254   255   <!-- scanner redis properties  --> 256   <context:property-placeholder location="/WEB-INF/property/redis.properties" />257   258   <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">  259     <property name="maxIdle" value="${redis.maxIdle}" />  260     <property name="maxActive" value="${redis.maxActive}" />  261     <property name="maxWait" value="${redis.maxWait}" />  262     <property name="testOnBorrow" value="${redis.testOnBorrow}" />  263   </bean>  264     265   <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"  266     p:host-name="${redis.host}" 267     p:port="${redis.port}" 268     p:password="${redis.pass}"  269     p:pool-config-ref="poolConfig"/>  270     271   <bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">  272     <property name="connectionFactory"   ref="connectionFactory" />  273   </bean>      274    275 </beans>               276 Redis.properties文件内容277 278 # Redis settings279 #redis.host=192.168.20.101280 #redis.port=6380281 #redis.pass=foobared282 redis.host=127.0.0.1283 redis.port=6379284 redis.pass=285   286 redis.maxIdle=300287 redis.maxActive=600288 redis.maxWait=1000289 redis.testOnBorrow=true290 第三步 :Springmvc 对 Redis 的支持与实例应用 .291 292 实例对象293 294 295 package com.pudp.bae.model;296 297 import com.pudp.bae.base.BaseModel;298 299 public class Member extends BaseModel{300 301   /**302    * 303    */304   private static final long serialVersionUID = -1959528436584592183L;305   306   307   private String id;308   private String nickname;309   310   public Member(){}311   312   public Member(String id, String nickname){313     this.setId(id);314     this.setNickname(nickname);315   }316   317   public String getId() {318     return id;319   }320   public void setId(String id) {321     this.id = id;322   }323   public String getNickname() {324     return nickname;325   }326   public void setNickname(String nickname) {327     this.nickname = nickname;328   }329   330 }331 View Code332 Redis对象持久化操作333 334 package com.pudp.bae.base;335 336 import java.io.Serializable;337 338 import org.springframework.beans.factory.annotation.Autowired;339 import org.springframework.data.redis.core.RedisTemplate;340 import org.springframework.data.redis.serializer.RedisSerializer;341 342 public abstract class RedisGeneratorDao<K extends Serializable, V extends Serializable>  {343   344   @Autowired345   protected RedisTemplate<K,V> redisTemplate ;346 347   /** 348    * 设置redisTemplate 349    * @param redisTemplate the redisTemplate to set 350    */  351   public void setRedisTemplate(RedisTemplate<K, V> redisTemplate) {  352     this.redisTemplate = redisTemplate;  353   }  354     355   /** 356    * 获取 RedisSerializer 357    * <br>------------------------------<br> 358    */  359   protected RedisSerializer<String> getRedisSerializer() {  360     return redisTemplate.getStringSerializer();  361   }  362   363 }364 package com.pudp.bae.base;365 366 import java.io.Serializable;367 368 import org.springframework.beans.factory.annotation.Autowired;369 import org.springframework.data.redis.core.RedisTemplate;370 import org.springframework.data.redis.serializer.RedisSerializer;371 372 public abstract class RedisGeneratorDao<K extends Serializable, V extends Serializable>  {373   374   @Autowired375   protected RedisTemplate<K,V> redisTemplate ;376 377   /** 378    * 设置redisTemplate 379    * @param redisTemplate the redisTemplate to set 380    */  381   public void setRedisTemplate(RedisTemplate<K, V> redisTemplate) {  382     this.redisTemplate = redisTemplate;  383   }  384     385   /** 386    * 获取 RedisSerializer 387    * <br>------------------------------<br> 388    */  389   protected RedisSerializer<String> getRedisSerializer() {  390     return redisTemplate.getStringSerializer();  391   }  392   393 }394 redis对象操作395 396 package com.pudp.bae.dao.redis;397 398 import java.util.ArrayList;399 import java.util.List;400 401 import org.springframework.dao.DataAccessException;402 import org.springframework.data.redis.connection.RedisConnection;403 import org.springframework.data.redis.core.RedisCallback;404 import org.springframework.data.redis.serializer.RedisSerializer;405 import org.springframework.stereotype.Repository;406 import org.springframework.util.Assert;407 408 import com.pudp.bae.base.RedisGeneratorDao;409 import com.pudp.bae.model.Member;410 411 412 /**413  * 参看博客 <br>414  * -------------------------------------------------------------------------------415  *  http://blog.csdn.net/java2000_wl/article/details/8543203416  * -------------------------------------------------------------------------------417  */418 419 @Repository(value="memberDao")420 public class MemberDaoImpl extends RedisGeneratorDao<String,Member> implements MemberDao{421 422   423   /**424    * 添加对象425    */426   @Override427   public boolean add(final Member member) {  428     boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {  429       public Boolean doInRedis(RedisConnection connection)  430           throws DataAccessException {  431         RedisSerializer<String> serializer = getRedisSerializer();  432         byte[] key  = serializer.serialize(member.getId());  433         byte[] name = serializer.serialize(member.getNickname());  434         return connection.setNX(key, name);  435       }  436     });  437     return result;  438   }  439 440   /**441    * 添加集合442    */443   @Override444   public boolean add(final List<Member> list) {445     Assert.notEmpty(list);  446     boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {  447       public Boolean doInRedis(RedisConnection connection)  448           throws DataAccessException {  449         RedisSerializer<String> serializer = getRedisSerializer();  450         for (Member member : list) {  451           byte[] key  = serializer.serialize(member.getId());  452           byte[] name = serializer.serialize(member.getNickname());  453           connection.setNX(key, name);  454         }  455         return true;  456       }  457     }, false, true);  458     return result; 459   }  460   461   /**462    * 删除对象 ,依赖key463    */464   public void delete(String key) {  465     List<String> list = new ArrayList<String>();  466     list.add(key);  467     delete(list);  468   }  469   470   /**471    * 删除集合 ,依赖key集合472    */473   public void delete(List<String> keys) {  474     redisTemplate.delete(keys);  475   }  476   477   /**478    * 修改对象 479    */480   public boolean update(final Member member) {  481     String key = member.getId();  482     if (get(key) == null) {  483       throw new NullPointerException("数据行不存在, key = " + key);  484     }  485     boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {  486       public Boolean doInRedis(RedisConnection connection)  487           throws DataAccessException {  488         RedisSerializer<String> serializer = getRedisSerializer();  489         byte[] key  = serializer.serialize(member.getId());  490         byte[] name = serializer.serialize(member.getNickname());  491         connection.set(key, name);  492         return true;  493       }  494     });  495     return result;  496   }  497   498   /**499    * 根据key获取对象500    */501   public Member get(final String keyId) {  502     Member result = redisTemplate.execute(new RedisCallback<Member>() {  503       public Member doInRedis(RedisConnection connection)  504           throws DataAccessException {  505         RedisSerializer<String> serializer = getRedisSerializer();  506         byte[] key = serializer.serialize(keyId);  507         byte[] value = connection.get(key);  508         if (value == null) {  509           return null;  510         }  511         String nickname = serializer.deserialize(value);  512         return new Member(keyId, nickname);  513       }  514     });  515     return result;  516   }  517 518 }519 package com.pudp.bae.dao.redis;520 521 import java.util.ArrayList;522 import java.util.List;523 524 import org.springframework.dao.DataAccessException;525 import org.springframework.data.redis.connection.RedisConnection;526 import org.springframework.data.redis.core.RedisCallback;527 import org.springframework.data.redis.serializer.RedisSerializer;528 import org.springframework.stereotype.Repository;529 import org.springframework.util.Assert;530 531 import com.pudp.bae.base.RedisGeneratorDao;532 import com.pudp.bae.model.Member;533 534 535 /**536  * 参看博客 <br>537  * -------------------------------------------------------------------------------538  *  http://blog.csdn.net/java2000_wl/article/details/8543203539  * -------------------------------------------------------------------------------540  */541 542 @Repository(value="memberDao")543 public class MemberDaoImpl extends RedisGeneratorDao<String,Member> implements MemberDao{544 545   546   /**547    * 添加对象548    */549   @Override550   public boolean add(final Member member) {  551     boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {  552       public Boolean doInRedis(RedisConnection connection)  553           throws DataAccessException {  554         RedisSerializer<String> serializer = getRedisSerializer();  555         byte[] key  = serializer.serialize(member.getId());  556         byte[] name = serializer.serialize(member.getNickname());  557         return connection.setNX(key, name);  558       }  559     });  560     return result;  561   }  562 563   /**564    * 添加集合565    */566   @Override567   public boolean add(final List<Member> list) {568     Assert.notEmpty(list);  569     boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {  570       public Boolean doInRedis(RedisConnection connection)  571           throws DataAccessException {  572         RedisSerializer<String> serializer = getRedisSerializer();  573         for (Member member : list) {  574           byte[] key  = serializer.serialize(member.getId());  575           byte[] name = serializer.serialize(member.getNickname());  576           connection.setNX(key, name);  577         }  578         return true;  579       }  580     }, false, true);  581     return result; 582   }  583   584   /**585    * 删除对象 ,依赖key586    */587   public void delete(String key) {  588     List<String> list = new ArrayList<String>();  589     list.add(key);  590     delete(list);  591   }  592   593   /**594    * 删除集合 ,依赖key集合595    */596   public void delete(List<String> keys) {  597     redisTemplate.delete(keys);  598   }  599   600   /**601    * 修改对象 602    */603   public boolean update(final Member member) {  604     String key = member.getId();  605     if (get(key) == null) {  606       throw new NullPointerException("数据行不存在, key = " + key);  607     }  608     boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {  609       public Boolean doInRedis(RedisConnection connection)  610           throws DataAccessException {  611         RedisSerializer<String> serializer = getRedisSerializer();  612         byte[] key  = serializer.serialize(member.getId());  613         byte[] name = serializer.serialize(member.getNickname());  614         connection.set(key, name);  615         return true;  616       }  617     });  618     return result;  619   }  620   621   /**622    * 根据key获取对象623    */624   public Member get(final String keyId) {  625     Member result = redisTemplate.execute(new RedisCallback<Member>() {  626       public Member doInRedis(RedisConnection connection)  627           throws DataAccessException {  628         RedisSerializer<String> serializer = getRedisSerializer();  629         byte[] key = serializer.serialize(keyId);  630         byte[] value = connection.get(key);  631         if (value == null) {  632           return null;  633         }  634         String nickname = serializer.deserialize(value);  635         return new Member(keyId, nickname);  636       }  637     });  638     return result;  639   }  640 641 }642 Controller实现643 644 package com.pudp.bae.controller;645 646 import java.util.HashMap;647 import java.util.Map;648 649 import javax.annotation.Resource;650 import javax.servlet.http.HttpServletRequest;651 import javax.servlet.http.HttpServletResponse;652 653 import org.springframework.stereotype.Controller;654 import org.springframework.web.bind.annotation.ModelAttribute;655 import org.springframework.web.bind.annotation.PathVariable;656 import org.springframework.web.bind.annotation.RequestMapping;657 import org.springframework.web.bind.annotation.RequestMethod;658 import org.springframework.web.servlet.ModelAndView;659 660 import com.pudp.bae.base.BaseMultiController;661 import com.pudp.bae.model.Member;662 import com.pudp.bae.service.MemberService;663 664 @Controller665 @RequestMapping(value="/member")666 public class MemberController extends BaseMultiController{667 668   @Resource(name="memberService")669   private MemberService memberService;670   671   public void setMemberService(MemberService memberService) {672     this.memberService = memberService;673   }674   675   @RequestMapping(value={"/add","/add.html"},method={RequestMethod.GET})676   public ModelAndView add(HttpServletRequest request,HttpServletResponse response){677     Map<String,Object> map = new HashMap<String, Object>();678     return toView("member/add", map);679   }680   681   @RequestMapping(value={"/add","/add.html"},method={RequestMethod.POST})682   public ModelAndView addMember(HttpServletRequest request,HttpServletResponse response,683       @ModelAttribute("member")Member member){684     Map<String,Object> map = new HashMap<String, Object>();685     System.out.println(member);686     map.put("message", "成功添加数据到库," + member);687     this.memberService.add(member);688     return toView("member/message", map);689   }690   691   @RequestMapping(value={"/{id:\\d+}/query","/{id:\\d+}/query.html"},method={RequestMethod.GET,RequestMethod.POST})692   public ModelAndView queryMember(HttpServletRequest request,HttpServletResponse response,693       @PathVariable("id")String id){694     Map<String,Object> map = new HashMap<String, Object>();695     System.out.println(id);696     Member member = this.memberService.get(id);697     if(null!=member){698       map.put("message", "查询Id=" + id + "的用户名为:" + member.getNickname());699     }else{700       map.put("message", "没有查询到与Id=" + id + "相关的数据");701     }702     return toView("member/message", map);703   }704   705   @RequestMapping(value={"/{id:\\d+}/delete","/{id:\\d+}/delete.html"},method={RequestMethod.GET,RequestMethod.POST})706   public ModelAndView deleteMember(HttpServletRequest request, HttpServletResponse response,707       @PathVariable("id")String id){708     Map<String,Object> map = new HashMap<String, Object>();709     try {710       this.memberService.delete(id);711       map.put("message", "删除Id为" + id +"的用户成功.");712     } catch (Exception e) {713       e.printStackTrace();714       map.put("message", "删除Id为" + id +"的用户失败, "+e.getMessage());715     }716     return toView("member/message", map);    717   }718   719 }
0 0