上一篇博客写了如何初始化一个简单的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之间的区别

JPA之常用 基本注解

(一)Themeleaf用法——Themeleaf简介

themeleaf基本语法

Spring Boot实现学生信息增删改查的更多相关文章

  1. 上手spring boot项目(三)之spring boot整合mybatis进行增删改查的三种方式。

    1.引入依赖. <!--springboot的web起步依赖--><dependency> <groupId>org.springframework.boot< ...

  2. 上手spring boot项目(三)之spring boot整合mybatis进行增删改查

    使用mybatis框架进行增删改查大致有两种基础方式,一种扩展方式.两种基础方式分别是使用xml映射文件和使用方法注解.扩展方式是使用mybatis-plus的方式,其用法类似于spring-data ...

  3. 使用 Spring Boot 搭建一套增删改查(无多余代码)

    前言 这是我学习 Spring Boot 的第三篇文章,终于可以见到效果了.错过的同学可以看看之前的文章 我们为什么要学习 Spring Boot Spring Boot 入门详细分析 在入门的基础上 ...

  4. Java学生信息增删改查(并没用数据库)

    一个泛型的应用,Java版本增删改查,写的简陋,望批评指正 2016-07-02 很久前写的一个程序了.拿出来存一下,不是为了展示啥,自己用的时候还可以看看.写的很粗糙. import java.io ...

  5. Spring Boot GraphQL 实战 02_增删改查和自定义标量

    hello,大叫好,我是小黑,又和大家见面啦~ 今天我们来继续学习 Spring Boot GraphQL 实战,我们使用的框架是 https://github.com/graphql-java-ki ...

  6. MVC模式的学生信息增删改查

    准备:建一个名为 userdb的数据库.建一个student表,有stuid,stuname,gender三个字段.其中stuid为主键.j加入相应的驱动包,相应的JSTL标签 先看目录结构 代码: ...

  7. Sqlite3 实现学生信息增删改查

    import sqlite3 conn = sqlite3.connect('studentsdb.db') # 连接数据库 cursor = conn.cursor( ) # 创建数据表 def c ...

  8. spring boot集成mongodb的增删改查

    添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>sp ...

  9. Model1模式的学生信息增删改查

    Student.java package entity; public class Student { private int stuid; private String stuname; priva ...

随机推荐

  1. Django的标准库django.contrib包介绍(转)

    Django.contrib是啥? 1.它是一个强大的功能包,是Django的标准库.2.Django的标准库存放在 django.contrib 包中.每个子包都是一个独立的附加功能包. 这些子包一 ...

  2. Linux搭建FTP服务器实战

    首先准备一台Linux系统机器(虚拟机也可), 检测出是否安装了vsftpd软件: rpm -qa |grep vsftpd 如果没有输出结果,就是没有安装. 使用命令安装,安装过程中会有提示,直接输 ...

  3. Linux就该这么学--了解Shell脚本

    有人曾经将Shell形容是人与计算机硬件的“翻译官”,Shell作为用户与Linux系统通讯的媒介.自身也定义了各种变量和参数,并提供了诸如循环.分支等高级语言才有的控制结构特性.如何正确的使用这些功 ...

  4. 【python】python版本升级,从2.6.6升级到2.7.13

    centos6.5系统自带了2.6.6版本的python,有时候为了项目上的需要,需要将python版本升级到2.7.13,下面介绍了如何进行升级. 说明:python从2.6升级到2.7会引发很多问 ...

  5. API的理解和使用——全局命令

    全局命令 命令 功能 set 创建键值对 keys 遍历查看所有键 exists 判断一个键是否存在,1存在,0不存在 dbsize 当前数据库中有多少个键 del 删除一个或多个键 expire 设 ...

  6. EASYARM-IMX283 烧写uboot和linux系统

    新入手一台EASYARM-IMX283开发板(以下简称IMX823),价格比较便宜,配置也不错. 开发板默认安装了WINCE,我还是决定重新烧写uboot和linux内核. 开发板配套光盘里面有不少烧 ...

  7. <J2EE学习笔记>关于Servlet的讲义

    题外话:接触java又是半年之前的事情了,当初好好学了java却把cpp给忘了,到现在又把手里发热的cpp给放下重新捡起来java,究竟这两种OOP语言我能不能清晰分开记住呢 以下全部课件来自于同济大 ...

  8. 解读 CSS 布局之水平垂直居中

    对一个元素水平垂直居中,在我们的工作中是会经常遇到的,也是CSS布局中很重要的一部分,本文就来讲讲CSS水平垂直居中的一些方法.由于我们大搜车的日常工作中已经不再需要理会低版本IE,所以本文所贴出的方 ...

  9. hello vue不显示

    本身是做java后端开发的,但对任何技术都感兴趣.于是尝试了下最近国内比较火的vue框架. 在使用官网的例的时候子就卡壳了,写了个html,第一个Hello VUE!就是出不来,只显示{{messag ...

  10. redis数据

    毫无疑问,Redis开创了一种新的数据存储思路,使用Redis,我们不用在面对功能单调的数据库时,把精力放在如何把大象放进冰箱这样的问题上,而是利用Redis灵活多变的数据结构和数据操作,为不同的大象 ...