Springboot和Jpa實(shí)現(xiàn)學(xué)生CRUD操作代碼實(shí)例
前期準(zhǔn)備
使用idea新建個SpringBoot項(xiàng)目
在數(shù)據(jù)庫中建student表

建包

1.編寫entity包下實(shí)體類Student
(一個Javabean規(guī)范)
package com.example.stu.kudestu.stu.entity;
import javax.persistence.*;
@Entity
@Table(name = "student")
//@Entity 應(yīng)用在實(shí)體類上 @Table(name = "student") 應(yīng)用在實(shí)體類上,并且name屬性為數(shù)據(jù)庫表名
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) //ID自增
private Integer id;
private String name;
private int age;
private String sex;
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
'}';
}
public Student() {
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
2.編寫dao層StudentDao類
package com.example.stu.kudestu.stu.dao;
import com.example.stu.kudestu.stu.entity.Student;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.util.List;
public interface StudentDao extends JpaRepository<Student,Integer> {
//<Student,Integer>兩個參數(shù)實(shí)體類和主鍵類型
Student findStuById(Integer id);
@Query(name="findStuByName",nativeQuery = true,value =
"select * from student where name=:name ")
List<Student> findStuByName(@Param("name") String name);
}
3.編寫service層類StudentService,面象接口
import com.example.stu.kudestu.stu.entity.Student;
import org.springframework.data.domain.Page;
import java.util.List;
public interface StudentService {
Student save(Student student);//添加學(xué)生
Student update(Student student);//修改
void delete(Integer id);//通過id刪除學(xué)生
Student findStuById(Integer id);//通過ID查找學(xué)生,接口中沒有此方法,在StudentDao接口創(chuàng)建
List<Student> findStuByName(String name);//通過學(xué)生姓名查找,在StudentDao接口創(chuàng)建
/**
* 分頁查詢所有數(shù)據(jù)
* @param page //當(dāng)前頁
* @param pageSize //每頁記錄數(shù)
* @return
*/
Page<Student> findAll(int page,int pageSize);
}
在service對接口實(shí)現(xiàn)
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class StudentServiceimpl implements StudentService {
@Autowired//用于類中的屬性注入
private StudentDao studentDao;
@Override
public Student save(Student student) {
return studentDao.save(student);
}
@Override
public Student update(Student student) {
return studentDao.save(student);
}
@Override
public void delete(Integer id) {
studentDao.deleteById(id);
}
@Override
public Student findStuById(Integer id) {
return studentDao.findStuById(id);
}
@Override
public List<Student> findStuByName(String name) {
return studentDao.findStuByName(name);
}
@Override
public Page<Student> findAll(int page,int pageSize) {
Pageable pageable= PageRequest.of(page,pageSize);
return studentDao.findAll(pageable);
}
}
4.編寫Controller層StudentController類
package com.example.stu.kudestu.stu.controller;
import com.example.stu.kudestu.stu.dao.StudentDao;
import com.example.stu.kudestu.stu.entity.Student;
import com.example.stu.kudestu.stu.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
@RestController
/*應(yīng)用在Controller層的類上面
@RequestMapping("/s")
public class StudentController {
@Autowired//依賴注入
private StudentService studentService;
/**
* 添加學(xué)生
* @param student 要添加學(xué)生對象
* @return
*/
@PostMapping("/add")
/*@PostMapping
映射一個POST請求
Spring MVC新特性
提供了對Restful風(fēng)格的支持
@GetMapping,處理get請求
@PostMapping,處理post請求
@PutMapping,處理put請求
@DeleteMapping,處理delete請求
*/
public Student save(Student student){
return studentService.save(student);
}
/**
* 修改學(xué)生
* @param student
*/
@PostMapping("/update")
public Student update(Student student){
return studentService.save(student);
}
/**
* 刪除學(xué)生
* @param id 要刪除學(xué)生id
* @return
*/
@GetMapping("/del/{id}")
public String del(@PathVariable int id){
studentService.delete(id);
return "yes";
}
@GetMapping("/findByName/{name}")
public List<Student> findByName(@PathVariable String name){
return studentService.findStuByName(name);
}
@GetMapping("/query")
public Page<Student> findByPage(Integer page , HttpServletResponse response){
response.setHeader("Access-Control-Allow-Origin","*"); //解決跨域請求
if(page==null||page<=0){
page=0;
}else{
page-=1;
}
return studentService.findAll(page,5);
}
}
@RestController
應(yīng)用在Controller層的類上面,@RestController注解相當(dāng)于@ResponseBody + @Controller合在一起的作用,同時返回的數(shù)據(jù)為json數(shù)據(jù)
使用@Controller 注解,在對應(yīng)的方法上,視圖解析器可以解析return 的jsp,html頁面,并且跳轉(zhuǎn)到相應(yīng)頁面
若返回json等內(nèi)容到頁面,則需要加@ResponseBody注解
@PostMapping(value = "/add")等價于@RequestMapping(value = "/add",method = RequestMethod.POST)
5.利用HBuilder進(jìn)行前端編寫

