Aufgrund der Tatsache, dass ich in dieser Zeit auf verschiedene Probleme gestoßen bin, dachte ich darüber nach, es herauszufinden. In diesem Artikel wird hauptsächlich die Integration von Redis in Form von Anmerkungen auf der Grundlage von Spring+MyBatis vorgestellt. Weniger Unsinn, auf den Punkt kommen.
Bereiten Sie zuerst Redis vor. Ich werde Windows -Version verwenden. Starten Sie nach dem Herunterladen einfach direkt mit dem Server. Siehe das Bild unten:
Fügen Sie zuerst das JAR -Paket zuerst hinzu
2. Erstellen Sie Entity -Klasse
Paket com.sl.user.vo; import Java.io.Serializable; Import com.fasterxml.jackson.databind.propertynaminggegy; import com.fasterxml.jackson.databind.annotation.jsonnaming; @Jsonnaming (PropertyNamingStrategy.LowerCaseWithUnterScoresStrategy.Class) Public Class Userservo implementiert serialisierbar {private statische endgültige lange SerialversionUID = 1L; private int id; private String -Benutzername; privates Zeichenfolgenkennwort; privat int älter; öffentlich usservo () {Super (); }public UserVO(int id, String username, String password, int age) {super();this.id = id;this.username = username;this.password = password;this.age = age;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String 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;}@Overridepublic String toString() {return "UserVO [id=" + id + ", userername = " + userername +", password = " + password +", ay " + alter +"] ";}} Drei, DAO -Schnittstelle
Paket com.sl.user.dao; import com.sl.user
4. UsMapper
<? namespace="com.sl.user.dao.UserDao" ><resultMap id="userResult" type="User"><result column="id" property="id"/><result column="userame" property="userame"/><result column="password" property="password"/><result column="age" property="age"/><result column="age" property="age"/><</resultMap><insert id="addUser" parameterType="User">insert into t_user(username,password,age) values(#{username},#{password},#{age})</insert><update id="deleteUser" parameterType="User">delete * from t_user where id = #{id} </update> <update id = "updateUser" parameterType = "user"> aktualisieren t_user set <if test = "username! = null und userername! ! parameterType = "int" resultType = "java.lang.String"> Benutzername aus T_USER Wob 5. Serviceschnittstelle
Paket com.sl.user.service; import com.sl.user
Sechstens, Service -Implementierung
Paket com.sl.user.service.impl; import org.springframework.bean.factory.annotation.autowired; org.springframework.transaction.annotation.propagation; import org.springframework.transaction.annotation.transactional; import com.sl.user.dao.userdao; import com.sl.user.service.userservice; com.sl.user.vo.uservo; @Service ("userService")@transactional (Propagation = Propagation.Cored. erregt, rollbackFor = exception.class) UserServiceImpl implementiert UserService {@autowiredPrivate userdao userdao;@@cacheeVict = tha) = true (value = "user. 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 = "userByIn", key = "getUserById") public uservo getuSerbyid (int id) {return by userDao.getUserById (ID);}@override@cacheable (value = "user", key = "'getUser'") public uservo getUser (int id) {return userDao.getUser (id);}} Sieben, Strg -Schicht
Paket com.sl.user.web; import Java.util.hashMap; import Java.util.map; import org.springframework.bean.factory.Annotation org.springFramework.web.bind.annotation.Responsebody; import com.sl.user.service.userservice; com.sl.user.vo.uservo; AddUser (Userservo -Benutzer) {UserService.Adduser (Benutzer);}@RequestMapping ("/DeleteUser") public void DeleteUser (Userservo -Benutzer) {UserService.DeleteUser (Benutzer);}@RequestMapping ("/updsuser") public void -Update -Update (Uservo (Uservo) (Uservo (Uservo) (Uservo (Uservo) Benutzer) {UserService.Updateuser (Benutzer);}@responseBody@requestMapping ("/getUserById") public map <String, Objekt> getUserById (Uservo -Benutzer) {map <String, Object> map = newmap <String, Objekt> (); map.put ("msg", userservice.GetuserByid (4); map;}@responsebody@requestmaping ("/getUser") public map <string, Object> getUser (Uservo vo) {map <String, Objekt> map = new Hashmap <String, Objekt> (); 8. Redis -Schlüsselklasse, verwendet für CRUD -Operationen
Paket com.sl.user.redis; import Java.io.BytearrayInputStream; importieren java.io.BytearrayoutputStream; importieren java.io.ioException; importieren java.io.objectinputStream; importieren java.io.objectoutputStream; importieren java.io.objectoutputStream; import org.springframework.cache.cache; import org.springframework.cache.support.SimpleValueWrapper; import org.springframework.dao.dataaccessException; import org.springframework.data.redis.connection.redisconnection; import org.springframework.data.redis.core.rediscallback; import org.springframework.data.redis.core.redistemplate; public class recisutil implementiert cache {private redistemplate <string, Object> redistemplate; privater Zeichenfolge Name; public redistemplate <string, object> getRedistemplate () {return redistemplate; } public void setRedistemplate (redistemplate <string, Objekt> redistemplate) {this.redistemplate = redISTemplate; } public void setName (String -Name) {this.name = name; } @Override public String getName () {return this.name; } @Override public Object GetNATTIVECache () {return this.redistemplate; } /*** Taste vom Cache abrufen* /@override public valueWrapper get (Objektschlüssel) {System.out.println ("Get Key"); Final String keyf = key.toString (); Objekt Objekt = null; Object = redistemplate.execute (neuer rediscallback <Object> () {public Object doInRedis (redisconnection -Verbindung) löscht DataAccessException {byte [] key = keyf.getBytes (); byte [] value = connection.get (Schlüssel); if (value == null) {{} return;} zurück. return (Object! = NULL? NEW SimpleValueWrapper (Objekt): NULL); } /*** Speichern Sie einen neuen Schlüssel zum Cache*Nehmen Sie zuerst den Namen und das Objekt und konvertieren Sie ihn dann in Bytearray* /@überschreiben Sie öffentliche void put (Objektschlüssel, Objektwert) {System.out.println ("Taste put"); Final String keyf = key.toString (); endgültiger Objektwert = Wert; endgültige lange Lebensdauer = 86400; redistemplate.execute (neuer rediscallback <long> () {public Long doinRedis (Redisconnection Connection) löst DataAccessException {byte [] keyb = keyf.getBytes (); byte [] valueB = toByTearray (ValueF); Connection.set (Keyb, ValueB); if (livetime) {connection.expire (keyb, valueB); 1l; } private byte [] tobytearray (Objekt 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 (); } return bytes; } private Object toobject (byte [] bytes) {Objekt obj = null; Versuchen Sie {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 (); } return obj; } /*** Taste löschen* /@override public void evict (Objektschlüssel) {System.out.println ("Del Key"); Final String keyf = key.toString (); redistemplate.execute (neuer rediscallback <ong> () {public long doInredis (Redisconnection Connection) löst DataAccessException {return Connection.del (keyf.getBytes ());}}); } /*** klare Schlüssel* /@überschreiben public void clear () {System.out.println ("Clear Key"); redistemplate.execute (neuer rediscallback <string> () {public String doInredis (redisconnection Connection) löscht DataAccessException {Connection.flushdb (); return "OK";}}); } @Override public <T> T get (Objektschlüssel, Klasse <T> Typ) {return null; } @Override public valueWrapper putifabSent (Objektschlüssel, Objektwert) {return null; }} 9. Spring integriert MyBatis- und Redis -Konfigurationsdateien
<? 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.spingframework.org/schema/mvc" xmlns: aop = "http: //wwww.sspringframew." ork.org/schema/aop"xmlns- http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/aop http://www.springFramework.org/schema/aop/sping- 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.xsd"> irgendw. -> <context: component-scan base-package = "com.sl.user.service" /> <context: component-scan base-package = "com.sl.user.service. annotation--><cache:annotation-driven/><!-- MyBatis start --><!-- Configure dataSource DriverManagerDataSource--><bean id="dataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"></property><property name="url" value = "JDBC: MySQL: //127.0.0.1: 3306/test"> </Eigenschaft> <Eigenschaft name = "userername" value = "root"> </property> <Eigenschaft name = "Passwort" value = "root"> </property> </bean> <!-MyBatis configuration SQLSSessionFactoryBean-> <ban id = SessionFactoryFactoryFactoryBean-> <ban id = SessionFactory " name="dataSource" ref="dataSource"></property><property name="configLocation" value="classpath:config/mybatis.xml"></property><property name="mapperLocations" value="classpath:mapper/UserMapper.xml"></property></bean><!-- mybatis automatic scan to load Sql map file/interface: MapperscannerConfiger SQLSessionFactoryBasepackage: Geben Sie das Paket an, wobei sich die SQL-Kartendatei/die Schnittstelle befindet (Auto-Scan)-> <bean> <Eigenschaft name = " DataSourcetransactionManager-> <bean id = "txManager"> <Eigenschaft name = "dataSource" ref = "dataSource"> </property> </bean> <!-unter Verwendung eines deklarativen Transaktions-Managers: Referenz auf den oben definierten Transaktionsmanager-> <Tx: Annotation-Driven-Manager = "Txmanager"> </tx: Annotation-DRiven-DRiven-Manager = "TxManager"> </tx: Annotation-DRiven-DRiven-Manager = "TxManager"> </tx: Annotation-DRiven-Manager = "txmanager"> </tx: Annotation-DRiven-DRiven-Manager = "txmanager"> </tx: Annotation-DRiven-DRiven> <! -> <!-Redis-Teil starten-> <!-Konfigurieren Sie den Redis-Verbindungspool JedispoolConfig-> <bean id = "poolconfig"> <Eigenschaft name = "maxidle" value = "300" /> <Eigentum name = "MaxTotal" value = "600" /> < /> <! id = "connfactory"> <Eigenschaft name = "hostname" value = "127.0.0.1"> </property> <Eigenschaft name = "port" value = "6379"> </property> <Eigenschaft name = "poolconfig" ref = "poolconfig"> </property> </ban> <!-redistemplate configure redistemplate-> <Bean id = rot. name = "connectionFactory" ref = "connfactory"/> </bean> <bean id = "cachemanager"> <Eigenschaft name = "caches"> <set> <bean> <Eigenschaft name = "redistemplate" ref = "redistemplate"/> <Property name = "name" value = "user"/> <! </bean> </beans>
10, SpringMVC -Konfigurationsdatei
<? 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://wwwwww./wwwww./wwwww./wwwwww./wwwww./wwwww./wwwww./wwwww./wwwww./wwwwww./wwwwww./wwwww.Schema http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/aop http://www.springframework.g/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springFramework.org/schema/tx http://www.springframe.org/schema/tx/sping-tx-4.0.org/schema/tx/sping-tx-4.0.g. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/sschema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"><Mvc:Notation-biven/<!-- Aktivieren Sie die Spring-MVC-Annotation-> <Kontext: Annotation-config/> <!-Setzen Sie das JAR-Paket, wobei die Klassen die Annotation verwenden. Base-Package = "com.sl.user. value = "/views/"/> <Eigenschaft name = "suffix" value = ". jsp"/> </bean> <bean> <!-JSON Converter-> <Property name = "MessageConverters"> <list> <Bean> <Eigenschaft NAME = "SupportedMediTypes"> <List> <wert> application/json; charSet = utf-8 </value> <wert> text/json; charSet = utf-8 </value> </list> </property> </bean> </list> </property> </bean> </beans>
11, MyBatis -Konfigurationsdatei
<? alias-> <typealiases> <typealias alias = "user" type = "com.sl.user.vo.uservo"/> </typealiases> </configuration>
12, log4j
# Setzen Sie die Stammkategorie Priorität für Info und seinen einzigen Appender auf console.log4j.rootcategory = debug, console# log4j.rootcategory = Info, Console, Logfile# Konsole wird als KonsoleAppender eingestellt, indem er ein Konsroppender ist Musterlayout.log4j.appender.console = org.apache.log4j.conoleAppenderlog4j.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 = Debugog4j.Logger.java.Sql.RepreparedStatement = Debuglog4j.Logger.java.Sql.Resulatement = Debuglog4j.Log4j.Log4j.Log4j.Log4j.log4j.log4j.log4j.log4j.Logger. Dreizehn, web.xml
<? 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>pparam-name> contextConfigLocation</param-n 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> <hörer> <hörerklasse> org.springframework.web.Context.ContextloaderListener </Listener-Class> </Listener> <!-- Log-> <hörer> <hörerklasse> org.springframework.web.util.log4jconfigListener </Listener-Klasse> </listener> <Servlet> <Servlet-name> Spring </servlet-name> <Servlet-Class> org.springFramework.web.Servlet.Dispatchlet.Dispatcherlet.Web.Servlet.Dispatcherlet.Web.Servlet.Dispatcherlet.Web.Servlet contextConfigLocation </param-name> <param-value> classPath: config/springmvc.xml </param-value> </init-param> <load-on-startup> 1 </loa D-on-Startup> </Servlet> <Servlet-Mapping> <Servlet-Name> Spring </Servlet-Name> <URL-Muster>*. Do </url-pattern> </servlet-Mapping> <!- Lösen Sie das Problem des verstümmelten chinesischen Code -> <Filter> <Filter-Name> CharacterCoding </filter-name> <filterklasse> org.springframework.web.filter.CharactercodingFilter </filt ER-Class> <init-param> <param-name> codierung </param-name> <param-value> utf-8 </param-value> </init-param> <init-param> <param-name> cross Codierung </param-name> <param-value> true </param-value> </init-param> </filter> <filter-mapping> <filter-name> charakteritätserklärung </filter-name> < URL-Muster>*. Do </URL-Muster> </filter-mapping> <Welcome-File-List> <Welcome-File> Index.jsp </Welcome-File> </Welcome-File-List> </web-App>
Vierzehn, Test, wurden als Beispiel (GetUser () -Methode) befragt, die JSP -Testseite ist hässlich, also werde ich es nicht veröffentlichen, sondern nur eine selbst schreiben. . .
Vor der Abfrage:
Führen Sie die erste Frage aus:
Führen Sie die zweite Abfrageoperation durch:
Wie in der obigen Abbildung zu sehen ist, wird erneut keine SQL ausgeführt und Daten direkt aus Redis erhalten.
Das oben oben ist die Methode zur Integration von Redis basierend auf Anmerkungen durch den Herausgeber. Ich hoffe, es wird für alle hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird allen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!