@JsonInclude(JsonInclude.Include.NON_EMPTY) 加上此注解可以消除子类后面的空数据,如下:
使用之后效果如下:
分布式缓存:在查询数据量大的页面加载会很慢,这时可以把查询的数据放入缓存里,提高查询效率;
如何保持缓存与数据的一致性:新增/修改/删除业务功能完成后,删除缓存数据,缓存后删,以保持缓存与数据的一致性;
用户查询步骤:
1.用户访问首页,查询页面先去缓存中拿;
2.缓存中有数据,直接返回给前端;
3.缓存中没有数据,去数据库中拿,返回给前端.并备份一份数据到缓存中;
实现方式有两种:
1.直接使用redis,把数据存入redis中;
2.使用springcache实现(注解版,也是存入redis中);
springcache:
1.导入依赖;
2.yml配置redis参数
3.启动类添加注解@EnableCaching;
4.需要在做缓存的方法上加注解
@Cacheable(cacheNames = "coursrTypeTreeData",key = "'coursrTypeTreeData'")注意有两个单引号5.需保持缓存与数据的一致性,在新增/修改/删除方法上加上注解
@CacheEvict(cacheNames = "coursrTypeTreeData",key = "'coursrTypeTreeData'")
1.导入依赖;
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <exclusions> <exclusion> <groupId>io.lettuce</groupId> <artifactId>lettuce-core</artifactId> </exclusion> </exclusions> </dependency> <!--springboot2.0以后data-redis底层使用的是lettuce,可以更换成jedis--> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> </dependency> </dependencies>
2.yml配置redis参数
redis: database: 0 host: 127.0.0.1 port: 6379 jedis: pool: max-wait: 2000ms min-idle: 2 max-idle: 8
3.启动类添加注解@EnableCaching;
@SpringBootApplication @EnableEurekaClient @EnableCaching public class hrm_course_server_1070App { public static void main(String[] args){ SpringApplication.run(hrm_course_server_1070App.class, args); } }
4.需要在做缓存的方法上加注解
@Override
@Cacheable(cacheNames = "coursrTypeTreeData",key = "'coursrTypeTreeData'")
public JSONResult treeData() {
5.需保持缓存与数据的一致性,在新增/修改/删除方法上加上注解
@PostMapping(value="/save") @CacheEvict(cacheNames = "coursrTypeTreeData",key = "'coursrTypeTreeData'") public JSONResult save(@RequestBody CourseType courseType){
@DeleteMapping(value="{id}") @CacheEvict(cacheNames = "coursrTypeTreeData",key = "'coursrTypeTreeData'") public JSONResult delete(@PathVariable("id") Long id){
开启驼峰自动转换:
configuration:
map-underscore-to-camel-case: true #开启驼峰大小写自动转换
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #开启控制台sql输出
前端课程上下线思路:
1.通过前端传过来的id拿到对象;
2.通过对象,给对象状态赋值;
3.修改状态后返回给前端;
@Override public JSONResult onLineCourse(CourseQuery query) { //上下线 //思路 //1.通过前端传过来的id拿到对象; //2.拿到对象给对象设置状态; //3.修改返回即可; Long[] ids = query.getIds(); for (Long id : ids) { Course course = courseMapper.selectById(id); course.setStatus(1); courseMapper.updateById(course); } return JSONResult.success(); }
分页查询所有思路;
1.通过page进行分页;
2.通过sql查出对象集合,把page和query传进去;
3.封装pageList返回给前端;
//分页查询所有 @Override public JSONResult selectAddPage(CourseQuery query) { Page<CourseDto> page = new Page<>(query.getPage(),query.getRows()); List<CourseDto> dtoList = courseMapper.selectAddPage(page, query); return JSONResult.success(new PageList<CourseDto>(page.getTotal(),dtoList)); }