SpringBoot整合Spring Data JPA访问MySQL

本文介绍了如何使用SpringDataJPA在SpringBoot应用中进行数据库的基本CRUD操作。首先,概述了JPA的作用和SpringDataJPA的功能,然后展示了项目结构、数据库配置、实体类、DAO接口和测试类的实现。通过实例代码,演示了增加、删除、修改和查询操作,包括单个和批量操作。最后,提供了项目源码的GitHub和Gitee链接。
摘要由CSDN通过智能技术生成

前言

JPA的出现主要是为了简化持久层开发以及整合ORM技术,结束Hibernate、TopLink、JDO等ORM框架各自为营的局面。JPA是在吸收现有ORM框架的基础上发展而来,易于使用,伸缩性强。总的来说,JPA包括以下3方面的技术:

ORM映射元数据: 支持XML和注解两种元数据的形式,元数据描述对象和表之间的映射关系
API: 操作实体对象来执行CRUD操作
查询语言: 通过面向对象而非面向数据库的查询语言(JPQL)查询数据,避免程序的SQL语句紧密耦合

Spring Data JPA 官方文档

Spring Data JPA是Spring Data家族的一部分,可以轻松实现基于JPA的存储库。 此模块处理对基于JPA的数据访问层的增强支持。 它使构建使用数据访问技术的Spring驱动应用程序变得更加容易。

在相当长的一段时间内,实现应用程序的数据访问层一直很麻烦。 必须编写太多样板代码来执行简单查询以及执行分页和审计。 Spring Data JPA旨在通过减少实际需要的工作量来显著改善数据访问层的实现。 作为开发人员,您编写repository接口,包括自定义查找器方法,Spring将自动提供实现。

Spring Data JPA, part of the larger Spring Data family, makes it easy to easily implement JPA based repositories. This module deals with enhanced support for JPA based data access layers. It makes it easier to build Spring-powered applications that use data access technologies.

Implementing a data access layer of an application has been cumbersome for quite a while. Too much boilerplate code has to be written to execute simple queries as well as perform pagination, and auditing. Spring Data JPA aims to significantly improve the implementation of data access layers by reducing the effort to the amount that’s actually needed. As a developer you write your repository interfaces, including custom finder methods, and Spring will provide the implementation automatically.

这篇文章就初步演示如何使用 Spring Data JPA 对mysql数据库进行基本 CURD 操作
实例的完整代码将会放在文章最后

Spring Boot整合Spring Data Jpa实例

1、项目结构

在这里插入图片描述

2、数据库准备

建表语句可以看我另一文章,使用的是同一个表 SpringBoot整合mybatis-plus–入门超详细
mybatis-plus 和 Spring Data JPA 有些类似的地方可以参考一下

3、pom.xml

         <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>

4、application.yml

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mybits?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8
    username: root
    password: aaaa
  jpa:
    database: MySQL
    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
    show-sql: true
    hibernate:
      ddl-auto: update

5、User.java

import lombok.*;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
//@Entity注解标识了User类是一个持久化的实体
//@Data和@NoArgsConstructor是Lombok中的注解。用来自动生成各参数的Set、Get函数以及不带参数的构造函数。
//如果您对Lombok还不了解,可以看看这篇文章:
//[Java开发神器Lombok的使用与原理](https://www.jianshu.com/p/422f151fccd3)
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
	//@Id和@GeneratedValue用来标识User对应对应数据库表中的主键
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    private String name;
    private String sex;
    private String pwd;
    private String email;

    //打印这个对象
    public void println() {
        System.out.println(this);
    }
}

这里把引入的包也贴了出来,防止大家导错包

UserDao.java

public interface UserDao extends JpaRepository<User, Integer> {
 
}

可以看到,这个接口继承了JpaRepository<实体,ID>,spring-data-jpa只需要这个信息,就可以帮你完成常用的操作:增删查改。

这一节不具体展开JpaRepository中所包含的所有方法,单纯使用最简单的增删查改来过瘾

测试类 UserServiceImplTest.java

这里为了简化文章就不写server层直接测试类了

import com.king.bean.User;
import com.king.dao.UserDao;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.util.*;


@SpringBootTest
@RunWith(SpringJUnit4ClassRunner.class)
public class UserServiceImplTest {
    @Autowired
    UserDao userDao;

    //查询全部
    @Test
    public void queryAll(){
        userDao.findAll().forEach(System.out::println);
    }
}

运行结果
在这里插入图片描述

select user0_.id as id1_0_, user0_.email as email2_0_, user0_.name as name3_0_, user0_.pwd as pwd4_0_, user0_.sex as sex5_0_ from user user0_

基本 CURD 操作介绍

增加操作

  1. 单个新增
    @Test
    public void add() {
        User user = new User(null, "test", "男", "aaa", "a@qq.com");
        userDao.saveAndFlush(user);
        //userDao.save(user);
   	}

例子中有一个saveAndFlush 还有一个 save 方法可以参考这篇文章
JPA中save和saveAndFlush的区别
2. 批量新增

    @Test
    public void add2() {
        List<User> list = new ArrayList<>();
        for (int i = 20; i < 40; i++) {
            User user1 = new User(null, "test" + i, i % 2 == 0 ? "男" : "女", "aaaa", "a" + i + "@qq.com");
            list.add(user1);
        }
        userDao.saveAll(list);
    }

删除操作

  1. 根据id单个删除
    @Test
    public void delete() {
        User user = new User();
        user.setId(20);
        userDao.delete(user);
    }
  1. 根据id批量删除
    @Test
    public void delete() {
        List<Integer> list = new ArrayList<>();
        list.add(21);
        list.add(22);
        userDao.deleteAllById(list);
    }

修改操作

    @Test
    public void update() {
        //获得id为8的用户对象
        User user = userDao.findUserById(8);
        user.println();
        user.setEmail("update@qq.com");
        //提交修改
        User user1 =userDao.save(user);
        //打印修改后结果
        user1.println();
    }

查询操作

 @Test
    public void query() {
        //查询全部
        userDao.findAll().forEach(System.out::println);
        //通过id查询
        userDao.findById(8).get().println();
        //条件查询所有性别为男的用户
        User user = new User();
        user.setSex("男");
        Example<User> example = Example.of(user);  // 此处未构建自定义匹配规则,使用的是默认匹配规则
        userDao.findAll(example).forEach(System.out::println);

        user.setName("test2");
        //查询一个 性别为男 名字为 test2的用户
        userDao.findOne(example).get().println();
    }

总结:以上就是Spring Data Jpa 中的最基础的curd操作 ,但是这并不是 jpa 的所有内容,其强大不限于此。

最后附上我的演示例源码

Github
https://github.com/KingJin-web/springboot/tree/master/mybatis_plus
Gitee
https://gitee.com/king__gitee/springboot/tree/master/jpa

以上内容属于个人笔记整理,如有错误,欢迎批评指正!

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值