Berdasarkan fakta bahwa saya mengalami berbagai masalah selama periode waktu ini, saya berpikir untuk menyelesaikannya. Artikel ini terutama memperkenalkan integrasi Redis dalam bentuk anotasi berdasarkan Spring+Mybatis. Lebih sedikit omong kosong, sampai ke intinya.
Pertama, siapkan redis. Saya akan menggunakan versi Windows. Setelah mengunduh, mulai saja redis-server secara langsung. Lihat gambar di bawah ini:
Pertama, tambahkan paket jar
2. Buat kelas entitas
Paket com.sl.user.vo; import java.io.serializable; import com.fasterxml.jackson.databind.propertynamingstrategy; import com.fasterxml.jackson.databind.annotation.jsonnaming; impor com.fasterxml.jackson.databind.annotation.jsonnaming; @JSonnaming (PropertiyNamingStrategy.LowerCaseWithundersCoresstrategy.class) kelas publik Uservo mengimplementasikan serializable {private static final long serialversionuid = 1l; private int id; nama pengguna string pribadi; kata sandi string pribadi; usia int privat; userervo publik () {super (); } UserVo publik (int id, string nama pengguna, kata sandi string, usia int) {super (); this.id = id; this.username = username; this.password = kata sandi; this.age = usia;} int getid publik () {return id public; UserName) {this.userName = username;} public string getPassword () {return password;} public void setPassword (kata sandi string) {this.password = password;} public int getage () {return use;} public void setage (int usia) {this.age = usia;} {return overidePublic string public ({this. username = " + username +", password = " + password +", usia = " + usia +"] ";}} Tiga, antarmuka DAO
package 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 updateUser(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"> <draD.aMaPa = "comybatis-3-mapper.dtd"> > <resultMap id = "userResult" type = "user"> <result column = "id" properti = "id"/> <hasil kolom = "userame" properti = "userame"/> <hasil kolom = "kata sandi" properti = "kata sandi"/> <hasil kolom = "user" ouct = "era"/> <hasil kolom = "usia" properti = "usia"/> </"" era "/> <" ADDUM ADDUM = "usia" usia "" Usia "/<</" " 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">update t_user set<if test="username != null dan nama pengguna! = '' "> username = #{username}, </if> <if test =" password! = null and password! = '' '"> #{password}, </if> <if test =" use! = null dan usia! =' '"neen = #{usia} </if> ID 1 </ID = 1 <ifer = if if = ifer = dan neL load = {{even {if> if> ife! #{ID} </if> </devate> <pilih id = "getUser" parameTerType = "int" resultType = "user"> pilih * dari t_user di mana id = #{id} </pilih> <pilih id = "getUserById" parameterType = "int" resultType = "java.Lang.string"> ParameTerType = "int" hasil "hancur =" java.Lang.string "> ParameTerType =" int "hasil" hancur = "java.Lang.string"> ParameTerType = "int" hasil "hancur =" java.Lang.string "> ParameTerType =" int "hasil" hancur = "java.Lang"> ParameTerType = "int" hasil "hancur =" java. #{ID} </select> </mapper> 5. Antarmuka Layanan
package 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 updateUser(UserVO user);public UserVO getUserById(int id);public UserVO getUser(int id);} Keenam, implementasi layanan
Paket com.sl.user.service.impl; impor org.springframework.beans.factory.annotation.Autowired; impor org.springframework.cache.annotation.cacheevict; impor org.springframework.cache.annotation.cacheevict; impor org.springframework.cache.annotation.cacheevict; impor org.springframework.cache org.springframework.transaction.annotation.propagation; impor org.springframework.transaction.annotation.transaction; com.sl.user.vo.uservo; @service ("Userservice")@Transactional (propagation = propagation.equired, rollbackfor = exception.class) Public Class UserserviceImpl mengimplementasikan Userservice {@AutowiredPrivate Userdao userdao; addUser(UserVO user) {userDao.addUser(user);}@Override@CacheEvict(value = {"getUser", "getUserById"}, allEntries = true) public void deleteUser(UserVO user) {userDao.deleteUser(user);}@Override@CacheEvict(value = {"getUser", "getUserById"}, allentries = true) public void updateAser (userVo user) {userdao.updateUser (user);}@override@cacheable (value = "user", key = "getUserbyId") public userVo getUserbyId (int id) {Key = "getUserById") public userVo getUserById (int id) {return userdao.getUserById (id);}@override@cacheable (value = "user", key = "'getUser'") public userVo getUser (int id) {return userdao.getUser (id);}} Tujuh, lapisan Ctrl
Paket com.sl.user.web; impor java.util.hashmap; impor java.util.map; impor org.springframework.beans.factory.annotation.Autowired; impor org.springframework.stereotype.controller; impor org.spramram.spappppapping 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;@RequestMapping("/addUser")public void addUser (userervo user) {UsserService.adduser (user);}@requestMapping ("/deleteUser") public void deleteUser (userver user) {Userservice.deleteUser (userServo);}@requestMapping ("/updateUser") Public Void UpdateUser (USSERervo pengguna) {UserserVice.updateUser (pengguna);}@responseBody@requestMapping ("/getUserbyId") Peta publik <string, objek> getUserbyId (userervo user) {peta <string, objek> peta = hashMap <string, objek> (); peta. peta;}@responsebody@requestMapping ("/getUser") Peta publik <string, objek> getUser (userVo vo) {peta <string, objek> peta = hashmap baru <string, objek> (); objek user = userservice.getUser (4); peta.put ("msg", user.toString (); return map; 8. Kelas Kunci Redis, digunakan untuk operasi CRUD
paket com.sl.user.redis; import java.io.bytearrayInputStream; impor java.io.bytearrayoutputStream; impor java.io.ioException; impor java.io.objectInputStream; impor java.io.objectOutputStream; impor java.io.objectOutputStream; impor org.springframework.cache.cache; impor org.springframework.cache.support.simplevalueWrapper; impor org.springframework.dao.DataAccessException; impor org.springframework.data.redis.connection.redisconnection; impor org.springframework.data.redis.core.rediscallback; impor org.springframework.data.redis.core.redistemplate; Redisutil kelas publik mengimplementasikan cache {private redistemplate <string, objek> redistemplate; nama string pribadi; redistemplate publik <String, Object> getReDistemplate () {return redistemplate; } public void setredistemplate (redistemplate <String, Object> redistemplate) {this.redistemplate = redistemplate; } public void setName (name string) {this.name = name; } @Override public string getName () {return this.name; } @Override objek publik getNativeCache () {return this.redistemplate; } /*** Dapatkan tombol dari cache* /@override public valuewrapper get (tombol objek) {System.out.println ("Get Key"); string final keyf = key.toString (); Objek objek = null; Object = redistemplate.execute (Rediscallback baru <POMPERTIF> () {Objek publik doInredis (koneksi redisconnection) melempar DataAccessException {byte [] key = keyf.getbytes (); byte [] value = connection.get (key); if (value == null) {return null;} return to null; return (objek! = null? new SimpleValueWrapper (objek): null); } /*** Simpan kunci baru ke cache*Pertama -tama dapatkan nama dan objek dan kemudian konversinya menjadi bytearray* /@override public void put (tombol objek, nilai objek) {System.out.println ("PUT KEY"); string final keyf = key.toString (); nilai objek akhir = nilai; Final Long Livetime = 86400; redistemplate.execute (rediscallback baru <long> () {public long doinredis (koneksi redisconnection) melempar dataAccessException {byte [] keyb = keyf.getbytes (); byte [] valueB = TobyTeArray (valuef); connection.set (keyb, valueB); if); } return 1L;}}); } byte private [] tobyTeArray (objek obj) {byte [] bytes = null; BytearrayoutputStream bos = new bytearrayoutputStream (); coba {ObjectOutputStream OOS = ObjectOutputStream baru (BOS); oos.writeObject (OBJ); oos.flush (); bytes = bos.tobyteArray (); oos.close (); bos.close (); } catch (ioException ex) {ex.printstacktrace (); } return byte; } objek pribadi toobject (byte [] bytes) {objek obj = null; coba {bytearrayInputStream bis = new bytearrayInputStream (bytes); ObjectInputStream OIS = ObjectInputStream baru (BIS); obj = ois.readObject (); ois.close (); bis.close (); } catch (ioException ex) {ex.printstacktrace (); } catch (classNotFoundException ex) {ex.printstacktrace (); } kembalikan obj; } /*** Hapus tombol* /@override public void eVict (Kunci objek) {System.out.println ("Del Key"); string final keyf = key.toString (); redistemplate.execute (Rediscallback baru <long> () {public long doinredis (redisconnection connection) melempar DataAccessException {return connection.del (keyf.getbytes ());}}); } /*** Key Clear* /@override public void clear () {System.out.println ("Clear Key"); redistemplate.execute (Rediscallback baru <string> () {public String doInredis (Redisconnection Connection) melempar DataAccessException {connection.flushdb (); return "OK";}}); } @Override public <t> t get (tombol objek, type <T>) {return null; } @Override public valuewrapper putifabsent (kunci objek, nilai objek) {return null; }} 9. Spring mengintegrasikan file konfigurasi mybatis dan redis
<? XML Versi = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmls 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 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-weans-4.0.xsd http://www.springframework.org/schema/aop http://www.spramework.org/schema/aop:aop:/aop 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.xsdhtp://www.springframework.org/schema/cache http://www.springframework.org/schema/cache: -> <konteks: komponen-scan-package = "com.sl.user.service" /> <konteks: komponen-scan-package = "com.sl.user.service.*" /> <konteks: component-scan-package = "com.sl.user.redis" /<! Annotation-> <cache: anotasi-driven/> <!-mybatis start-> <!-Mengkonfigurasi DataSource DriverManagerDataSource-> <bean id = "DataSource"> <name properti = "driverclassName" value = "com.mysql.jdbc.driver"> </property name = "com.mysql.jdbc.driver"> </property> <Property name = "com.mysql.jdbc.driver"> </property> <Property name = "com.mysql.jdbc.driver"> </property> <Properten = "com.mysql.jdbc.driver"> </property> <Property = "com.mysql" value = "jdbc: mysql: //127.0.0.1: 3306/test"> </property> <properti name = "nama pengguna" value = "root"> </propert> <properti nama = "kata sandi" value = "root" </properti> </bean> <!-mybatis konfigurasi sqlsessionfacorysefacory-bean = "Sesi =" SESI "SESITOR" SESITOR "SESITOR" SESITOR " name = "DataSource" ref = "DataSource"> </property> <Properti Nama = "ConfigLocation" Value = "ClassPath: Config/mybatis.xml"> </property> <properti name = "mapperlocations" value = "classpath: mapper/userMapper.xml"> </properti> </bean> <! MappersCannerConfigurer SQLSessionFactoryBasEpackage: Tentukan paket di mana file/antarmuka peta SQL berada (pemindaian otomatis)-> <bean> <nama properti = "sqlSessionFactory" ref = "SesionFactory"> </prup Property> <nama properti = "basepackage" value = "com.sl.sl. Manajemen DataSourCetransActionManager-> <bean id = "txManager"> <name properti = "DataSource" ref = "DataSource"> </preate> </ bean> <!-Menggunakan Manager Transaksi Deklaratif:-Referensi Transaksi yang Ditentukan di atas-> <tx: annotasi yang digerakkan oleh transaksi-manager-manager = "TXRIVEKSTIONAL> <" tx: tx-txx-dorong transaksi-manager-manager = "TX =" TXMIVER <" --><!-- Configure redis part start --><!-- Configure redis connection pool JedisPoolConfig--><bean id="poolConfig"><property name="maxIdle" value="300" /> <property name="maxTotal" value="600" /> </bean> <!-- Configure CoonnectionFactory JedisConnectionFactory--><bean id="connFactory"><property name = "hostName" value = "127.0.0.1"> </property> <properti name = "port" value = "6379"> </property> <Properti Nama = "PoolConfig" Ref = "PoolConfig"> </properti "</bean> <!-Redistemplate Stringredistemple-</property" </bean> <! Ref = "ConnFactory"/> </bean> <bean id = "cacheManager"> <name properti = "cache"> <set> <bean> <name properti = "redistemplate" ref = "redistemplate"/> <nama properti = "name" value = "user"/<!-nama pengguna harus digunakan dalam kelas atau metode annot = "name" value = "User"/<!-nama pengguna harus digunakan dalam kelas atau metode annot = "name" value = "User"/<! </tagel> </tobel>
10, file konfigurasi springmvc
<? XML Versi = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmls 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.springframewework http://www.springframework.org/schema/beans/spring-weans-4.0.xsd http://www.springframework.org/schema/aop http://www.spramework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http:/www.spramework.org/schema/tx:tp:tp:/spramework.org/schema/tx http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframewework.org/schema/www.spramework.org/schema/schema/www.spramework.org/schema/schema/spramework http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"><mvc:annotation-driven/>< !-- mengaktifkan anotasi mvc spring-> Konteks: annotation-config/<! Base-package = "com.sl.user.*"> </konteks: component-scan> <!-Resolusi nama tampilan model, yaitu, menambahkan awalan ke model tampilan nama-> <bean id = "viewResolver"> <nama properti = "viewclass" value = "org.springframework.web.servlet.view.view" value = "org.springframework.web.servlet.view" valuex = "org.springframework.web.servlet.view" "valuex =" org. value = "/views/"/> <properti name = "suffix" value = ". jsp"/> </ bean> <bean> <!-json converter-> <name properti = "messageConverters"> <cist> <bean> <properti name = "SupportedMediatypes"> <list> <value> Aplikasi/json; charset = utf-8 </ value> <value> Teks/json; charset = utf-8 </value> </cist> </propert> </tang> </cist> </preate> </bean> </bean>
11, file konfigurasi mybatis
<? Xml Version = "1.0" encoding = "UTF-8"?> <! Doctype Configuration Public "-// mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <! ... ... alias-> <yypealiases> <typealias alias = "user" type = "com.sl.user.vo.uservo"/> </yypealiases> </onfigururation>
12, log4j
# Tetapkan prioritas kategori root ke info dan satu -satunya appender ke console.log4j.rootcategory = debug, konsol# log4j.rootcategory = info, konsol, logfile# konsol diatur untuk menjadi konsoleAppender menggunakan a PatternLayout.log4j.Appender.console = org.apache.log4j.consoleAppenderlog4j.applender.console.threshold = debuglog4j.appender.console.layout = org.apache.log4j.patternlayoutlog4j.applay.console.apache.log4j.patternlayoutlog4j.appender.console.apache.apache.log4j.patternlayoutlog4j.appender.console.apache.apache.log4j.patternlayoutlog4j.appling.console.apache.apache.log4j.patternlayoutlog4j.appender.console.apache.apache.apon 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
Tiga Belas, Web.xml
<? Xml Version = "1.0" encoding = "UTF-8"?> <Web-app Versi = "3.0" xmlns = "http://java.sun.com/xml/ns/javaee" xmlns: xsi = "http:/www.w3.org/org/2001 =" http:/www.w3.org/org/p21 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><param-name>contextConfiglocation</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> log4jrefresherinterval </param-name> <param-value > 60000 </param-value> </context-param> <dresinger> <daringer-class> org.springframework.web.context.contextLoaderListener </listener-class> </listener> <!- Log-> <listener> <Distener-Class> org.springframework.web.util.log4jconfigListener </engeaner-class> </engeaner> <servlet> <servlet-name> </servlet-name> <servlet-class> org.springframework.web.servetchats.dismerser> <servlet> org.springframework.weB.servatchatchasker ContextConfigLocation </param-name> <param-value> classpath: config/springmvc.xml </param-value> </init-param> <load-on-startup> 1 </load-on-startup> </servlet> <servlet-Mapping> <servlet-name> Spring </servlet-name> </servlet> <servet-mapping> <servlet-name> Spring </servlet-name> <rigl-podatu> Masalah Kode Cina Terkocok -> <nilter> <nilter-name> KarakterEncoding </tilter-name> <nift-class> org.springframework.web.filter.characterencodingfilter </filter-class> <inin-param> <param-name> </param-name> <narbally- value> <par param--nevalue> <parar--param> <parar-param> <minion--param--param> <param--name> <param--name> <param--name> <param--name> <Param--name> <Param--name> <param--name> <param--name> <param--name> <param--value> coding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>characterEncoding</filter-name><url-pattern>*.do</url-pattern></filter-mapping><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list></web-app>
Empat belas, tes, telah ditanya sebagai contoh (getUser () metode), halaman tes JSP jelek, jadi saya tidak akan mempostingnya, hanya menulis satu sendiri. . .
Sebelum kueri:
Jalankan kueri pertama:
Lakukan operasi kueri kedua:
Seperti yang dapat dilihat pada gambar di atas, tidak ada SQL yang dieksekusi lagi, dan data diperoleh langsung dari REDIS.
Di atas adalah metode mengintegrasikan REDIS berdasarkan anotasi oleh editor. Saya harap ini akan membantu semua orang. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas semua orang tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!