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之間的區別

JPA之常用 基本注解

(一)Themeleaf用法——Themeleaf簡介

themeleaf基本語法

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM