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 ...
随机推荐
- 【BZOJ3671】[Noi2014]随机数生成器 暴力
[BZOJ3535][Noi2014]随机数生成器 Description Input 第1行包含5个整数,依次为 x_0,a,b,c,d ,描述小H采用的随机数生成算法所需的随机种子.第2行包含三个 ...
- 【oracle案例】ORA-01102: cannot mount database in EXCLUSIVE mode
ORA-01102: cannot mount database in EXCLUSIVE mode 今天在fedora上安装完10g后,测试数据库是否安装成功.STARTUP数据库时,发生如下错误: ...
- java的Access restriction错误
问 :import sun.management.ManagementFactory,我在rt包下已经找到sun.management.ManagementFactory,但就是有错,请问怎么回事. ...
- 【题解】CF997C Sky Full of Stars
[题解]CF997C Sky Full of Stars 为什么我的容斥原理入门题是这道题????????? \(Part-1\)正向考虑 直接考虑不合法合法的方案吧 所以我们设行有\(i\),列有\ ...
- 关于Python有用的snippets
1.将字典的key,value反转换位置 值value可以取任何数据类型,但键key必须是不可变的,如字符串,数字或元组. dict1={'Lisa':1,'Bob':2,'Mick':3} dict ...
- Java for LeetCode 120 Triangle
Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent n ...
- POJ - 3278 Catch That Cow 【BFS】
题目链接 http://poj.org/problem?id=3278 题意 给出两个数字 N K 每次 都可以用三个操作 + 1 - 1 * 2 求 最少的操作次数 使得 N 变成 K 思路 BFS ...
- GCC的-wl,-rpath=参数
使用GCC编译动态链接库的项目时,在其他目录下执行很可以出现找不到动态链接库的问题. 这种情况多发生在动态链接库是自己开发的情况下,原因就是程序运行时找不到去何处加载动态链接库. 可能会说在编译时指定 ...
- win10安装tomcat7
下载Tomcat 安装tomcat tomcat7是绿色软件,解压后即可使用,请大家先将tomcat解压到合适的位置(建议整个路径都是英文路径),下载 apache-tomcat-7.0.79-win ...
- Ubuntu 17.4下如何安装和配置flash player
Ubuntu Linux系统下没有自带的flash player,要自己手动安装.下面post出简单的安装过程. 首先打开终端,输入命令:sudo apt-get install flashplugi ...