Spring+Spring Boot+JPA+Thymeleaf+Bootstrap+Mysql实现的一个单表crud
= = 整个项目是自己学习中做出来的,内容不太规范!
Student.java
package com.xxxy.entity;
import java.io.Serializable;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import org.hibernate.validator.constraints.Length;
/**
* The persistent class for the student database table.
*
*/
@Entity
@NamedQuery(name="Student.findAll", query="SELECT s FROM Student s")
public class Student implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int studentID;
@Size(max=20,min=6,message="密码长度为6-20!")
private String password;
@Length(max=11,min=8,message="电话不正确!")
private String phone;
@NotBlank(message="学号不能为空!")
private String studentNo;
@NotBlank(message="姓名不能为空!")
private String Name;
//bi-directional many-to-one association to Studentsubject
@OneToMany(mappedBy="student")
private List<Studentsubject> studentsubjects;
public Student() {
}
public int getStudentID() {
return this.studentID;
}
public void setStudentID(int studentID) {
this.studentID = studentID;
}
public String getPassword() {
return this.password;
}
public void setPassword(String password) {
this.password = password;
}
public String getPhone() {
return this.phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getStudentNo() {
return this.studentNo;
}
public void setStudentNo(String studentNo) {
this.studentNo = studentNo;
}
public String getName() {
return this.Name;
}
public void setName(String Name) {
this.Name = Name;
}
public List<Studentsubject> getStudentsubjects() {
return this.studentsubjects;
}
public void setStudentsubjects(List<Studentsubject> studentsubjects) {
this.studentsubjects = studentsubjects;
}
public Studentsubject addStudentsubject(Studentsubject studentsubject) {
getStudentsubjects().add(studentsubject);
studentsubject.setStudent(this);
return studentsubject;
}
public Studentsubject removeStudentsubject(Studentsubject studentsubject) {
getStudentsubjects().remove(studentsubject);
studentsubject.setStudent(null);
return studentsubject;
}
@Override
public String toString() {
return "Student [sutdentID=" + studentID + ", password=" + password + ", phone=" + phone + ", studentNo="
+ studentNo + ", tName=" + Name + "]";
}
}
StudentRepository.java
package com.xxxy.dao;
import org.springframework.data.jpa.repository.JpaRepository;
import com.xxxy.entity.Student;
public interface StudentRepository extends JpaRepository<Student, Integer> {
}
StudentService.java
package com.xxxy.service;
import java.util.List;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.xxxy.dao.StudentRepository;
import com.xxxy.entity.Student;
@Service
public class StudentService {
@Autowired
private StudentRepository studentResitory;
public List<Student> findAll(){
return studentResitory.findAll();
}
public Student addStudent(Student student) {
return studentResitory.save(student);
}
public void deleteStudent(Integer id) {
studentResitory.deleteById(id);
}
public Optional<Student> updateStudent(Integer id) {
Optional<Student> stu=studentResitory.findById(id);
return stu;
}
}
StudentController.java
package com.xxxy.controller;
import java.util.Optional;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.Errors;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import com.xxxy.entity.Student;
import com.xxxy.service.StudentService;
@Controller
public class StudentController {
@Autowired
private StudentService ss;
// 首页跳转
@GetMapping(value={"/","index"})
public String Index(Model model) {
model.addAttribute("studentList", ss.findAll());
return "index";
}
// 跳转添加用户页面
@GetMapping("/register")
public String reg(Model model) {
model.addAttribute("student", new Student());
return "reg";
}
// 添加学生
@PostMapping(value="/add-Student")
public String addStudent(@ModelAttribute() @Valid Student student,Errors errors){
if (errors.hasErrors()) {
return "reg";
}
ss.addStudent(student);
return "redirect:/";
}
// 删除学生
@GetMapping("/delete-Student")
public String deleteStudent(Integer id) {
ss.deleteStudent(id);
return "redirect:/";
}
// 修改信息
@GetMapping("/update-Student")
public String updateStudent(Integer id,Model model) {
Optional<Student> stu=ss.updateStudent(id);
model.addAttribute("student", stu);
return "reg";
}
}
index.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>全部信息</title>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/4.1.0/css/bootstrap.min.css">
<script src="https://cdn.staticfile.org/jquery/3.2.1/jquery.min.js"></script>
<script src="https://cdn.staticfile.org/popper.js/1.12.5/umd/popper.min.js"></script>
<script src="https://cdn.staticfile.org/twitter-bootstrap/4.1.0/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
<table class="table table-striped table-bordered">
<tr>
<th>学号</th>
<th>姓名</th>
<th>电话号码</th>
<th></th>
<th></th>
</tr>
<tr th:each="stu:${studentList}">
<td th:text="${stu.studentNo}">123</td>
<td th:text="${stu.Name}">zhang san</td>
<td th:text="${stu.phone}">137822316</td>
<td><a href="#" th:href="@{/update-Student(id=${stu.studentID})}" class="text-primary">修改</a></td>
<td><a href="#" th:href="@{/delete-Student(id=${stu.studentID})}" class="text-primary">删除</a></td>
</tr>
</table>
<a href="#" th:href="@{/register}" class="btn btn-info">添加</a>
</div>
</body>
</html>
reg.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>添加用户</title>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/4.1.0/css/bootstrap.min.css">
<script src="https://cdn.staticfile.org/jquery/3.2.1/jquery.min.js"></script>
<script src="https://cdn.staticfile.org/popper.js/1.12.5/umd/popper.min.js"></script>
<script src="https://cdn.staticfile.org/twitter-bootstrap/4.1.0/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
<br/>
<br/>
<br/>
<form class="form-horizontal" action="/add-Student" method="post" th:object="${student}">
<input type="hidden" id="sutdentID" name="studentID" th:field="*{studentID}" >
<div class="form-group">
<label for="studentNo" class="col-sm-2 control-label">学号</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="studentNo" name="studentNo" th:field="*{studentNo}"
placeholder="请输入学号">
</div>
<span class="text-danger" th:if="${#fields.hasErrors('studentNo')}" th:errors="*{studentNo}">
请输入您的学号
</span>
</div>
<div class="form-group">
<label for="Name" class="col-sm-2 control-label">姓名</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="Name" name="Name" th:field="*{Name}"
placeholder="请输入姓名">
</div>
<span class="text-danger" th:if="${#fields.hasErrors('Name')}" th:errors="*{Name}">
请输入您的姓名
</span>
</div>
<div class="form-group">
<label for="password" class="col-sm-2 control-label">密码</label>
<div class="col-sm-10">
<input type="password" class="form-control" id="password" name="password" th:field="*{password}"
placeholder="请输入密码">
</div>
<span class="text-danger" th:if="${#fields.hasErrors('password')}" th:errors="*{password}">
请正确设置您的密码!
</span>
</div>
<div class="form-group">
<label for="phone" class="col-sm-2 control-label">电话</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="phone" name="phone" th:field="*{phone}"
placeholder="请输入电话">
</div>
<span class="text-danger" th:if="${#fields.hasErrors('phone')}" th:errors="*{phone}">
电话输入错误!
</span>
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary">申请</button>
<button type="reset" class="btn btn-primary">重置</button>
</div>
</form>
</div>
</body>
</html>
https://download.youkuaiyun.com/download/qq_39099905/10819765
项目源文件