この期間中にさまざまな問題に遭遇したという事実に基づいて、私はそれを整理することを考えました。この記事では、主に、Redisの統合をSpring+MyBatisに基づいて注釈の形で統合します。ナンセンスが少なく、ポイントに到達します。
まず、Redisを準備します。私はWindowsバージョンになります。ダウンロードした後、Redis-Serverを直接開始してください。以下の写真を参照してください:
まず、JARパッケージを最初に追加します
2。エンティティクラスを作成します
パッケージcom.sl.user.vo; import java.io.serializable; import com.fasterxml.jackson.databind.propertynamingstrategy; import com.fasterxml.jackson.databind.annotation.jsonnaming; import com.fasterxml.jackson.databind.annotation.junserizeerize; @jsonnaming(propertynamingstrategy.lowercasewithunderscoresstrategy.class)public class uservoは、serializable {private static final long serialversionuid = 1l; private int id; private string username; private int int age; public uservo(){super(); } public uservo(int id、string username、string password、int age){super(); this.id = id; this.username = username; this.age = age;} public int getid(){return id;} public void setid(int id){this.id = id;} public string getSername( username){this.username = username;} public string getpassword(){return password;} public void setPassword(string password){this.password = password;} public int getage(){return age;} public void setage(int age){this.age = age;}@overpublic string tostring( "us(Id) username = " + username +"、password = " + password +"、age = " + age +"] ";}} 3、DAOインターフェイス
パッケージcom.sl.user.dao; import com.sl.user.vo.uservo; public interface userdao {public void adduser(uservo user); public void deleteuser(uservo user); public void upditauser(uservo user); public uservo getuserbyid(int id); public uservo getuser(int id); 4。USERMAPPER
<?xml version = "1.0" encoding = "utf-8"?> <!doctype mapper public " - // mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <resultmap id = "ueserresult" type = "user"> <result column = "id" property = "id"/> <result column = "userame" property = "userame"/> <result列= "パスワード"プロパティ= "パスワード"/> <column = "age" age "/> <result column =" age "age" age "/> </> <fish =" intectmap> "inestmapte Into t_user(username、password、age)values(#{username}、#{password}、#{age})</insert> <update id = "deleteuser" parametertype = "user"> delete * t_user where where where where where where where where where where != null and username!= '' "> username =#{username}、</if> <if> <if test =" password!= null and password!= '' "> password =#{password}、</if> <if> <" age!= age!= '' "> age =#{age} #{id} </if> </update> <select id = "getUser" parametertype = "int" resultType = "user"> select * from id =#{id} </select> <select id = "getuserbyid" parametertype = "int" resulttype = "java.lang.sther.string"> #{id} </select> </mapper> 5。サービスインターフェイス
パッケージcom.sl.user.service; Import com.sl.user.vo.uservo; public interface userservice {public void adduser(uservo user); public void deleteuser(uservo user); public void updetuser(uservo user); public uservo getuserbyid(int id); public uservo getuser(int id);第六、サービスの実装
パッケージcom.sl.user.service.impl; import org.springframework.beans.factory.annotation.autowired; import org.springframework.cache.annotation.cacheevict; Import org.springframework.cache.annotation.cacheevict; Import inmorg.springframework; springframework; stringframework; org.springframework.transaction.annotation.propagation; import org.springframework.transaction.annotation.transaction; import com.sl.user.dao.userdao; Import com.sl.user.service.userservice;インポートcom.sl.user.vo.uservo; @service( "userservice")@transactional(propagation = propagation.required、rollbackfor = exception.class)public class userserviceimpl embrements userservice {@autowiredprivate userdao userdao;@cacheevict(cacheevict "fall" fall " adduser(uservo user){userdao.adduser(user);}@override@cacheevict(value = {"getuser"、 "getuserbyid"}、allentries = true)public void deleteuser(uservo user){userdao.deleteer(user) "getUserbyid"}、allentries = true)public void updateUser(uservo user){userdao.updateuser(user);}@override@cachable(value = "user"、key = "getuserbyid")public uservo getuserbyid(int id){return return userdao.getuserbyid(id);}@override@cachable(value = "user"、key = "'getuser'")public uservo getuser(int id){return userdao.getuser(id);}}} 7、Ctrl層
パッケージcom.sl.user.web; Import java.util.hashmap; Import java.util.map; import org.springframework.beans.factory.annotation.autowired; import org.springframework.stereotype.controller; Import org.springframework.web.bind.annotation.not.notation springframework.web.bind.annotation.responsebody;インポートcom.sl.user.service.userservice; Import com.sl.vo.uservo;@controller@requestmapping( "/userctrl")Public class userctrl {@autowired userservice userservice; adduser(uservo user){userservice.adduser(user);}@requestmapping( "/deleteuser")public void deleteuser(uservo user){userservice.deleteuser(user);}@requestmapping( "/updetwususer")public void updetuser(uservo user){userservice.updateuser(user);}@ressonsbody@requestmapping( "/getuserbyid")public map <string、object> getuserbyid(uservo user){map <string、object> map = new hashmap <string>(); map.put( "msg"、userservice.getuserbyid(4); map;}@ressonsbody@requestmapping( "/getUser")public map <string、object> getuser(uservo vo){map <string、object> map = new hashmap <string、object>(); object user = userservice.getUser(4); map.put( "msg"、users.tostring()); 8。CRUD操作に使用されるRedisキークラス
パッケージcom.sl.user.redis; import java.io.bytearrayinputStream; java.io.bytearrayoutputStreamをインポートします。 java.io.ioexceptionをインポートします。 java.io.objectinputStreamをインポートします。 java.io.objectOutputStreamをインポートします。 java.io.objectOutputStreamをインポートします。 Import org.springframework.cache.cache; org.springframework.cache.support.simplevaluewrapperをインポートします。 Import org.springframework.dao.dataaccessexception; Import org.springframework.data.redis.connection.redisconnection; Import org.springframework.data.redis.core.rediscallback; org.springframework.data.redis.core.redistemplateをインポートします。パブリッククラスのredisutilはcache {private redistemplate <string、object> redistemplate;プライベート文字列名; public redistemplate <string、object> getRedistemplate(){return redistemplate; } public void setRedistemplate(redistemplate <string、object> redistemplate){this.redistemplate = redistemplate; } public void setName(string name){this.name = name; } @Override public String getName(){return this.name; } @Override public Object getnativecache(){return this.redistemplate; } /*** cacheからgetキー* /@@override public valuewrapper get(object key){system.out.println( "get key");最終文字列keyf = key.toString();オブジェクトオブジェクト= null; object = redistemplate.execute(new rediscallback <object>(){public object doinredis(redisconnection connection)data acccessexception {byte [] key = keyf.getBytes(); buale = connection.get(key); if(value == null){return null;} too(value); return(object!= null?new SimpleValueWrapper(object):null); } /***キャッシュの新しいキーを保存*最初に名前とオブジェクトを取得し、次にbytearrayに変換* /@@override public void put(object key、object value){system.out.println( "put key");最終文字列keyf = key.toString();最終オブジェクト値=値;最終的な長いlivetime = 86400; redistemplate.execute(new Rediscallback <long>(){public long doinredis(redisconnection connection)throws dataaccessexception {] byte [] keyb = keyf.getBytes(); byte [] value [] valueb = tobytearray(valuef); connection.set(keyb、value); 1Lを返します。}); } private byte [] tobytearray(object obj){byte [] bytes = null; bytearrayoutputStream bos = new bytearrayoutputStream(); try {objectOutputStream OOS = new objectOutputStream(bos); oos.writeobject(obj); oos.flush(); bytes = bos.tobytearray(); oos.close(); bos.close(); } catch(ioException ex){ex.printstacktrace(); }バイトを返します。 } private object toobject(byte [] bytes){object obj = null; try {bytearrayinputStream bis = new bytearrayinputStream(bytes); ObjectInputStream ois = new ObjectInputStream(bis); obj = ois.readObject(); ois.close(); bis.close(); } catch(ioException ex){ex.printstacktrace(); } catch(classNotFoundException ex){ex.printstacktrace(); } objを返します。 } /*** key* /@@override public void evict(object key){system.out.println( "del key");最終文字列keyf = key.toString(); redistemplate.execute(new rediscallback <long>(){public long doinredis(redisconnection connection)dataaccessexception {return connection.del(keyf.getBytes());}}); } /*** clear key* /@@override public void clear(){system.out.println( "clear key"); redistemplate.execute(new rediscallback <string>(){public string doinredis(redisconnection connection)throws dataaccessexception {connection.flushdb(); return "ok";}}); } @override public <t> t get(object key、class <t> ype){return null; } @Override public Valuewrapper putifabsent(object key、object value){return null; }} 9。SpringMyBatisおよびRedis構成ファイルを統合します
<?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:context = "http://www.springframework.org/schema/context" xmlns:tx = "http://www.springframework.org/schema/tx" xmlns:mvc = "http://www.springframework.org/schema/mvc" xmlns:aop = " ork.org/schema/aop"xmlns:cache="http://www.springframework.org/schema/cache"xsi:schemalocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/spring-4.0.cc- 4.0. http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsdhttp://www.springframework.org/schema/cache http://www.springframework.org/schema/cache.xdsds.xd - > <コンテキスト:Component-ScanScanベースパッケージ= "com.sl.user.service" /> <context:component-scanベースパッケージ= "com.sl.user.service。 annotation-> <cache:annotation-driven/> <! - mybatis start-> <! - datasource Drivermanagerdatasource-> <bean id = "dataSource"> <プロパティ名= "driverclassname" value = "com.mysql.jdbc.driver" value = "jdbc:mysql://127.0.0.1:3306/test"> </property> <property name = "username" value = "root"> </property name> <property name = "property name =" property name "value =" root "> </property> </bean> <! - mybatis構成ref = "dataSource"> </property> <プロパティ名= "configlocation" value = "classpath:config/mybatis.xml"> </property> <プロパティ名= "Mapperlocations" value = "clasppath:mapper/usermapper.xml"> </property> </bean> < sqlSessionFactoryBasePackage:SQLマップファイル/インターフェイスが配置されているパッケージ(自動スキャン) - > <bean> <プロパティname = "sqlsessionfactory" ref = "sessionfactory"> </property = "basepackage" value = "com.sl.user.dao" DataSourcetransactionManager - > <bean id = "txmanager"> <プロパティ名= "dataSource" ref = "dataSource"> </property> </bean> <! - 上記の宣言マネージャーを参照してください - > <tx:<tx:annotation-manager = < mybatis end-> <! - configure redis part start-> <! - redis接続プールを構成Jedispoolconfig-> <bean id = "poolconfig"> <プロパティ名= "maxidle" value = "300" /> <プロパティ名= "maxtotal" value = "600" /> < /bean> < id = "connfactory"> <プロパティ名= "hostname" value = "127.0.0.1"> </property name> <property name = "port" value = "6379"> </property name> <property name = "poolconfig" ref = "refig"> </property> </bean> <!-redistemplate stringredistemplate- <> <> name = "ConnectionFactory" ref = "connfactory"/> </bean> <bean id = "cachemanager"> <プロパティ名= "caches"> <set> <bean> <プロパティ名= "Redistemplate" ref = "redistemplate"/> <プロパティ名= "name" value "ユーザー"/> < </bean> </bean>
10、SpringMVC構成ファイル
<?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:context = "http://www.springframework.org/schema/tx" XMLNS:MVC = "http://www.springframework.org/schema/mvc" xmlns:aop = "http://www.springframework.org/schema/aop" xsi:schemalocation = " http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframeworkwork/ http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> <mvc:annotation-driven/> <!---スプリングMVC注釈 - > <コンテキスト:annotation-config/> <! base-package = "com.sl.user。*"> </context:component-scan> <! - モデルビュー名の解像度、つまり、モデルビュー名にプレフィックスを追加 - > <bean id = "viewresolver"> <property name = "Viewclass" value = "org.springframework.web.servlet.view.jstlview"/> < value = "/views/"/> <property name = "suffix" value = "。jsp"/> </bean> <bean> <! - json converter-> <プロパティname = "messageconverters"> <list> <bean> <プロパティname = "supportedmediatypes"> <list> <value> application/json; charset = utf-8 </value> <value> text/json; charset = utf-8 </value> </list> </property> </bean> </list> </property> </bean> </beans>
11、MyBatis構成ファイル
<?xml version = "1.0" encoding = "utf-8"?> <!doctype構成public " - // mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd"エイリアス - > <typealiase> <typealias alias = "user" type = "com.sl.user.vo.uservo"/> </typealiase> </configuration>
12、log4j
#ルートカテゴリの優先度を情報とその唯一のAppender to Console.log4j.Rootcategory = debug、Console#log4j.Rootcategory = info、console、logfile#コンソールは、 PatternLayout.log4j.Appender.Console = org.apache.log4j.consoleAppenderLog4j.Appender.Console.threshold = debuglog4j.a ppender.console.layout = org.apache.log4j.patternlayoutlog4j.appender.console.layout.conversionpattern =%d {yyyy-mm-dd Hh/:mm/:ss}%p -%m%nlog4j.logger.java.sql.connection = debuglog4j.logger.java.sql.statement = debuglog4j.logger.java.sql.preparedstatement = dabuglog4j.lorgger.daultsettatem 13、web.xml
<?xml version = "1.0" encoding = "utf-8"?> <web-appバージョン= "3.0" xmlns = "http://java.sun.com/xml/ns/javaee" xmlns:xsi = "http://www.w3.org/2001/xmlschema-instcance" xsi:schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <display-name>testredis</display-name> <context-param> AME> <PARAM-VALUE> classPath:config/applicationContext.xml </param-value> </context-param> <context-param> <param-name> log4jconfiglocation </param-name> <p aram-value> classpath:config/log4j.properties </param-value> </context-param> <context-param> <param-name> log4jrefreshinterval </param-name> <param-value > 60000 </param-value> </context-param> <リスナー> <リスナー> <リスナークラス> org.springframework.web.context.contextloaderlistener </ristener-class> </ristener> <! - log-> <リスナー> <リスナークラス> org.springframework.web.util.log4jconfiglistener </ristener-class> </ristener> <servlet> <servlet-name> spring </servlet-name> <servlet-class> org.springframework.web.dispatcherebret.dispatcherebret. contextconfiglocation </param-name> <param-value> classpath:config/springmvc.xml </param-value> </init-param> <load-on-startup> 1 </load-on-startup> </servlet> <servlet-mapping> <servet-name> spring </servlet-name> <url-perthern>文字化けされた中国のコードの - > <filter> <filter-name> CharatleENCoding </filter-name> <filter-class> org.springframework.web.filter.characterencodingfilter </filter-class> <init-param> <param-name> ecoding </param-name> <-value> utf-8 </param-name> </init-param> </init-param> </init-param> </init-param>コーディング</param-name> <param-value> true </param-value> </init-param> </filter> <filter-mapping> <filter-name> charatereCoding </filter-name> <url-pattern>*
14のテストは、例として照会されています(getUser()メソッド)、JSPテストページは醜いので、投稿せず、自分で書くだけです。 。 。
クエリの前:
最初のクエリを実行します:
2番目のクエリ操作を実行します。
上の図に見られるように、SQLは再び実行されず、データはRedisから直接取得されます。
上記は、編集者による注釈に基づいてRedisを統合する方法です。私はそれが誰にでも役立つことを願っています。ご質問がある場合は、メッセージを残してください。編集者は、すべての人に時間内に返信します。 wulin.comのウェブサイトへのご支援ありがとうございます!