栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot+MySQL+Jpa实现对数据库的增删改查和分页详解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot+MySQL+Jpa实现对数据库的增删改查和分页详解

一、 使用Springboot+Jpa实现对mysql数据库的增删改查和分页功能

JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。

使用Springboot和jpa对数据库进行操作时,能够大大减少我们的工作量,在jpa中,已经在底层封装好了增删查的功能和sql语句,可以使我们进行快速开发

二、项目过程和配置文件 1、applaction.properties文件配置
#数据源配置
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
#注意  test是你要连接的数据库的名字 见下图
spring.datasource.url=jdbc:mysql://localhost:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.initialSize=20
spring.datasource.minIdle=50
spring.datasource.maxActive=500

#上下文配置
server.port=8888
server.servlet.context-path=/kude

#配置jpa
#帮我们自动生成表结构
spring.jpa.properties.hibernate.hbm2ddl.auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.show-sql= true
spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true

2、pom.xml文件配置

  org.springframework.boot
  spring-boot-starter-parent
  2.1.4.RELEASE
   

com.example
kudesoft
0.0.1-SNAPSHOT
kudesoft
Demo project for Spring Boot


  1.8



  
    org.springframework.boot
    spring-boot-starter-data-jpa
  
  
    org.springframework.boot
    spring-boot-starter-thymeleaf
  
  
    org.springframework.boot
    spring-boot-starter-web
  

  
    org.springframework.boot
    spring-boot-devtools
    runtime
  
  
    mysql
    mysql-connector-java
    runtime
  
  
    org.springframework.boot
    spring-boot-starter-test
    test
  

  
  
    com.alibaba
    druid
    1.1.10
  
	
  
    com.github.pagehelper
	pagehelper-spring-boot-starter
	1.2.10
  



  
    
      org.springframework.boot
      spring-boot-maven-plugin
    
  
3、项目结构

4、实体类Student
package com.example.kudesoft.entity;

import javax.persistence.*;


@Entity
@Table(name = "student")
public class Student {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Integer id;
  private String sname;
  private String spassword;

  public Student() {
  }

  @Override
  public String toString() {
    return "Student{" +
 "id=" + id +
 ", sname='" + sname + ''' +
 ", spassword='" + spassword + ''' +
 '}';
  }

  public Integer getId() {
    return id;
  }

  public void setId(Integer id) {
    this.id = id;
  }

  public String getSname() {
    return sname;
  }

  public void setSname(String sname) {
    this.sname = sname;
  }

  public String getSpassword() {
    return spassword;
  }

  public void setSpassword(String spassword) {
    this.spassword = spassword;
  }
}
5、DAO层
package com.example.kudesoft.dao;

import com.example.kudesoft.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 {

  //根据id查
  Student findStudentById(Integer id);
  //根据名字查询
  @Query(name = "findStudentBySname",nativeQuery = true,
      value = "select * from student where sname=:sname")
  List findStudentBySname(@Param("sname") String sname);

  //登录功能
  Student findStudentBySnameAndSpassword(@Param("sname") String sname,@Param("spassword") String spassword);
}

在jpa中封装有查询功能、添加功能、删除功能,但是没有修改功能以及一些特定的查询功能,所以在编程过程中,我们需要根据需求来增加一些功能函数。如果要是根据id来进行查询或其他操作时,数据库中的主键id 一定要设为id,不要设置为sid、uid等其他的主键名。

6、Service层
package com.example.kudesoft.service;

import com.example.kudesoft.entity.Student;
import org.springframework.data.domain.Page;

import java.util.List;

public interface StudentService {

  //查询所有
  List findAll();

  //根据id查询单个
  Student findStudentById(Integer id);

  //根据name查询
  List findStudentByName(String sname);

  //登录
  Student findStudentByNameAndPassword(String sname,String spassword);

  //添加一个
  Student save(Student student);

  //删除一个
  void deleteStudentById(Integer id);

  //修改
  Student update(Student student);

  //分页
  Page findAll(int page, int pageSize);
}

在编写分页功能时,一定要注意Page所在的包是import org.springframework.data.domain.Page,不是其他的包,如果包导错了,就会出现错误。

7、ServiceImpl
package com.example.kudesoft.service;

import com.example.kudesoft.dao.StudentDAO;
import com.example.kudesoft.entity.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;

import java.util.List;


@Service
public class StudentServiceImpl implements StudentService {

  @Autowired
  private StudentDAO studentDAO;

  
  @Override
  public List findAll() {
    return studentDAO.findAll();
  }

  
  @Override
  public Student findStudentById(Integer id) {
    return studentDAO.findStudentById(id);
  }

  
  @Override
  public List findStudentByName(String sname) {
    return studentDAO.findStudentBySname(sname);
  }

  
  @Override
  public Student findStudentByNameAndPassword(String sname, String spassword) {
    return studentDAO.findStudentBySnameAndSpassword(sname,spassword);
  }

  
  @Override
  public Student save(Student student) {
    return studentDAO.save(student);
  }

  
  @Override
  public void deleteStudentById(Integer id) {

    studentDAO.deleteById(id);
  }

  
  @Override
  public Student update(Student student) {
    return studentDAO.save(student);
  }

  
  @Override
  public Page findAll(int page, int pageSize) {
    Pageable pageable = PageRequest.of(page,pageSize);
    return (Page) studentDAO.findAll(pageable);
  }
}

在进行分页操作的时候,由于Jpa中封装有很多的findAll()函数,所以一定要看清楚要用哪一个findAll()函数,如上代码片:查询所有的studentDAO.findAll()和分页的studentDAO.findAll()函数一样,但是内部参数不一样,所以就会产生不一样的结果。

8、Controller层
package com.example.kudesoft.controller;

import com.example.kudesoft.entity.Student;
import com.example.kudesoft.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
@RequestMapping("/student")
public class StudentController {


  @Autowired
  private StudentService studentService;

  
  @GetMapping("/findAll")
  public List findAll(){

    return studentService.findAll();
  }

  
  @GetMapping("/findById")
  public Student fingById(Integer id){
    return studentService.findStudentById(id);
  }


  
  @GetMapping("/findByName")
  public List findByName(String name){
    return studentService.findStudentByName(name);
  }


  
  @PostMapping("/login")
  public Student login(String sname,String spassword){
    return studentService.findStudentByNameAndPassword(sname,spassword);
  }

  
  @PostMapping("/add")
  public Student save(Student student){
    return studentService.save(student);
  }

  

  @GetMapping("/delete/{id}")
  public String deleteById(@PathVariable Integer id){

    studentService.deleteStudentById(id);
    return "删除成功";
  }

  
  @PostMapping("/update")
  public Student update(Student student){

    return studentService.update(student);
  }


  @GetMapping("/query")
  public Page findByPage(Integer page, HttpServletResponse httpServletResponse){
    httpServletResponse.setHeader("Access-Control-Allow-Origin","*");

    if (page==null || page<=0){
      page = 0;
    }else {
      page = page-1;
    }
    return studentService.findAll(page,5);
  }
}

在controller层中,我们对于各个功能的实现一定要明白使用Get方式还是Post方式进行操作,否则就会出现服务器内部错误等等。

三、注意

在项目的各个功能实现过程中,由于其中含有很多的同名方法和jar包,所以我们在编程过程中一定要注意用对jar包,不要因为导错jar包而给我们增加工作量

本文介绍了SpringBoot+MySQL+Jpa实现对数据库的增删改查和分页如果想了解更多相关内容请查看下面的相关链接

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/135094.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号