Redis五(练习,spring,数据库,redis,java)

环境

数据库中存放的数据格式
在这里插入图片描述
redis为空

在这里插入图片描述
java中建立的是spring项目,且添加了数据库,redis的依赖
在这里插入图片描述

需求一:通过学号查询学生信息

将学生信息存储在数据库中,利用spring技术在浏览器端查询,利用redis缓存的特点,实现快速查询

代码

1.bean层

Student

public class Student {
    private String id;
    private String name;
    private Integer age;
    private String gender;
    private String clazz;

    public Student(String id, String name, Integer age, String gender, String clazz) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.clazz = clazz;
    }

    public Student() {
    }

    public String getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getClazz() {
        return clazz;
    }

    public void setClazz(String clazz) {
        this.clazz = clazz;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", gender='" + gender + '\'' +
                ", clazz='" + clazz + '\'' +
                '}';
    }
}

2.controller层

Studentcontroller

import com.hehe.spring.cache.bean.Student;
import com.hehe.spring.cache.service.Studentservice;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class Studentcontroller {
    @Autowired
    private Studentservice studentservice;

    @GetMapping("/query")
    public Student studentquery(String id){
       return studentservice.querystudent(id);
    }
}

3.service层

Studentservice

import com.hehe.spring.cache.bean.Student;

public interface Studentservice {
    Student querystudent(String id);
}

Studentimpl

import com.hehe.spring.cache.bean.Student;
import com.hehe.spring.cache.dao.Cachedao;
import com.hehe.spring.cache.dao.Studentdao;
import com.hehe.spring.cache.service.Studentservice;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class Studentimpl  implements Studentservice {

    @Autowired
    private Studentdao studentdao;
    @Autowired
    private Cachedao cachedao;

    @Override
    public Student querystudent(String id) {
       if (id.trim().isEmpty()){
           return null;
       }
       String key="student:"+id;

       Student student=cachedao.querystudent(key);
       if(student!=null){
           //设置过期时间
           cachedao.expire(key,10);
           return student;
       }
       student=studentdao.querystudent(id);
       if(student!=null){
           cachedao.savestudent(key,student);
           cachedao.expire(key,10);
           return student;
       }
       return null;
    }
}

4.dao层

Cachedao

public interface Cachedao {
    Student querystudent(String key);
    void expire(String key,int time);
    void savestudent(String key,Student student);
}

Studentdao

import com.hehe.spring.cache.bean.Student;

public interface Studentdao {
    Student querystudent(String id);
}

Redisdao

import com.hehe.spring.cache.bean.Student;
import com.hehe.spring.cache.dao.Cachedao;
import org.springframework.stereotype.Component;
import redis.clients.jedis.Jedis;
@Component
public class Redisdao implements Cachedao {
    private static Jedis jedis;
    static {
        jedis=new Jedis("master",6379);
    }

    @Override
    public Student querystudent(String key) {
        String s = jedis.get(key);
        if(s==null){
            return null;
        }
        String[] split = s.split(",");
        return new Student(split[0],split[1],Integer.valueOf(split[2]),split[3],split[4]);
    }

    @Override
    public void savestudent(String key, Student student) {
        String s = student.getId() + "," + student.getName() + "," + student.getAge() + "," + student.getGender() + "," + student.getClazz();
        jedis.set(key,s);
    }

    @Override
    public void expire(String key, int time) {
        jedis.expire(key,time);

    }
}

Mysqldao


import com.hehe.spring.cache.bean.Student;
import com.hehe.spring.cache.dao.Studentdao;
import com.hehe.spring.cache.util.JDBCUtil;
import org.springframework.stereotype.Component;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

@Component
public class Mysqldao implements Studentdao {
    private static Connection conn;

    static {
        conn = JDBCUtil.getConnection();
    }

    @Override
    public Student querystudent(String id)  {

        PreparedStatement ps = null;
        try {
            ps = conn.prepareStatement("select * from student where id=?");
            ps.setString(1,id);
            ResultSet resultSet = ps.executeQuery();
            if (resultSet.next()){
                String name = resultSet.getString("name");
                Integer age = resultSet.getInt("age");
                String gender = resultSet.getString("gender");
                String clazz = resultSet.getString("clazz");
                Student student=new Student(id,name,age,gender,clazz);
                return student;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return null;
    }
}

5.运行spring接口测试

在这里插入图片描述
第一次查询学生信息
需建立连接耗时较长
在这里插入图片描述

第二次查询另外一个学生,学号为29

在这里插入图片描述

此时学号以29结尾的学生已在cache里,再次查询该生(查询速度要在10秒内,或者会过期),并查询学号为30的比较

29
在这里插入图片描述
30
在这里插入图片描述

需求二:在一操作的基础上通过班级名称查询班级人数

controller层

新加
在这里插入图片描述

service层

在这里插入图片描述
在这里插入图片描述

dao层

在这里插入图片描述

在这里插入图片描述
Redisdao在这里插入图片描述
Mysqldao在这里插入图片描述

测试

在这里插入图片描述
在这里插入图片描述
10秒后再查
在这里插入图片描述

需求三,通过学号查询学生总分

在数据库中加入score表
在这里插入图片描述

controller层

在这里插入图片描述

service层

在这里插入图片描述
在这里插入图片描述

dao层

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

测试

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
java
java入门基础学习(一)
java入门基础学习(二)
java入门基础学习(三)
java入门基础学习(四)
java入门基础学习(五)
java入门基础学习(六)
java入门基础学习(七)
java入门基础学习(八)
java入门基础学习(九)
java入门基础学习(十)
java入门基础学习(十一)
java入门基础学习(十二)
java入门基础学习(十三)
java入门基础学习(十四)Maven Git
java总结,题目+笔记
java进阶之常见对象(一)
java进阶之常见对象(二)
java进阶之冒泡排序
java进阶之选择排序
java进阶之面向对象(封装)
java进阶之面向对象(代码块、继承)
java进阶之面向对象(多态、抽象、接口)
java进阶之匿名内部类、访问修饰符、包
java进阶之io流(字节流,字符流)
java应用一(反射的应用)
java应用二(配置文件、工具类)
java应用三(数据库索引、spring)
Linux
Linux基础一
Linux基础二
Mysql
mysql一
mysql二
mysql三
mysql四
java连接数据库
redis
redis一(缓存,redis简介)
redis二(在虚拟机中的安装,桌面插件)
redis三(指令的使用)
redis四(java与redis的连接,基本指令在java中的操作)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值