• 《SprigBoot篇》09.Spring Data JPA简介与SpringBoot整合超详细教学


    陈老老老板
    说明:工作了,学习一些新的技术栈,边学习边总结,各位一起加油。需要注意的地方都标红了,还有资源的分享. 一起加油。

    1.JPA简介

    (1.)说明:
    经过一星期的培训,这周正式入职了,接触很多新的技术栈,第一个就是Spring Data JPA;
      spirng data jpa是spring提供的一套简化JPA开发的框架,按照约定好的规则进行【方法命名】去写dao层接口,就可以 在不写接口实现的情况下,实现对数据库的访问和操作。
      同时提供了很多除了CRUD之外的功能,如分页、排序、复杂查 询等等。 Spring Data JPA 让我们解脱了DAO层的操作,基本上所有CRUD都可以依赖于它来实现,在实际的工作工程中,推荐使 用Spring Data JPA + ORM(如:hibernate)完成操作,这样在切换不同的ORM框架时提供了极大的方便,同时也使 数据库层操作更加简单,方便解耦。
    其实就是通过JPA这个规范,对于简单的数据库操作可以不用写SQL

    2.与JDBC对比

    相同处:
    1.都跟数据∙库操作有关,JPA 是JDBC 的升华,升级版。
    2.JDBC和JPA都是一组规范接口
    3.都是由SUN官方推出的

    不同处:1.JDBC是由各个关系型数据库实现的, JPA 是由ORM框架实现
    2.JDBC 使用SQL语句和数据库通信。 JPA用面向对象方式, 通过ORM框架来生成SQL,进行操作。
    3.JPA在JDBC之上的, JPA也要依赖JDBC才能操作数据库。

    3.Mybatis与Hibernate对比

    mybatis:小巧、方便?、高效、简单、直接、半自动的ORM框架。
    小巧: mybatis就是jdbc封装
    在国内更流行。
    场景: 在业务比较复杂系统进行使用。

    hibernate:强大、方便、高效、(简单)复杂、绕弯子、全自动的ORM框架。
    强大:根据ORM映射生成不同SQL
    在国外更流。
    场景: 在业务相对简单的系统进行使用,随着微服务的流行。

    4. JPA的优点

    1.简化持久化操作的开发工作:让开发者从繁琐的 JDBC 和 SQL 代码中解脱出来,直接面向对象持久化操作。 2.Sun希望持久化技术能够统一,实现天下归一:如果你是基于JPA进行持久化你可以随意切换数据库。

    同时提供:
    1)ORM映射元数据:JPA支持XML和注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对 象持久化到数据库表中;
    如:@Entity 、 @Table 、@Id 与 @Column等注解。
    2)JPA 的API:用来操作实体对象,执行CRUD操作,框架在后台替我们完成所有的事情,开发者从繁琐的JDBC和 SQL代码中解脱出来。
    如:entityManager.merge(T t);
    3)JPQL查询语言:通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。
    如:from Student s where s.name = ?

    5.阐述JPA与Hibernate关系

    说明:
    其实上面讲Mybatis与Hibernate的对比就是为了让大家对HIbernate有个简单的了解,因为JPA只是一个ORM规范,告诉我们应该怎么做,而Hibernate就是实现了JPA接口的ORM框架。在使用JDBC对数据库进行操作,如下图所示:

    在这里插入图片描述

    6.SpringBoot 整合Spring Data JPA

    环境:
    IDEA 2020.3 Mysql 5.7
    这里就是最简单的项目,一些其他细节的地方,还是去看一些视频学习为好

    (1)创建项目

    说明:创建新的springboot项目(这里使用的是ali的镜像网站)

    在这里插入图片描述
    在这里插入图片描述
    说明:这里只添加Spring Web 与Lombok
    Lombok:实体类中通过注解可省略getter,setter,有参构造,无参构造等。
    Spring Web:springboot起步依赖,默认的服务器是tomcat。在这里插入图片描述

    (2)配置依赖(pom坐标)

    说明:在pom.xml中加入坐标在进行下载jar包。如果依然报红,就升一下springboot版本

     	    <!-- Spring Data 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>
            </dependency>
    

    在这里插入图片描述

    (3)填写配置文件

    说明: 在application.properties中填写一下配置,这里数据库,用户名,密码 换成自己的。

    #自动生成数据库表(关键)
    spring.jpa.hibernate.ddl-auto=update
    #mysql数据库连接配置(非常重要)
    spring.datasource.url = jdbc:mysql://localhost:3306/springbootjpa?serverTimezone=Asia/Shanghai
    #数据库用户名
    spring.datasource.username = root
    #数据库密码
    spring.datasource.password = root
    #mysql数据库驱动程序(重要)
    spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver
    #jpa配置:在控制台显示Hibernatesql(可选)
    spring.jpa.show-sql = true
    #其他配置:关闭Thymeleaf 的缓存
    spring.thymeleaf.cache = false
    

    在这里插入图片描述

    (4)创建数据库并写实体类

    说明:只用创建库和实体类,不用创建表信息,当运行项目有实体类就自动生成表了。这也是方便的一点。
    在这里插入图片描述

    package com.example.demo.pojo;
    
    import lombok.Data;
    import org.springframework.format.annotation.DateTimeFormat;
    
    import javax.persistence.*;
    import java.io.Serializable;
    import java.util.Date;
    
    
    //lombok
    @Data
    //声明为实体类
    @Entity
    public class Admin implements Serializable {
    
        //主键id
        @Id
        //主键id 生成策略 IDENTITY表示数据库自动生成
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        //Long 代表bigint
        private Long id;
    
        //数据库列的字段,非空唯一,长度20
        @Column(nullable = false,unique = true,length = 20)
        private String username;
    
        //数据库列的字段,非空,长度20
        @Column(nullable = false,unique = true,length = 20)
        private String password;
    
        @Column(nullable = false)
        @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private Date rdate;
    
    }
    
    

    说明:这时再看数据库已经出现表了,说明成功!!!

    在这里插入图片描述

    (5)编写repository接口与Controller类

    说明:创建repository包下接口AdminrRepository,该接口要 extends PagingAndSortingRepository接口,这个接口是最新的,有分页和排序功能。其中Admin表示实体模型,Long代表主键类型。**

    package com.example.demo.repository;
    
    import com.example.demo.pojo.Admin;
    import org.springframework.data.jpa.repository.JpaRepository;
    import org.springframework.data.repository.PagingAndSortingRepository;
    import org.springframework.stereotype.Repository;
    
    //声明为repository
    @Repository
    public interface AdminRepository extends PagingAndSortingRepository<Admin,Long>  {
        
    }
    
    
    package com.example.demo.controller;
    
    import com.example.demo.pojo.Admin;
    import com.example.demo.repository.AdminRepository;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.List;
    
    @RestController
    public class AdminController {
    
        @Autowired
        private AdminRepository adminRepository;
    
        @GetMapping("findall")
        public List<Admin> finall(){
            List<Admin> all = (List<Admin>) adminRepository.findAll();
            return all;
        }
    }
    
    

    在这里插入图片描述

    在这里插入图片描述

    (6)测试

    说明:在数据库admin表中填写一条/多条数据,重新启动项目。然后在网址中输入localhost:8080/findall 出现数据说明成功!!!
    在这里插入图片描述

    在这里插入图片描述
    注:其他的方法就不写了,只是做一个配置演示,都是很简单的。JPA最厉害的是使用命名规则进行创建接口方法,将会在下一个博客中介绍常见的命名规则。

    总结:JPA目的是Code First。Mybatis是Db First。 JPA也有适合自己的环境,每个技术都有自己的特点,多学一点没有坏处。希望对您有帮助,感谢阅读

    结束语:裸体一旦成为艺术,便是最圣洁的。道德一旦沦为虚伪,便是最下流的。
    勇敢去做你认为正确的事,不要被世俗的流言蜚语所困扰。

  • 相关阅读:
    opencv形状目标检测
    手把手教你搭建android模块化项目框架(十二)——实现自定义view的一些小技巧~
    简述LSM-Tree
    微模块化炙手可热,数据中心走向智能化取胜
    SpringSecurity6 | 委派筛选器代理和过滤器链代理
    2020 MIT6.s081 Page Fault & Lazy Page Allocation学习笔记
    【前端设计】SDC中生成时钟create_generated_clock语法解析
    高维数组是如何通过底层连续存储实现的?
    OceanBase年度发布会归来
    PEOz-NPs-Cy 5.5 聚(2-乙基-2-噁唑啉)纳米粒子修饰荧光素5.5
  • 原文地址:https://blog.csdn.net/weixin_47343544/article/details/127098145