基于Spring+Spring Boot+JPA+Thymeleaf+Bootstrap+Mysql实现的一个单表crud

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>
				&nbsp;&nbsp;&nbsp;&nbsp;
				<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>
				&nbsp;&nbsp;&nbsp;&nbsp;
				<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>
				&nbsp;&nbsp;&nbsp;&nbsp;
				<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>
				&nbsp;&nbsp;&nbsp;&nbsp;
				<span class="text-danger" th:if="${#fields.hasErrors('phone')}" th:errors="*{phone}">
					电话输入错误!
				</span>
			</div>
			<div class="form-group">
				&nbsp;&nbsp;&nbsp;&nbsp;
				<button type="submit" class="btn btn-primary">申请</button>
				<button type="reset" class="btn btn-primary">重置</button>
			</div>
		</form>
	</div>
</body>
</html>

https://download.csdn.net/download/qq_39099905/10819765
项目源文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值