Jquery.js內(nèi)容到https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js復(fù)制即可
主頁面:index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="js/jquery.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
var page = 1;
var tp = 0;
$(function(){
showData();
});
function upPage(){
if(page>1){
page--;
showData();
}
}
function downPage(){
if(page<tp){
page++;
showData();
}
}
function showData(){
$.ajax({
url:'http://localhost:8888/stu/s/query?page='+page,
success:function(result){
var rel = result.content;
tp = result.totalPages;
var htmlStr = "<table width='80%' algin='center' border='1'>"+
"<tr><th>ID</th><th>姓名</th><th>年齡</th><th>性別</th><th>操作</th></tr>";
for(var i=0;i<rel.length;i++){
var stu = rel[i];
htmlStr += "<tr><td>"+stu.id+"</td><td>"+stu.name+"</td><td>"+stu.age+"</td><td>"+stu.sex+"</td>"+
"<td><a href=''>編輯</a> <a href='http://localhost:8888/stu/s/del/"+stu.id+"'>刪除</a></td></tr>";
}
htmlStr += "</table>";
$("#show").html(htmlStr);
}
});
}
</script>
</head>
<body>
<h1 style="text-align: center;">學(xué)生管理系統(tǒng)</h1>
<hr>
<a href="add.html" rel="external nofollow" >添加學(xué)生</a>
<div id="show">
</div>
<a href="javascript:upPage();" rel="external nofollow" >上一頁</a> <a href="javascript:downPage();" rel="external nofollow" >下一頁</a>
</body>
</html>
頁面效果

添加學(xué)生的頁面信息add.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<h1>添加學(xué)生</h1>
<hr>
<form action="http://localhost:8888/stu/s/add" method="post">
<p>
姓名:<input type="text" name="name" />
</p>
<p>
年齡:<input type="text" name="age" />
</p>
<p>
性別:
<input type="radio" name="sex" value="男" checked />男
<input type="radio" name="sex" value="女" />女
</p>
<p>
<input type="submit" value="保存" />
</p>
</form>
</body>
</html>
頁面效果
'
如何利用分頁
直接調(diào)用Dao接口的父類JPA接口的分頁方法
在Service接口層定義:
/** * 分頁查詢所有數(shù)據(jù) * @param page * @param pageSize * @return */ Page<Student> findAll(int page,int pageSize);
Service實(shí)現(xiàn):
public Page<Student> findAll(int page,int pageSize) {
Pageable pageable= PageRequest.of(page,pageSize);
return studentDao.findAll(pageable);
}
Controller層:
@GetMapping("/query")
public Page<Student> findByPage(Integer page , HttpServletResponse response){
response.setHeader("Access-Control-Allow-Origin","*");
if(page==null||page<=0){
page=0;
}else{
page-=1;
}
return studentService.findAll(page,5);
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java中的CopyOnWriteArrayList你了解嗎
CopyOnWriteArrayList是Java集合框架中的一種線程安全的List實(shí)現(xiàn),這篇文章主要來和大家聊聊CopyOnWriteArrayList的簡單使用,需要的可以參考一下2023-06-06
mybatis動態(tài)新增(insert)和修改(update)方式
這篇文章主要介紹了mybatis動態(tài)新增(insert)和修改(update)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05
Java編程實(shí)現(xiàn)快速排序及優(yōu)化代碼詳解
這篇文章主要介紹了Java編程實(shí)現(xiàn)快速排序及優(yōu)化代碼詳解,具有一定借鑒價值,需要的朋友可以了解下。2017-12-12
SpringBoot多環(huán)境開發(fā)該如何配置
這篇文章主要介紹了 SpringBoot多環(huán)境的開發(fā)配置詳情,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-09-09
Spring Boot中Bean定義方調(diào)用方式解析
這篇文章主要介紹了Spring Boot中Bean定義方調(diào)用方式解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-07-07
分別在Groovy和Java中創(chuàng)建并初始化映射的不同分析
這篇文章主要為大家介紹了分別在Groovy和Java中創(chuàng)建并初始化映射的不同分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03
如何實(shí)現(xiàn)java遞歸 處理權(quán)限管理菜單樹或分類
這篇文章主要介紹了如何實(shí)現(xiàn)java遞歸 處理權(quán)限管理菜單樹或分類,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-01-01

