文章目录
环境
数据库中存放的数据格式
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中的操作)