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

网友投稿 233 2023-05-12

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-thymehttp://leaf

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.*;

/**

* Student实体类

* @Entity 表示该类是一个实体类

* @Table(name = "student") 表示该类对应数据库中的student表

* @Id 表明该属性是一个主键

* @GeneratedValue(strategy = GenerationType.IDENTITY) 表示该主键自增

*/

@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 实现

*/

@Service

public class StudentServiceImpl implements StudentService {

@Autowired

private StudentDAO studentDAO;

/**

* 查询所有

* @return

*/

@Override

public List findAll() {

return studentDAO.findAll();

}

/**

* 根据id查询

* @param id

* @return

*/

@Override

public Student findStudentById(Integer id) {

return studentDAO.findStudentById(id);

}

/**

* 根据名字查询

* @param sname

* @return

*/

@Override

public List findStudentByName(String sname) {

return studentDAO.findStudentBySname(sname);

}

/**

*

* 查询name和password进行登录

* @param sname

* @param spassword

* @return

*/

@Override

public Student findStudentByNameAndPassword(String sname, String spassword) {

return studentDAO.findStudentBySnameAndSpassword(sname,spassword);

}

/**

* 添加信息

* @param student

* @return

*/

@Override

public Student save(Student student) {

return studentDAO.save(student);

}

/**

* 根据id来删除

* @param id

*/

@Override

public void deleteStudentById(Integer id) {

studentDAO.deleteById(id);

}

/**

* 修改

* @param student

* @return

*/

@Override

public Student update(Student student) {

return studentDAO.save(student);

}

/**

* 分页操作

* @param page

* @param pageSize

* @return

*/

@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;

/**

*控制层

* @Autowired 用于类中的属性注入

* @RestController注解底层包括了@ResponseBody和@Controller两个注解

* @ResponseBody 将数据以json格式返回

* @RequestMapping("/XXXX") 请求路径

* @GetMapping("/xxxx") Get请求

* @PostMapping("/XXX") Post请求

*/

@RestController

@RequestMapping("/student")

public class StudentController {

@Autowired

private StudentService studentService;

/**

* 查询所有

* @return

*/

@GetMapping("/findAll")

public List findAll(){

return studentService.findAll();

}

/**

* 根据id查询

* @param id

* @return

*/

@GetMapping("/findById")

public Student fingById(Integer id){

return studentService.findStudentById(id);

}

/**

* 根据名字查询

* @param name

* @return

*/

@GetMapping("/findByName")

public List findByName(String name){

return studentService.findStudentByName(name);

}

/**

* 登录功能

* @param sname

* @param spassword

* @http://return

*/

@PostMapping("/login")

public Student login(String sname,String spassword){

return studentService.findStudentByNameAndPassword(sname,spassword);

}

/**

* 添加信息

* @param student

* @return

*/

@PostMapping("/add")

public Student save(Student student){

return studentService.save(student);

}

/**

* 删除信息

* @param id

* 使用 RESTful规范

*/

@GetMapping("/delete/{id}")

public String deleteById(@PathVariable Integer id){

studentService.deleteStudentById(id);

return "

}

/**

* 更新信息

* @param student

* @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实现对数据库的增删改查和分页如果想了解更多相关内容请查看下面的相关链接

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:java开发之Jdbc分页源码详解
下一篇:java数据库开发之JDBC的完整封装兼容多种数据库
相关文章

 发表评论

暂时没有评论,来抢沙发吧~