Основываясь на том факте, что я столкнулся с различными проблемами в течение этого периода времени, я подумал о том, чтобы разобраться в этом. Эта статья в основном представляет интеграцию Redis в форме аннотаций на основе Spring+Mybatis. Меньше чепухи, дойди до сути.
Во -первых, приготовьте Redis. Я собираюсь использовать версию Windows. После загрузки просто начните Redis-Server напрямую. Смотрите изображение ниже:
Во -первых, сначала добавьте пакет JAR
2. Создать класс Entity
пакет com.sl.user.vo; import java.io.serializable; import com.fasterxml.jackson.databind.propertynamingstrategy; импорт com.fasterxml.jackson.databind.annotation.jsonnaming; импорт com.fasterxml.jackson.databind.jantation.jsonsonize; @Jsonnaming (PropertynamingStrategy.LowerCaseWithunderScoressTrategy.class) Общедоступный класс Uservo реализует Serializable {Private Static Long Long Serialversionuid = 1L; Private Int ID; Private String Searname; Private String Password; Private int Age; Public uservo () {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 getUseram 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 () {return userv wome wome wy ege ege egemors wome ege ege; username = " + username +", password = " + password +", age = " + age +"] ";}} Три, интерфейс DAO
пакет com.sl.user.dao; import com.sl.user.vo.uservo; public interface userdao {public void adduser (пользователь Uservo); public void deleserser (Uservo User); public uderver (uservo user); public uservo getuserbyid (int id); public userv 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"> <mapper namespace = "com.srasr.sraser.suser.suser.suser.suser.suser.suser.srash.user.suser.sraser.sraser.sraser.sraser.sraser.sraser.srash. > <resultmap id = "userresult" type = "user"> <result column = "id" property = "id"/> <result column = "userame" propertive = "userame"/> <result column = "password" property = "/> <result column =" Age "Propertive =" age "/> <result column =" age "age"/> <</resultmap> <insert addus = "addus" adsus = "adsus" adsus ". ParameterType = "user"> insert в t_user (имя пользователя, пароль, возраст) значения (#{username},#{password},#{age}) </insert> <обновление идентификатор = "deleteUser" parametertype = "user"> «Удалить * из t_user whed =#{id} </update> <edupt update update» t_user set <if test = "username! = null и username! = '' '> username = #{username}, </if> <if test =" пароль! = NULL и пароль! null и id! = '' '> и id = #{id} </if> </upplet> <select id = "getUser" parametertype = "int" recouttype = "user"> select * from t_user, где id = #{id} </select> <select id = "getuserbyid" parametertype = "int" reculeType = "javaM.lang. t_user, где id = #{id} </select> </mapper> 5. Сервисный интерфейс
Package com.sl.user.service; import com.sl.user.vo.uservo; public inters userservice {public void adduser (пользователь Uservo); public void deleserser (пользователь Uservo); public void UpdateUser (uservo user); public uservo getUserbyid (int id); public getUser (int id); Шестая, реализация услуг
package 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 org.springframework.stereotype.Service;import org.springframework.transaction.annotation.propagation; import org.springframework.transaction.annotation.transactional; импорт com.sl.user.dao.userdao; импорт com.sl.user.serserservice; импорт. com.sl.user.vo.uservo; @Service ("userService")@Transactional (Propagation = Propagation.Required, rowlbackfor = exection.class) Общедоступный класс пользователи userServiceImple userService {@AutowiredPrivate userDao userDao;@override@pulvide = value = "uer -uerfive =" addrie -addrie "ulpledrie = valuedrie = adviser" ulpletrie = valuedrie = adviser "ull Adduser (Uservo User) {userDao.adduser (user);}@override@cacheevict (value = {"getUser", "getUserbyId"}, allentries = true) public void deleteUser (uservo user) {userDao.DeleteUser (пользователь); "getUserById"}, AllentRies = true) public void updateUser (uservo user) {userDao.UpdateUser (user);}@override@cachable (value = "user", key = "getUserbyid") public uservo getUserbyid (int id) {return " userdao.getuserbyid (id);}@override@cachable (value = "user", key = "'getUser'") public uservo getUser (int id) {return userDao.getUser (id);}} Семь, CTRL Layer
пакет com.sl.user.web; import java.util.hashmap; import java.util.map; import org.springframework.beans.factory.annotation.autowired; импорт org.springframework.stereoty.controller; импорт org.spramework.web.bindtation.Requpation; org.springframework.web.bind.annotation.responsebody; import com.sl.user.service.userservice; import com.sl.user.vo.uservo;@controller@requestmapping ("/userctrl") public class userctrl {@autowiredprivate userservice userservice; AddUser (Uservo User) {userservice.adduser (user);}@requestMapping ("/deleteUser") public void deleteUser (uservo user) {userservice.deleteuser (пользователь);}@requestmapp user) {userservice.updateuser (user);}@responsebody@requestmapping ("/getuserbyid") public map <string, object> getUserbyid (uservo user) {map <string> map = new hashmap <string, object>; map.put ("msg", userservice.getuserbyid (4); map;}@responsebody@requestMapping ("/getUser") public map <string, object> getUser (uservo vo) {map <string, object> map = new hashmap <string, object> (); object user = userervice.getuser (4); map.put ("msg", user.tostring ()); 8. Redis Key Class, используемый для операций CRUD
пакет com.sl.user.redis; импортировать java.io.bytearrayinputstream; импортировать java.io.bytearrayoutputstream; импортировать java.io.ioexception; импортировать java.io.objectinputstream; Импорт java.io.objectOutputStream; Импорт java.io.objectOutputStream; Импорт org.springframework.cache.cache; Импорт org.springframework.cache.support.simpleValueWrapper; Импорт org.springframework.dao.dataaccessexception; Импорт org.springframework.data.redis.connection.redisconnection; Импорт org.springframework.data.redis.core.rediscallback; Импорт org.springframework.data.redis.core.redistemplate; открытый класс Redisutil реализует кэш {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* /@override public valueWrapper get (объект клавиша) {System.out.println ("Get Key"); final String keyf = key.toString (); Объект объекта = null; object = Redistemplate.execute (new resiscallback <object> () {public Object doInredis (redisconnection connection) Throws DataCcessException {byte [] key = keyf.getbytes (); byte [] value = connection.get (key); if (value == null) {return null;} return toObject (value); return (Object! = null? New SimpleValueWrapper (Object): NULL); } /*** Сохранить новую клавишу в кэш*Сначала Получите имя и объект, а затем преобразуйте его в Bytearray* /@переопределить public void put (ключ объекта, значение объекта) {System.out.println ("put"); final String keyf = key.toString (); окончательное значение объекта = значение; окончательный длинный ливт = 86400; redistemplate.execute (new resiscallback <long> () {public long doinredis (redisconnection connection) throws DataCcessException {byte [] keyb = keyf.getbytes (); byte [] valueb = tobytearray (valuef); connection.set (keyb, valueb); if (livetime> 0) {connectionexexex. вернуть 1L; } private byte [] tobytearray (Object obj) {byte [] bytes = null; BytearRayOutputStream Bos = new BytearRayOutputStream (); try {objectOutputStream oos = new ObjectOutputStream (bos); OOS.WriteObject (OBJ); oos.flush (); байты = bos.tobytearray (); oos.close (); bos.close (); } catch (ioException ex) {ex.printstackTrace (); } вернуть байты; } частный объект 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; } /*** УДАЛЕНИЕ КЛЮЧ* /@переопределить публичный void evict (object key) {System.out.println ("del Key"); final String keyf = key.toString (); redistemplate.execute (new resiscallback <long> () {public long doInredis (redisconnection connection) throws DataCcessException {return connection.del (keyf.getbytes ());}}); } /*** clear key* /@publice void clear () {system.out.println ("clear key"); redistemplate.execute (new resiscallback <string> () {public String doInredis (Redisconnection Connection) Throws DataCcessException {connection.flushdb (); return "ok";}}); } @Override public <t> t get (ключ объекта, класс <t> type) {return null; } @Override public valueWrapper putifabsent (объект клавиша, значение объекта) {return null; }} 9. Spring интегрирует файлы конфигурации Mybatis и 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 = "http: //www.sprame 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/aop/spring-aop-4.0.xs. 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"> написано Scan Pramework.org/schema/cache.xsd"> -> <context: component-scan base-package = "com.sl.user.service" /> <контекст: component-scan base-package = "com.sl.user.service.*" /> <Контекст: component-scan base-package = "com.sl.user.redis" /> <!-Ansable Annotation-> <context: annotation-config /> start config /> start config /> <! Аннотация-> <Cache: Annotation-raven/> <!-mybatis start-> <!-Настройка DataSource Driver ManagerDataSource-> <bean id = "dataSource"> <name = "driverclassname" value = "com.mysql.jdbc.driver"> </properation> <name = "url" value="jdbc:mysql://127.0.0.1:3306/test"></property><property name="username" value="root"></property><property name="password" value="root"></property></bean><!-- MyBatis configuration SqlSessionFactoryBean --><bean id="sessionFactory"><property name="dataSource" ref = "dataSource"> </propertive> <name = "configlocation" value = "classPath: config/mybatis.xml"> </proportce> <name = "mapperlocations" value = "classpath: mapper/usermapper.xml"> </property> </bean> <!- mybatis scancer scancer wappercercercercercercercercercercercercercercercercercerfercercercercerfer-capercercerfer-capmercercerfer-capmercercerfer-capmercerfer-capmercerfer-cappercerfer. SQLSessionFactoryBasePackage: укажите пакет, в котором находится файл/интерфейс SQL MAP/интерфейс (AUTO SCAN)-> <Bean> <Свойство имя = "sqlSessionFactory" ref = "SessionFactory"> </Property> <Свойство имя = "basepackage" value = "com.suser.dao"> </property> </bean> <! DataSourCetransActionManager-> <bean id = "txmanager"> <name = "dataSource" ref = "dataSource"> </property> </bean> <!-Использование декларативной транзакции-менеджер: Ссылка на менеджер транзакций, определенный выше-> <TX: Draindation-Draining Transaction-Manager = "TXMANARER"> </tx: Ennotation D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-D-DINAVEIS> -> <!-Настройка redis part start-> <!-Configure Redis Connection Pool jedispoolconfig-> <bean id = "boolconfig"> <name = "maxidle" value = "300" /> <name = "maxtotal" value = "600" /> < /bean> <!-connectionfactory jedisconnectionfactory-> "Bean" < /bean> <s! name = "hostname" value = "127.0.0.1"> </property> <name = "port" value = "6379"> </property> <name = "boolconfig" ref = "poolconfig"> </property> </bean> <!-Configure redistemplate Strestistemptate-> <bean id = "redistemplate"> <propect name = "name name name name name namy" ref = "contfactory"/> </bean> <bean id = "cachemanager"> <name = "caches"> <set> <bean> <name = "redistemplate" ref = "redistemplate"/> name = "name" value = "/> <!-Имя пользователя должно использоваться в классе или методах-> </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://wwww.spramemema 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.springframework.org/schema/tx/spring-4.0.xsd 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: anantation-diven/>!!-- Включить аннотацию MVC Spring Mvc-> <Контекст: Annotation-config/> <! base-package = "com.sl.user.*"> </context: component-scan> <!-разрешение имени просмотра модели, то есть добавление префиксов к модели именуемому представлению-> <bean id = "viewresolver"> <свойство = "ViewClass" value = " value = "/views/"/> <name = "suffix" value = ". jsp"/> </bean> <bean> <!-json converter-> <name = "messageconverters"> <sist> <bean> <свойство name = "Поддержка MediaTypes"> <sist> <datue> application/json; charset = utf-8 </value> <datue> 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"> configuration> псевдоним-> <typealiases> <typealias alias = "user" type = "com.sl.user.vo.uservo"/> </typealiases> </configuration>
12, log4j
# Установите приоритет root категории для информации и ее единственного приложения к консоли.log4j.rootcategory = Debug, консоль# log4j.rootcategory = info, консоль, logfile# Консоль установлен в качестве консоляпендера, использующего Patternlayout.log4j.appender.console = org.apache.log4j.consoleappenderlog4j.appender.console.threshold = dexuglog4j.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=DEBUGlog4j.logger.java.sql.ResultSet=DEBUG Тринадцать, web.xml
<? xml version = "1.0" Encoding = "utf-8"?> <web-app arser = "3.0" xmlns = "http://java.sun.com/xml/ns/javaee" xmlns: xsi = "http://www.w3.org/2001/xmlschema electsmance "/www.w3. xsi: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> функции витрины--NAME> testredis</display-name>fontext-param><param-name> contextconfiglocation</param-name ame> <param-value> classPath: config/applicationContext.xml </param-value> </context-param> <stext-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> <lallocer> <listerer> org.springframework.web.context.contextloaderListener </stirlicer-class> </sluster> <!- Log-> <lalloer> <lloader-class> org.springframework.web.util.log4jconfiglistener </stirlicer> </sluster> <servlet> <servlet-name> spring </servlet-name> <servlet-class> org.springframework.web.servlet.dispatcherserververververververververfore> ContextConfiglocation </param-name> <value> classPath: config/springmvc.xml </param-value> </init-param> <dut on-startup> 1 </load-on-startup> </servlet> <servlet-mapping> <servlet-name> spring </servlet-name> <url-pattern>*. do </urlle-pattern-masting> </url-pattern>*. искаженного китайского кода -> <FiLTER> <Filter-name> символкодирование </filter-name> <filter-class> org.springframework.web.filter.characterencodingfilter </filt ER-Class> <Intic-param> <-param-name> кодирование </param-name> <param-value> utf-8 </param-value> </init-param> <init-param> <param-name> forceen кодирование </param-name> <param-value> true </param-value> </init-param> </filter> <Фильтра-картирование> <Filter-name> символкодирование </filter-name> < url-pattern>*. Do </url-pattern> </filter-mapping> <selcopply-file-list> <selcopply-file> index.jsp </wervelode-file> </wellow-file-list> </web-app>
Четырнадцать, тестирование, были запрошены в качестве примера (метод getUser ()), тестовая страница JSP уродливо, поэтому я не буду публиковать его, просто напишите один сам. Полем Полем
Перед запросом:
Выполнить первый запрос:
Выполните вторую операцию запроса:
Как видно на рисунке выше, SQL снова не выполняется, и данные непосредственно получены из Redis.
Выше приведено метод интеграции Redis на основе аннотаций редактором. Я надеюсь, что это будет полезно для всех. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит всем вовремя. Большое спасибо за вашу поддержку сайту wulin.com!