Spring Boot实现学生信息增删改查
上一篇博客写了如何初始化一个简单的Spring Boot项目,这次详细记录一下如何连接数据库并实现增删改查基本操作。
我使用的是MySQL 5.5+Navicat,MySQL量级比较轻,当然微软的SQL Server也挺好的。
1、配置数据源与连接信息
默认生成的项目会带有一个application.properties供用户来配置相关信息,这里可以将其修改为application.yml,你问为什么?
yml文件天然树状结构,便于阅读;需要写的东西比properties少得多。
不足之处就是冒号后面要加空格,否则会报错,而且缩进很严格!!!
详细信息请阅读下面的参考资料。
//application.yml
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/mydbsys
username: root
password: 123456
jpa:
hibernate:
ddl-auto: update
show-sql: true
3306是MySQL的端口,mydbsys是数据库名称,数据库肯定是要存在的,不存在还怎么连接。
2、在entity中定义Student与Grade对象
和Java语言很相似,属性、set、get内容写进去就行,有几点JPA的注解要注意一下。
@ManyToOne指的是多个学生对应一个班级,其他常用注解看参考资料。
//Grade.java
package com.studentsys.stusys.entity; import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id; @Entity
public class Grade { @Id
@GeneratedValue
private Integer GID;
private String GrandName; public Grade() {
} public Integer getGID() {
return GID;
} public void setGID(Integer GID) {
this.GID = GID;
} public String getGrandName() {
return GrandName;
} public void setGrandName(String grandName) {
GrandName = grandName;
}
}
//Student.java
package com.studentsys.stusys.entity; import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne; @Entity
public class Student { @Id
@GeneratedValue
private Integer stuID;
private String name;
private String phone;
private String password; //private Integer GID;
@ManyToOne
private Grade grade; public Grade getGrade() {
return grade;
} public void setGrade(Grade grade) {
this.grade = grade;
} public Student() {
} public Integer getStuID() {
return stuID;
} public void setStuID(Integer stuID) {
this.stuID = stuID;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getPhone() {
return phone;
} public void setPhone(String phone) {
this.phone = phone;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public Student(Integer stuID, String name, String phone, String password) {
this.stuID = stuID;
this.name = name;
this.phone = phone;
this.password = password;
}
}
3、在repository中定义数据访问层,GradeRepository.java和StudentRepository.java。
继承一下JPA的库就可以,很多东西都已经定义好了,有特殊需要再利用@Override重写父类函数就可以了。
//GradeRepository.java
package com.studentsys.stusys.repository; import com.studentsys.stusys.entity.Grade;
import org.springframework.data.jpa.repository.JpaRepository; public interface GradeRepository extends JpaRepository<Grade,Integer> {
}
//StudentRepository.java
package com.studentsys.stusys.repository; import com.studentsys.stusys.entity.Student;
import org.springframework.data.jpa.repository.JpaRepository; public interface StudentRepository extends JpaRepository<Student,Integer> {
}
4、在service中定义数据服务层及其实现接口
(别跟我学,一定要把数据服务层接口service和实现接口serviceImpl分开,将项目模块化)
@Autowired
//GradeService.java
package com.studentsys.stusys.service; import com.studentsys.stusys.entity.Grade; import java.util.List;
import java.util.Optional; public interface GradeService { List<Grade> getAllGrade(); Optional<Grade> getGradeByID(Integer gid); }
//GradeServiceImpl.java
package com.studentsys.stusys.service; import com.studentsys.stusys.entity.Grade;
import com.studentsys.stusys.repository.GradeRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import java.util.List;
import java.util.Optional; @Service
public class GradeServiceImpl implements GradeService { @Autowired
private GradeRepository gradeRepository; @Override
public List<Grade> getAllGrade() {
return gradeRepository.findAll();
} @Override
public Optional<Grade> getGradeByID(Integer gid) {
return gradeRepository.findById(gid);
}
}
//StudentService.java
package com.studentsys.stusys.service; import com.studentsys.stusys.entity.Student; import java.util.List;
import java.util.Optional; public interface StudentService { List<Student> getAllStudent(); Student addStudent(Student student); Optional<Student> findByID(Integer id); Student updateStudent(Student student);
}
//StudentServiceImpl.java
package com.studentsys.stusys.service; import com.studentsys.stusys.entity.Student;
import com.studentsys.stusys.repository.StudentRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import java.util.List;
import java.util.Optional; @Service
public class StudentServiceImpl implements StudentService { @Autowired
private StudentRepository studentRepository; @Override
public List<Student> getAllStudent() {
return studentRepository.findAll();
} @Override
public Student addStudent(Student student) {
return studentRepository.save(student);
} @Override
public Optional<Student> findByID(Integer id) {
return studentRepository.findById(id); } @Override
public Student updateStudent(Student student) {
return studentRepository.save(student);
}
}
5、在controller中定义前端控制器StudentController.java
//StudentController.java
package com.studentsys.stusys.cotroller; import com.studentsys.stusys.entity.Grade;
import com.studentsys.stusys.entity.Student;
import com.studentsys.stusys.service.GradeService;
import com.studentsys.stusys.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*; import java.util.List;
import java.util.Optional; @RestController
@RequestMapping("/")
public class StudentController { @Autowired
private StudentService studentService; @Autowired
private GradeService gradeService;
/**
* 查看所有学生信息
* @param model
* @return
*/
@GetMapping
public String index(Model model){
List<Student> list = studentService.getAllStudent();
model.addAttribute("stus",list);
return "index";
} /**
* 添加学生信息功能
* @param name
* @param password
* @param phone
* @return
*/
@PostMapping("/add")
public String input(Student student){
Optional<Grade> grade = gradeService.getGradeByID(student.getGrade().getGID()); ;
student.setGrade(grade.get());
studentService.addStudent(student);
return "redirect:/";
}
@GetMapping("/ks")
public String ks(){
return "KSbaoM";
} /**
* 显示添加页面
* @return
*/
@GetMapping("/add")
public String addPage(Model model){
model.addAttribute("allGrade",gradeService.getAllGrade());
return "addstu";
} @GetMapping("/update/{id}")
public String updatePage(@PathVariable("id") Integer id,Model model){
Optional<Student> student = studentService.findByID(id);
model.addAttribute("stu",student.get());
model.addAttribute("allGrade",gradeService.getAllGrade());
return "updatestu";
} /**
* 修改学生信息
* @param stuID
* @param name
* @param password
* @param phone
* @return String
*/
@PostMapping("/update")
public String updateData(Student student){
Optional<Grade> grade = gradeService.getGradeByID(student.getGrade().getGID()); ;
student.setGrade(grade.get());
studentService.addStudent(student);
return "redirect:/";
} }
6、在resources中定义相关html页面和资源文件
懒得写了,这种静态页面找个模版随便改改就ok了,主要是要注意themeleaf的使用。
Thymeleaf是面向Web和独立环境的现代服务器端Java模板引擎,能够处理HTML,XML,JavaScript,CSS甚至纯文本。
首先在最开始的<html>标签里要这样写<html xmlns:th="http://www.thymeleaf.org">,之后就是有一些标签需要再修改,具体的可以看参考资料。
参考资料:
application.properties与application.yml之间的区别
Spring Boot实现学生信息增删改查的更多相关文章
- 上手spring boot项目(三)之spring boot整合mybatis进行增删改查的三种方式。
1.引入依赖. <!--springboot的web起步依赖--><dependency> <groupId>org.springframework.boot< ...
- 上手spring boot项目(三)之spring boot整合mybatis进行增删改查
使用mybatis框架进行增删改查大致有两种基础方式,一种扩展方式.两种基础方式分别是使用xml映射文件和使用方法注解.扩展方式是使用mybatis-plus的方式,其用法类似于spring-data ...
- 使用 Spring Boot 搭建一套增删改查(无多余代码)
前言 这是我学习 Spring Boot 的第三篇文章,终于可以见到效果了.错过的同学可以看看之前的文章 我们为什么要学习 Spring Boot Spring Boot 入门详细分析 在入门的基础上 ...
- Java学生信息增删改查(并没用数据库)
一个泛型的应用,Java版本增删改查,写的简陋,望批评指正 2016-07-02 很久前写的一个程序了.拿出来存一下,不是为了展示啥,自己用的时候还可以看看.写的很粗糙. import java.io ...
- Spring Boot GraphQL 实战 02_增删改查和自定义标量
hello,大叫好,我是小黑,又和大家见面啦~ 今天我们来继续学习 Spring Boot GraphQL 实战,我们使用的框架是 https://github.com/graphql-java-ki ...
- MVC模式的学生信息增删改查
准备:建一个名为 userdb的数据库.建一个student表,有stuid,stuname,gender三个字段.其中stuid为主键.j加入相应的驱动包,相应的JSTL标签 先看目录结构 代码: ...
- Sqlite3 实现学生信息增删改查
import sqlite3 conn = sqlite3.connect('studentsdb.db') # 连接数据库 cursor = conn.cursor( ) # 创建数据表 def c ...
- spring boot集成mongodb的增删改查
添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>sp ...
- Model1模式的学生信息增删改查
Student.java package entity; public class Student { private int stuid; private String stuname; priva ...
随机推荐
- 【BZOJ3489】A simple rmq problem kd-tree
[BZOJ3489]A simple rmq problem Description 因为是OJ上的题,就简单点好了.给出一个长度为n的序列,给出M个询问:在[l,r]之间找到一个在这个区间里只出现过 ...
- .Net反射机制
现在谈.Net反射机制本不在计划中,因为本打算研究完设计模式后再去学习别的技术:但迫于设计模式系列一创建型之(抽象工厂模式)一章中遗留问题,才不得已在设计模式之游中插入本篇文章!签于本人对反射理解也不 ...
- 该 Bucket 已存在,或被其他用户占用
- 微信小程序 原生代码 转wepy 字符串处理
import globimport os cwd = os.getcwd()sep = os.septarget = cwd + sep + 'pages' + sep + '*' + sep + ' ...
- Greedy Function Approximation:A Gradient Boosting Machine
https://statweb.stanford.edu/~jhf/ftp/trebst.pdf page10 90% to 95% of the observations were often de ...
- 【题解】DZY Loves Chinese
[题解]DZY Loves Chinese II 不吐槽这题面了... 考虑如何维护图的连通性,如果把图的变成一颗的\(dfs\)生成树,那么如果把一个节点的父边和他接下来所有的返祖边删除,那么我们就 ...
- python——进程池
from concurrent.futures import ProcessPoolExecutor import os,random def func(name): print("%s吃了 ...
- 使用 Spring 容器管理 Filter
当我们用Filter时,往往需要使用一些辅助的service,在普通的java中,只要声明(set,get方法)后在spring-application配置文件中配置就可以了,但是由于Filter与L ...
- selenium WebDriverException: Message: unknown error: DevToolsActivePort file doesnt exist
在centos中使用无头chrome报以下错误 selenium.common.exceptions.WebDriverException: Message: unknown error: DevTo ...
- 简单Android代码混淆(转)
代码混淆步骤: 1,project.properties中打开代码混淆功能,加入proguard.config=proguard.cfg 2,编辑proguard.cfg文件,项目没有自动生成时可手工 ...