springboot+mybatis+redis+mysql项目搭建,含示例Demo

转载自:https://blog.csdn.net/qq_40772342/article/details/105049322

==========

 

redis在web开发中使用的场景很多,其中缓存是其中一个很重要的使用场景,之所以用作缓存,得益于redis的读写数据,尤其是在读取数据的时候是直接走内存的,这样在高并发访问数据的时候,和查询数据库相比,redis读取数据的高效性、快速性的优势可见一斑

Redis注解概念

在看代码前先看看目录结构

 

 

 

 

 

 


启动类

@SpringBootApplication
@EnableCaching
public class RedisdemoApplication {

public static void main(String[] args) {
SpringApplication.run(RedisdemoApplication.class, args);
}

}

 

application.yml配置

spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 123456
url: jdbc:mysql://127.0.0.1:3306/schooldb?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true
#redis配置
redis:
host: 127.0.0.1
password: 123456
port: 6379
jedis:
pool:
max-active: 20
max-idle: 8
min-idle: 0
max-wait: 5000
#mybatis的配置
mybatis:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mapper-locations: classpath:mapper/*.xml

 

实体类

public class Dept implements Serializable {
private Integer id;
private String dname;
private String loc;

@Override
public String toString() {
return "Dept{" +
"id=" + id +
", dname='" + dname + '\'' +
", loc='" + loc + '\'' +
'}';
}

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getDname() {
return dname;
}

public void setDname(String dname) {
this.dname = dname;
}

public String getLoc() {
return loc;
}

public void setLoc(String loc) {
this.loc = loc;
}
}

 

public class RespBean {
private Integer status;
private String msg;
private Object obj;

public RespBean(Integer status, String msg) {
this.status = status;
this.msg = msg;
}

public static final RespBean DELETE_SUCCESS = new RespBean(200,"删除成功");
public static final RespBean DELETE_ERROR = new RespBean(-1,"删除失败");

public static final RespBean ADD_SUCCESS = new RespBean(200,"添加成功");
public static final RespBean ADD_ERROR = new RespBean(-1,"添加失败");

public static final RespBean UPDATE_SUCCESS = new RespBean(200,"更新成功");
public static final RespBean UPDATE_ERROR = new RespBean(-1,"更新失败");

public Integer getStatus() {
return status;
}

public void setStatus(Integer status) {
this.status = status;
}

public String getMsg() {
return msg;
}

public void setMsg(String msg) {
this.msg = msg;
}

public Object getObj() {
return obj;
}

public void setObj(Object obj) {
this.obj = obj;
}

private RespBean(Integer status, String msg, Object obj) {
this.status = status;
this.msg = msg;
this.obj = obj;
}

private RespBean() {
}
}

 

mapper层

@Mapper
public interface DeptMapper {
Integer addDept(Dept dept);
Integer deleteById(Integer id);
Integer updateDeptById(Dept dept);
Dept findAllDept(Integer id);
}

 

service层

public interface DeptService {
Dept addDept(Dept dept);
Integer deleteById(Integer id);
Dept updateDeptById(Dept dept);
Dept findAllDept(Integer id);
}

 

serviceimpl层

@Service
public class DeptServiceImpl implements DeptService {
@Autowired
private DeptMapper deptMapper;

@CachePut(cacheNames = "dept",key = "#result.id")
@Override
public Dept addDept(Dept dept) {
deptMapper.addDept(dept);

return dept;
}

@CacheEvict(cacheNames = "dept")
@Override
public Integer deleteById(Integer id) {
Integer result=deptMapper.deleteById(id);
return result;
}
@CachePut(cacheNames = "dept",key = "#result.id")
@Override
public Dept updateDeptById(Dept dept) {
deptMapper.updateDeptById(dept);
return dept;
}

@Cacheable(cacheNames = "dept",key = "#id")
@Override
public Dept findAllDept(Integer id) {
return deptMapper.findAllDept(id);
}

}

 

controller

@RestController
@RequestMapping("/dept")
public class DeptController {
@Autowired
private DeptService deptService;

@GetMapping("/{id}")
public Object findAll(@PathVariable Integer id){
Dept allDept = deptService.findAllDept(id);
return allDept;
}

/**
* 删除
* @param id
* @return
*/
@DeleteMapping("/{id}")
public RespBean deleteDept(@PathVariable Integer id){
try {
deptService.deleteById(id);
return RespBean.DELETE_SUCCESS;//删除成功
} catch (Exception e) {
e.printStackTrace();
return RespBean.DELETE_ERROR;//删除失败
}
}

/**
* 添加
* @param dept
* @return
*/
@PostMapping("/")
public RespBean addDept(@RequestBody Dept dept){
try {
deptService.addDept(dept);
return RespBean.ADD_SUCCESS;//添加成功
} catch (Exception e) {
e.printStackTrace();
return RespBean.ADD_ERROR;//添加失败
}
}

/**
* 更新
* @param dept
* @return
*/
@PutMapping("/")
public RespBean updateDept(@RequestBody Dept dept){
try {
deptService.updateDeptById(dept);
return RespBean.UPDATE_SUCCESS;//添加成功
} catch (Exception e) {
e.printStackTrace();
return RespBean.UPDATE_ERROR;//添加失败
}

}


}

 

DeptMapper.xml

<?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.song.mapper.DeptMapper">

<insert id="addDept" keyProperty="id" useGeneratedKeys="true" parameterType="com.song.entity.Dept" >
insert into dept(dname,loc)values (#{dname},#{loc})
</insert>

<delete id="deleteById">
delete from dept where id=#{id}
</delete>

<update id="updateDeptById" parameterType="com.song.entity.Dept">
update dept set dname=#{dname},loc=#{loc} where id=#{id}
</update>

<select id="findAllDept" resultType="com.song.entity.Dept" >
select*from dept where id=#{id}
</select>
</mapper>

 

改变默认jdk序列化器

@Configuration
public class MyRedisConfig {
@Bean(name = "redisTemplate")
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){

RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();

redisTemplate.setConnectionFactory(redisConnectionFactory);
redisTemplate.setKeySerializer(keySerializer());
redisTemplate.setHashKeySerializer(keySerializer());
redisTemplate.setValueSerializer(valueSerializer());
redisTemplate.setHashValueSerializer(valueSerializer());
return redisTemplate;
}

@Primary
@Bean
public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory){
//缓存配置对象
RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig();

redisCacheConfiguration = redisCacheConfiguration.entryTtl(Duration.ofMinutes(30L)) //设置缓存的默认超时时间:30分钟
.disableCachingNullValues() //如果是空值,不缓存
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(keySerializer())) //设置key序列化器
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer((valueSerializer()))); //设置value序列化器

return RedisCacheManager
.builder(RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory))
.cacheDefaults(redisCacheConfiguration).build();
}


private RedisSerializer<String> keySerializer() {
return new StringRedisSerializer();
}

private RedisSerializer<Object> valueSerializer() {
return new GenericJackson2JsonRedisSerializer();
}
}

 

效果

可以打开redis可视化工具,首先没有数据

 

 

使用postman测试

 

 

redis中

 

 

git链接:https://github.com/huangdan92/springbootRedis

posted @ 2023-02-28 15:04  larybird  阅读(708)  评论(0编辑  收藏  举报