Springboot和Jpa实现学生CRUD操作代码实例

 更新时间:2020年03月18日 13:20:47   作者:Dream0000  
这篇文章主要介绍了Springboot和Jpa实现学生CRUD操作代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

前期准备

使用idea新建个SpringBoot项目

在数据库中建student表

建包

1.编写entity包下实体类Student

(一个Javabean规范)

package com.example.stu.kudestu.stu.entity;

import javax.persistence.*;

@Entity
@Table(name = "student")
//@Entity 应用在实体类上  @Table(name = "student") 应用在实体类上,并且name属性为数据库表名
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>两个参数实体类和主键类型
  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);//添加学生
  Student update(Student student);//修改
  void delete(Integer id);//通过id删除学生
  Student findStuById(Integer id);//通过ID查找学生,接口中没有此方法,在StudentDao接口创建
  List<Student> findStuByName(String name);//通过学生姓名查找,在StudentDao接口创建

  /**
   * 分页查询所有数据
   * @param page //当前页
   * @param pageSize //每页记录数
   * @return
   */
  Page<Student> findAll(int page,int pageSize);

}

在service对接口实现

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 
/*应用在Controller层的类上面
@RequestMapping("/s")
public class StudentController {

  @Autowired//依赖注入
  private StudentService studentService;

  /**
   * 添加学生
   * @param student 要添加学生对象
   * @return
   */
  @PostMapping("/add")
  /*@PostMapping
  映射一个POST请求

  Spring MVC新特性 
  
 提供了对Restful风格的支持
@GetMapping,处理get请求 
@PostMapping,处理post请求 
@PutMapping,处理put请求 
@DeleteMapping,处理delete请求
*/
    
  public Student save(Student student){
    return studentService.save(student);
  }

  /**
   * 修改学生
   * @param student
   */
  @PostMapping("/update")
  public Student update(Student student){
    return studentService.save(student);
  }

  /**
   * 删除学生
   * @param id  要删除学生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

应用在Controller层的类上面,@RestController注解相当于@ResponseBody + @Controller合在一起的作用,同时返回的数据为json数据

使用@Controller 注解,在对应的方法上,视图解析器可以解析return 的jsp,html页面,并且跳转到相应页面
若返回json等内容到页面,则需要加@ResponseBody注解

@PostMapping(value = "/add")等价于@RequestMapping(value = "/add",method = RequestMethod.POST)

5.利用HBuilder进行前端编写

Jquery.js内容到https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js复制即可

主页面: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>&nbsp;<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;">学生管理系统</h1>
    <hr>
    <a href="add.html" rel="external nofollow" >添加学生</a>
    
    <div id="show">
      
    </div>
    
    <a href="javascript:upPage();" rel="external nofollow" >上一页</a>&nbsp;&nbsp;<a href="javascript:downPage();" rel="external nofollow" >下一页</a>
    
  </body>
</html>

页面效果

添加学生的页面信息add.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <h1>添加学生</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>

页面效果

'

如何利用分页

直接调用Dao接口的父类JPA接口的分页方法

在Service接口层定义:

/**
   * 分页查询所有数据
   * @param page
   * @param pageSize
   * @return
   */
  Page<Student> findAll(int page,int pageSize);

Service实现:

 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);
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 详解Swagger接口文档和常用注解的使用

    详解Swagger接口文档和常用注解的使用

    Swagger是一款遵循 Restful 风格的接口文档开发神器,支持基于 API 自动生成接口文档。本文将为大家讲讲Swagger接口文档和常用注解的使用方法,需要的可以参考一下
    2022-08-08
  • JavaFX实现石头剪刀布小游戏

    JavaFX实现石头剪刀布小游戏

    这篇文章主要为大家详细介绍了JavaFX实现石头剪刀布小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • 使用SpringBoot2.x配置静态文件缓存

    使用SpringBoot2.x配置静态文件缓存

    这篇文章主要介绍了使用SpringBoot2.x配置静态文件缓存的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • 对SpringBoot项目Jar包进行加密防止反编译

    对SpringBoot项目Jar包进行加密防止反编译

    最近项目要求部署到其他公司的服务器上,但是又不想将源码泄露出去,要求对正式环境的启动包进行安全性处理,防止客户直接通过反编译工具将代码反编译出来,本文介绍了如何对SpringBoot项目Jar包进行加密防止反编译,需要的朋友可以参考下
    2023-10-10
  • 浅谈Java 并发的底层实现

    浅谈Java 并发的底层实现

    这篇文章主要介绍了浅谈Java 并发的底层实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • Java中LinkedHashSet的源码分析

    Java中LinkedHashSet的源码分析

    这篇文章主要介绍了Java中LinkedHashSet的源码分析,LinkedHashSet 是 Java 中的一个集合类,它是 HashSet 的子类,同时也实现了 Set 接口,与 HashSet 不同的是,LinkedHashSet 保留了元素插入的顺序,并且具有 HashSet 的快速查找特性,需要的朋友可以参考下
    2023-09-09
  • springboot HandlerIntercepter拦截器修改request body数据的操作

    springboot HandlerIntercepter拦截器修改request body数据的操作

    这篇文章主要介绍了springboot HandlerIntercepter拦截器修改request body数据的操作,具有很好的参考价值,希望对大家有所帮助。
    2021-06-06
  • 谈谈在Java发送邮件中遇到的的问题

    谈谈在Java发送邮件中遇到的的问题

    本文介绍了在利用Java发送邮件过程中遇到的的两个问题,以及如何解决这两个问题。如果大家也遇到了这些问题,可以来参考借鉴。
    2016-08-08
  • SpringBoot实现物品收藏功能

    SpringBoot实现物品收藏功能

    这篇文章主要介绍了SpringBoot实现物品收藏功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • Springboot 接口需要接收参数类型是数组问题

    Springboot 接口需要接收参数类型是数组问题

    这篇文章主要介绍了Springboot 接口需要接收参数类型是数组问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01

最新评论