zoukankan      html  css  js  c++  java
  • SpringBoot图文教程12—SpringData Jpa的基本使用

    有天上飞的概念,就要有落地的实现

    • 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍

    • 先赞后看,养成习惯

    SpringBoot 图文教程系列文章目录

    1. SpringBoot图文教程1「概念+案例 思维导图」「基础篇上」
    2. SpringBoot图文教程2—日志的使用「logback」「log4j」
    3. SpringBoot图文教程3—「‘初恋’情结」集成Jsp
    4. SpringBoot图文教程4—SpringBoot 实现文件上传下载
    5. SpringBoot图文教程5—SpringBoot 中使用Aop
    6. SpringBoot图文教程6—SpringBoot中过滤器的使用
    7. SpringBoot图文教程7—SpringBoot拦截器的使用姿势这都有
    8. SpringBoot图文教程8 — SpringBoot集成MBG「代码生成器」
    9. SpringBoot图文教程9—SpringBoot 导入导出 Excel 「Apache Poi」
    10. SpringBoot图文教程10—模板导出|百万数据Excel导出|图片导出「easypoi」
    11. SpringBoot图文教程11—从此不写mapper文件「SpringBoot集成MybatisPlus」

    前言

    在之前的文章中介绍过了Mybatis,MBG 和 MybatisPlus 等一系列Mybatis相关的技术,有朋友在评论区提到了Jpa,也评论了SpringData Jpa 和 Mybatis 的优劣。但是方便也好,强大也好,每个技术都有自己的使用场景,所以我不在文中讨论好坏,今天带来Jpa的使用教程,各个技术大家根据需要任选。

    什么是 SpringData Jpa

    SpringData 简介

    SpringData是SpringBoot官方默认使用的访问数据库的技术,简化了对各种数据库的访问操作,包括但不仅限于Mysql,Redis,MongoDB等。

    官网地址:https://spring.io/projects/spring-data
    通过官网可以看到 SpringData 能够操作的技术非常的多,除了Mysql,Redis,MongoDB,还有es,hadoop等等

    那么SpringData是如何简化访问操作的呢?

    在SpringData中,提供了一套统一的接口来实现对数据访问层的操作,就是Repository接口。在接口中提供了基本的CRUD,查询,排序和分页的相关操作。

    SpringData 主要 API:

    • Repository<T,ID extends Serializable>:统一接口
    • RevisionRepository<T,ID extends Serializable, N extends Number & Comparable>:基于乐观锁机制
    • CrudRepository<T,ID extends Serializable>:基本CRUD操作
    • PagingAndSortingRepository<T, ID extends Serializable>:基本CRUD以及分页

    简单说就是只要导入SpringData的依赖,不需要任何方法 就可以直接进行基本的数据操作,因为这些方法在接口中写好了。

    但是,慢着!!!好像哪里不对

    有了接口是一回事儿,如果没有实现还是不能够进行使用啊,那么SpringData 的实现哪里找呢?

    想要实现方法就要找今天的主角了 SpringData Jpa。

    SpringData Jpa

    如图所示,对于我们的Java程序而言想要访问数据库只需要调用SpringData的统一API方法就可以,而至于调用方法之后怎么完成任务,则不需要我们担心,SpringData 针对不同的技术有很多的实现,例如:SpringData Redis,SpringData Jpa,SpringData MongoDB等,而SpringData Jpa 就是对关系型数据库的实现。

    jpa全称Java Persistence Api,是一套Java EE 平台标准的ORM规范,通过Jpa可以实现对关系型数据库的访问。在Jpa 中有 JpaRepository 接口,编写接口继承JpaRepository既有crud及分页等基本功能。

    Jpa和Hibernate的关系,如图所示,Jpa可以整合很多技术,Hibernate,Toplink,OpenJpa,而SpringData Jpa的默认实现就是Hibernate。

    简单来说就是:SpringData Jpa 实现了 SpringData,Hibernate 又实现了 SpringData Jpa。所以最终干活的实际上是 Hibernate。

    SpringBoot中Jpa的基本使用

    基本使用步骤:

    1. 创建项目 导入依赖
    2. 编写实体类 添加Jpa注解配置映射关系
    3. 编写一个Dao接口来操作实体类对应的数据表(Repository)
    4. 配置Jpa
    5. 测试类测试

    1.创建项目 导入依赖 配置数据源

    创建项目导入如下依赖:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.4.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    
        <groupId>com.lby</groupId>
        <artifactId>boot-jpa</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>boot-jpa</name>
        <description>Demo project for Spring Boot</description>
    
        <properties>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
    <!--        jpa-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
            </dependency>
    <!--        mysql-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
    
    <!--        lombok-->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.4</version>
                <scope>provided</scope>
            </dependency>
    
    <!--        测试-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>
    
    

    配置

    注意:和Mybatis不同的是,在配置的数据库boot中可以先不建表,后续使用Jpa操作数据库的时候,如果发现没有表,Jpa会根据实体类帮你创建一张数据库表。

    2.编写实体类 添加Jpa注解配置映射关系

    通过Jpa操作数据库的数据,需要将实体类和数据库建立联系

    package com.lby.bootjpa.entity;
    
    
    import lombok.Data;
    
    import javax.persistence.*;
    
    /**
     * @Data lombok 注解  生成get set 等
     * 
     * 注解的作用:配置实体类和数据库表的映射关系
     * @Entity 告诉JPA这是一个实体类(一个和数据表映射的类)
     * @Table 配置当前实体类和哪张表对应;可以省略不写,如果省略默认表名就是admin
     */
    @Data
    @Entity
    @Table(name = "admin")
    public class Admin {
        /**
         * @Id 代表这是主键
         * @GeneratedValue 主键生成规则 IDENTITY 自增
         */
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Integer adminId;
        /**
         * 配置属性和数据库表字段的对应
         * name 数据库表的字段名 可以不写 不写就是字段名就是属性名
         */
        @Column(name = "username")
        private String username;
        @Column
        private String password;
    
    }
    
    

    3.编写一个Dao接口来操作实体类对应的数据表(Repository)

    
    /**
     * JpaRepository 泛型1 被操作的实体类 泛型2 主键属性的类型
     */
    public interface AdminRepository extends JpaRepository<Admin,Integer> {
    }
    
    

    4.配置Jpa

    spring:
        jpa:
          hibernate:
          # 更新或者创建数据表结构 之前提到过,如果数据库中没做表,Jpa会我们创建 这个配置
    #      就是在没有表的时候创建,实体类发生改变的话 会更新表结构
            ddl-auto: update
        # 配置在日志中打印出执行的 SQL 语句信息
          show-sql: true
    

    5.测试类测试

    基本的配置结束,我们通过测试类简单测试一下能不能使用

    package com.lby.bootjpa;
    
    import com.lby.bootjpa.entity.Admin;
    import com.lby.bootjpa.repository.AdminRepository;
    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.SpringRunner;
    
    @RunWith(SpringRunner.class)
    @SpringBootTest(classes = {BootJpaApplication.class})
    public class BootJpaApplicationTests {
        @Autowired
        private AdminRepository adminRepository;
    
        @Test
        public void contextLoads() {
            Admin admin = new Admin();
            admin.setUsername("hhh");
            admin.setPassword("12345");
            adminRepository.save(admin);
        }
    
    
    
    }
    
    

    测试类的运行结果如下

    总结

    Tips:本文主要讲解 SpringBoot项目中整合 SpringData Jpa的方式,关于SpringData Jpa的使用比较基础,如果想要了解更加全面的SpringData Jpa的使用,请持续关注,后续会写Jpa全面的使用教程。

    恭喜你完成了本章的学习,为你鼓掌!如果本文对你有帮助,请帮忙点赞,评论,转发,这对作者很重要,谢谢。

    让我们再次回顾本文的学习目标

    • 掌握SpringBoot中 SpringData Jpa 的使用

    要掌握SpringBoot更多的用法,请持续关注本系列教程。

    求关注,求点赞,求转发

    欢迎关注本人公众号:鹿老师的Java笔记,将在长期更新Java技术图文教程和视频教程,Java学习经验,Java面试经验以及Java实战开发经验。

  • 相关阅读:
    spring的@Transactional注解详细用法
    java中线程池的使用方法
    Java中多线程使用匿名内部类的方式进行创建3种方式
    RISC-V指令集的诞生,"V"也表示变化(variation)和向量(vectors)
    雷军致全员公开信:明天,让我们一起见证伟大时刻!(估值543亿美元,中国的山寨机已被彻底消灭,通过生态链产品改变了100多个行业,全面推动了商业效率的提升,上市仅仅是小米新的开始)
    C语言利用 void 类型指针实现面向对象类概念与抽象
    Google、Mozilla、Qt、LLVM 这几家的规范是明确禁用异常的
    Qt程序调试之Q_ASSERT断言(它是一个宏,接受布尔值,当其中的布尔值为真时,便什么也不做)
    ES 1.7安装ik分词elasticsearch-analysis-ik-1.2.5中文同义词实现
    Windows 64下elasticsearch-1.7.1集群 安装、启动、停止
  • 原文地址:https://www.cnblogs.com/bingyang-py/p/12445101.html
Copyright © 2011-2022 走看看