使用idea书写了一个关于管理学生的系统,系统的功能有着对学生的增删改查,分页查询,验证用户是否登录,登录过后才能进入管理学生系统,前端页面使用的是LayUI。
搭建项目不会的话参考:https://blog.csdn.net/weixin_44173864/article/details/89738228
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.1.4.RELEASE
com.example
stu
0.0.1-SNAPSHOT
stu
Demo project for Spring Boot
1.8
org.springframework.boot
spring-boot-starter-data-jpa
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-devtools
runtime
mysql
mysql-connector-java
runtime
org.springframework.boot
spring-boot-starter-test
test
com.alibaba
druid
1.1.10
com.alibaba
fastjson
1.2.47
redis.clients
jedis
2.9.0
org.apache.commons
commons-pool2
2.4.2
org.springframework.boot
spring-boot-starter-data-redis
cn.hutool
hutool-all
4.5.6
javax.mail
mail
1.4.7
com.github.pagehelper
pagehelper-spring-boot-starter
1.2.10
com.github.penggle
kaptcha
2.3.2
org.springframework.boot
spring-boot-maven-plugin
#数据源配置
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/student?useSSL=false&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.initialSize=20
spring.datasource.minIdle=50
spring.datasource.maxActive=500
#上下文配置
server.port=8888
server.servlet.context-path=/kude
#配置jpa
#帮我们自动生成表结构
spring.jpa.properties.hibernate.hbm2ddl.auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.show-sql= true
spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true
#redis的配置
# Redis_config
# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=127.0.0.1
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=123456
# 连接超时时间(毫秒)
spring.redis.timeout=3600
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.jedis.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.jedis.pool.max-wait=-1
# jedis超时
spring.redis.jedis.shutdown-timeout=100
# 连接池中的最大空闲连接
spring.redis.jedis.pool.max-idle=8
# 连接池中的最小空闲连接
spring.redis.jedis.pool.min-idle=0
#定义分页每页的记录数
mypager.perPagerSize=10
package com.example.stu.entity;
import javax.persistence.*;
import javax.persistence.Entity;
/**
* 学生实体类
* @author zhang
*
*/
@Entity
@Table(name = "Student")
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)//设置id字段进行自增操作
private Integer id;
@Column(length = 20)
private String stuname;
@Column(length = 11)
private String password;
@Column(length = 2)
private String sex;
@Column(length = 24)
private String address;
@Column(length = 11)
private String telphone;
public Student() {
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getStuname() {
return stuname;
}
public void setStuname(String stuname) {
this.stuname = stuname;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getTelphone() {
return telphone;
}
public void setTelphone(String telphone) {
this.telphone = telphone;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", stuname='" + stuname + '\'' +
", password='" + password + '\'' +
", sex='" + sex + '\'' +
", address='" + address + '\'' +
", telphone='" + telphone + '\'' +
'}';
}
}
package com.example.stu.entity;
/**
* 判断是否登录的类
*/
public class LoginMeg {
private int code;//1为成功,0为失败
private Student result;
public LoginMeg() {
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public Student getResult() {
return result;
}
public void setResult(Student result) {
this.result = result;
}
@Override
public String toString() {
return "LoginMeg{" +
"code=" + code +
", result=" + result +
'}';
}
}
package com.example.stu.entity;
import java.util.List;
/**
* 设置json的格式,与layui数据表单接收json格式保持一致
* @param
*/
public class LayData {
private int code;
private String msg;
private long count;
private List data;
public LayData() {
}
@Override
public String toString() {
return "LayData{" +
"code=" + code +
", msg='" + msg + '\'' +
", count=" + count +
", data=" + data +
'}';
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public long getCount() {
return count;
}
public void setCount(long count) {
this.count = count;
}
public List getData() {
return data;
}
public void setData(List data) {
this.data = data;
}
}
package com.example.stu.dao;
import com.example.stu.entity.Student;
import io.lettuce.core.dynamic.annotation.Param;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
/**
* dao层接口继承JpaRepository实现简单得增删改查
* @author zhang
*/
public interface StudentDao extends JpaRepository {
/**
* 根据id和密码进行登录
* @param id
* @param password
* @return
*/
@Query(name = "loginbyId", nativeQuery = true, value =
"select * from student where id=:id and password=:password")
Student loginbyId(@Param("id") Integer id, @Param("password") String password);
}
package com.example.stu.service;
import com.example.stu.entity.Student;
import org.springframework.data.domain.Page;
import java.util.List;
/**
* 定义方法
*/
public interface StudentService {
Student AddStu(Student student);//增加学生信息
void DelStu(Integer id);//根据id删除学生信息
Student UpdataStu(Student student);//修改学生信息
List FindAllStu();//查找学生信息
Student LoginBYId(Integer id,String password);//根据id和密码进行登录
Page findAll(int page, int pageSize);//分页查询
}
package com.example.stu.service.Impl;
import com.example.stu.dao.StudentDao;
import com.example.stu.entity.Student;
import com.example.stu.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 实现Service接口
* @author zhang
*/
@Service
public class StudentServcieImpl implements StudentService {
@Autowired
private StudentDao studentDao;
/**
* 添加学生信息
* @param student
* @return
*/
@Override
public Student AddStu(Student student) {
return studentDao.save(student);
}
/**
* 根据id删除学生信息
* @param id
*/
@Override
public void DelStu(Integer id) {
studentDao.deleteById(id);
}
/**
* 修改学生信息
* @param student
* @return
*/
@Override
public Student UpdataStu(Student student) {
return studentDao.save(student);
}
/**
* 查找所有学生信息
* @return
*/
@Override
public List FindAllStu() {
return studentDao.findAll();
}
/**
*根据id和密码进行登录
* @param id
* @param password
* @return
*/
@Override
public Student LoginBYId(Integer id, String password) {
return studentDao.loginbyId(id,password);
}
/**
* 设置分页查询所有信息
* @param page
* @param pageSize
* @return
*/
@Override
public Page findAll(int page, int pageSize) {
PageRequest pageable= PageRequest.of(page,pageSize);
return studentDao.findAll(pageable);
}
}
package com.example.stu.controller;
import com.example.stu.entity.LayData;
import com.example.stu.entity.LoginMeg;
import com.example.stu.entity.Student;
import com.example.stu.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
//import org.springframework.http.HttpRequest;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.List;
/**
* 控制器
* @author zhang
*/
@RestController//返回json格式,相当于restbody+controller
@RequestMapping("/student")
public class StudentControllor {
@Autowired
private StudentService studentService;
private int login=0;//定义的成员变量,来判断是否登录,代替session存储对象
/**
* 添加学生信息
* @param student
* @return
*/
@PostMapping("/reg")
public void Add(Student student,HttpServletResponse response){
response.setHeader("Access-Control-Allow-Origin","*");
Student student1= studentService.AddStu(student);
}
/**
* 根据id删除学生信息
* @param id
*/
@RequestMapping("/del/{id}")
public void Del(@PathVariable Integer id){
studentService.DelStu(id);
}
/**
* 修改学生信息
* @param student
* @return
*/
@PostMapping("/updata")
public void Updata(Student student, HttpServletResponse response){
response.setHeader("Access-Control-Allow-Origin","*");
Student student1=studentService.UpdataStu(student);
//return student1;
}
/**
* 查找所有学生信息
* @return
*/
@RequestMapping("/findAll")
public List FindAll(){
return studentService.FindAllStu();
}
/**
* 根据id和密码进行登录
* @param id
* @param password
* @return
*/
@PostMapping("/login")
public LoginMeg loginById(Integer id, String password, HttpServletRequest request, HttpServletResponse response, HttpSession httpSession){
response.setHeader("Access-Control-Allow-Origin","*");
Student student= studentService.LoginBYId(id,password);
LoginMeg loginMeg=new LoginMeg();
//判断查询对象是否存在
if(student!=null){//登录成功
loginMeg.setCode(1);
loginMeg.setResult(student);
//保存session,将用户信息保存在服务器端
// httpSession.setAttribute("student",student);
login=1;//赋值为1,代表登录成功
}else {//登录失败
loginMeg.setCode(0);
loginMeg.setResult(null);
}
return loginMeg;
}
/**
* 在进入展示页面前验证客户是否登录
* @param session
* @return
*/
@GetMapping("/islogin")
public String IsLogin( HttpSession session, HttpServletResponse response){
response.setHeader("Access-Control-Allow-Origin","*");
Student student=(Student) session.getAttribute("student");//将从服务器端获得登录信息赋给student
if (login!=0){
return "1";//返回1,前台得到后进入展示页面
}else {
return "0";//返回0,前端得到跳转到登录页面要求登录
}
}
/**
* 退出系统
* @param session
* @return
*/
@PostMapping("/exit")
public String exit(HttpSession session,HttpServletResponse response){
response.setHeader("Access-Control-Allow-Origin","*");
session.removeAttribute("student");
login=0;//将值变为0,表示未登录状态
return "0";
}
/**
* 分页显示所有
* @param page
* @param limit
* @param response
* @return
*/
@GetMapping("/pageFindAll")
public LayData PageFindAll(Integer page, HttpServletRequest request,Integer limit, HttpServletResponse response){
response.setHeader("Access-Control-Allow-Origin","*");//解决跨域请求
if(page==null || page<=0){
page = 0;
}else{
page -= 1;
}
if(limit==null||limit<=5){
limit=5;
}
Page pageData=studentService.findAll(page,limit);
request.setAttribute("stu", pageData);
LayData layData=new LayData();
//保持与layui中的数据表格所需求的json格式保持一致
layData.setCode(0);
layData.setCount(pageData.getTotalElements());
layData.setData(pageData.getContent());
return layData;
}
}
需要去layui官网去下载lay(点击立即下载引入到你的前端中):https://www.layui.com/
layui
学生信息
ID
用户名
密码
性别
家庭住址
电话号码
layui
layui