加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Spring与Mybatis基于注解整合Redis的方法

发布时间:2020-05-23 20:41:55 所属栏目:Java 来源:互联网
导读:基于这段时间折腾redis遇到了各种问题,想着整理一下。本文主要介绍基于Spring+Mybatis以注解的形式整合Redis。废话少说,进入正题。

基于这段时间折腾redis遇到了各种问题,想着整理一下。本文主要介绍基于Spring+Mybatis以注解的形式整合Redis。废话少说,进入正题。

  首先准备Redis,我下的是Windows版,下载后直接启动redis-server就行了,见下图:

一,先上jar包

二,创建实体类

package 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.JsonSerialize;
@JsonSerialize 
@JsonNaming(PropertyNamingStrategy.LowerCaseWithUnderscoresStrategy.class) 
public class UserVO implements Serializable{
private static final long serialVersionUID = 1L;
private int id;
private String username;
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 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;
}
@Override
public String toString() {
return "UserVO [id=" + id + ",username=" + username + ",password="
+ password + ",age=" + age + "]";
}
}

三,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);
}

四,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.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"/>
</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">
update t_user set
<if test="username != null and username != ''"> username = #{username},</if>
<if test="password != null and password != ''"> password = #{password},</if>
<if test="age != null and age != ''"> age = #{age}</if>
where 1=1
<if test="id != null and id != ''">and id = #{id}</if>
</update>
<select id="getUser" parameterType="int" resultType="User" >
select * from t_user where id = #{id}
</select>
<select id="getUserById" parameterType="int" resultType="java.lang.String" >
select username from t_user where id = #{id}
</select>
</mapper>

五,Service接口

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);
}

六,Service实现

package com.sl.user.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import com.sl.user.dao.UserDao;
import com.sl.user.service.UserService;
import com.sl.user.vo.UserVO;
@Service("userService")
@Transactional(propagation=Propagation.REQUIRED,rollbackFor=Exception.class) 
public class UserServiceImpl implements UserService{
@Autowired
private UserDao userDao;
@Override
@CacheEvict(value="User",key="addUser",allEntries=true) 
public void 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",allEntries = true) 
public void updateUser(UserVO user) {
userDao.updateUser(user);
}
@Override
@Cacheable(value="User",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);
}
}

七,Ctrl层

package 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.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.sl.user.service.UserService;
import com.sl.user.vo.UserVO;
@Controller
@RequestMapping("/userCtrl")
public class UserCtrl {
@Autowired
private UserService userService;
@RequestMapping("/addUser")
public void addUser(UserVO user){
userService.addUser(user);
}
@RequestMapping("/deleteUser")
public void deleteUser(UserVO user){
userService.deleteUser(user);
}
@RequestMapping("/updateUser")
public void updateUser(UserVO user){
userService.updateUser(user);
}
@ResponseBody
@RequestMapping("/getUserById")
public Map<String,Object> getUserById(UserVO user){
Map<String,Object> map = new HashMap<String,Object>();
map.put("msg",userService.getUserById(4));
return map;
}
@ResponseBody
@RequestMapping("/getUser")
public Map<String,Object> getUser(UserVO vo){
Map<String,Object>();
Object user = userService.getUser(4);
map.put("msg",user.toString());
return map;
}
}

八,Redis关键类,用于CRUD操作

package com.sl.user.redis;
import java.io.ByteArrayInputStream; 
import java.io.ByteArrayOutputStream; 
import java.io.IOException; 
import java.io.ObjectInputStream; 
import 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 RedisUtil implements Cache{
private RedisTemplate<String,Object> redisTemplate; 
private String name; 
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; 
} 
/**
* 从缓存中获取key
*/
@Override 
public ValueWrapper get(Object key) { 
System.out.println("get key"); 
final String keyf = key.toString(); 
Object object = null; 
object = redisTemplate.execute(new RedisCallback<Object>() { 
public Object doInRedis(RedisConnection connection) 
throws DataAccessException { 
byte[] key = keyf.getBytes(); 
byte[] value = connection.get(key); 
if (value == null) { 
return null; 
} 
return toObject(value); 
} 
}); 
return (object != null ? new SimpleValueWrapper(object) : null); 
} 
/**
* 将一个新的key保存到缓存中
* 先拿到需要缓存key名称和对象,然后将其转成ByteArray
*/
@Override 
public void put(Object key,Object value) { 
System.out.println("put key"); 
final String keyf = key.toString(); 
final Object valuef = value; 
final long liveTime = 86400; 
redisTemplate.execute(new RedisCallback<Long>() { 
public Long doInRedis(RedisConnection connection) 
throws DataAccessException { 
byte[] keyb = keyf.getBytes(); 
byte[] valueb = toByteArray(valuef); 
connection.set(keyb,valueb); 
if (liveTime > 0) { 
connection.expire(keyb,liveTime); 
} 
return 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(); 
} 
return bytes; 
} 
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(); 
} 
return obj; 
} 
/**
* 删除key
*/
@Override 
public void evict(Object key) { 
System.out.println("del key"); 
final String keyf = key.toString(); 
redisTemplate.execute(new RedisCallback<Long>() { 
public Long doInRedis(RedisConnection connection) 
throws DataAccessException { 
return connection.del(keyf.getBytes()); 
} 
}); 
} 
/**
* 清空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> type) { 
return null; 
} 
@Override 
public ValueWrapper putIfAbsent(Object key,Object value) { 
return null; 
} 
}

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读