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 ...
随机推荐
- iOS 设置字体样式
1.iOS设置字体样式 label.font = [UIFont fontWithName:@"Arial-BoldItalicMT" size:24]; 字体名如下: F ...
- new 和 make 均是用于分配内存
the-way-to-go_ZH_CN/06.5.md at master · Unknwon/the-way-to-go_ZH_CN https://github.com/Unknwon/the-w ...
- 【CISCO强烈推荐】生成树 《路由协议》 卷一二 拥塞:网络延迟 阻塞:进程中 MTU QS:服务质量 OSPF RIP ISIS BGP 生成树 《路由协议》 卷一二
协议 CP/IP路由技术第一卷 作 者 (美)多伊尔,(美)卡罗尔
- LeetCode:寻找旋转排序数组中的最小值【153】
LeetCode:寻找旋转排序数组中的最小值[153] 题目描述 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0 ...
- POJ - 1321 棋盘问题 【DFS】
题目链接 http://poj.org/problem?id=1321 思路 和N皇后问题类似 但是有一点不同的是 这个是只需要摆放K个棋子就可以了 所以 我们要做好 两个出口 并且要持续往下一层找 ...
- Linux内核同步【转】
本文转载自:http://blog.csdn.net/a775992553/article/details/8797710 Linux设备驱动中必须解决的一个问题是多个进程对共享资源的并发访问,并发访 ...
- 世界各国Google网址大全
http://www.oschina.net/question/100896_50293 冰岛 https://www.google.is/ 丹麦 https://www.google.dk/ 挪威 ...
- Hadoop- 集群时间同步
集群的时间要同步 * 找一台机器 时间服务器 * 所有的机器与这台机器时间进行定时的同步 比如,每日十分钟,同步一次时间 # rpm -qa|grep ntp # vi /etc/ntp.conf # ...
- BZOJ 1192 [HNOI2006]鬼谷子的钱袋:二进制 砝码称重问题
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1192 题意: 鬼谷子带了a元钱,他要把a元钱分装在小袋子中,使得任意不大于a的数目的钱,都 ...
- Vagrant + Vbox实战 【转】
原文地址:http://www.cnblogs.com/suihui/p/4362233.html 一.软件下载 1.下载Oracle VM VirtualBox https://www.virtua ...