SpringData JPA 快速入门

本文介绍了SpringDataJPA的基础概念,包括其与JPA和Hibernate的关系,以及如何在SpringBoot项目中集成JPA,配置数据源、实体类、DAO接口和测试。重点展示了如何利用SpringDataJPA进行CRUD操作和优化数据库访问层代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SpringData JPA 快速入门

1、SpringData JPA 简介

1、Spring Data JPA 认识,官网:https://spring.io/projects/spring-data-jpa

SpringData:其实SpringData就是Spring提供了一个操作数据的框架。而SpringData JPA 只是 SpringData 框架下的一个基于JPA标准操作数据的模块,简化操作持久层的代码。只需要编写接口就可以。

Spring Data JPA:是 Spring 基于 ORM 框架、JPA 规范的基础上封装的一套JPA应用框架,可使开发者用极简的代码即可实现对数据库的访问和操作。它提供了包括增删改查等在内的常用功能,且易于扩展!学习并使用 Spring Data JPA 可以极大提高开发效率!

Spring Data JPA 让我们解脱了DAO层的操作,基本上所有CRUD都可以依赖于它来实现,在实际的工作工程中,推荐使用Spring Data JPA + ORM(如:Hibernate)完成操作,这样在切换不同的ORM框架时提供了极大的方便,同时也使数据库层操作更加简单,方便解耦。

2、Spring Data JPA 特性

Features:

  • Sophisticated support to build repositories based on Spring and JPA
  • Support for Querydsl predicates and thus type-safe JPA queries
  • Transparent auditing of domain class
  • Pagination support, dynamic query execution, ability to integrate custom data access code
  • Validation of @Query annotated queries at bootstrap time
  • Support for XML based entity mapping
  • JavaConfig based repository configuration by introducing @EnableJpaRepositories.

SpringDataJPA 极大简化了数据库访问层代码。 使用SpringDataJpa,我们的DAO层中只需要写接口,就自动具有了增删改查、分页查询等方法。

3、Hibernate 与 JPA 和 Spring Data JPA 的关系

Java代码-----》Spring Data JPA-----》JPA 规范-----》Hibernate库-----》封装JDBC操作-----》数据库
  1. JPA 是一套规范,内部是有接口和抽象类组成的
  2. Hibernate 是一套成熟的ORM框架,而且 Hibernate 实现了JPA规范,所以也可以称 hibernate 为 JPA 的一种实现方式,我们使用 JPA 的 API 编程,意味着站在更高的角度上看待问题(面向接口编程)
  3. Spring Data JPA 是 Spring 提供的一套对JPA操作更加高级的封装,是在JPA规范下的专门用来进行数据持久化的解决方案

2、SpringBoot 集成 JPA

1、pom.xml导入依赖

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </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>
    </dependencies>

2、application.properties配置数据源信息

# 数据库配置信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/springdata_jpa?useSSL=false&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

# 控制台打印SQL
spring.jpa.show-sql=true
# 格式化SQL
spring.jpa.properties.hibernate.format_sql=true
# 自动建表模式:create-drop,create,update,validate,none
spring.jpa.hibernate.ddl-auto=update
# 建表使用MyISAM引擎,默认是InnoDB
# spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect

3、新建User实体类

@Data
@Entity
@Table(name = "sys_user")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String username;
    private String password;
}

4、编写Dao接口

// 接口内可以什么也不写
public interface UserRepository extends JpaRepository<User, Long> {
}

5、测试

@SpringBootTest
public class JpaApplicationTests {
    @Autowired
    private UserRepository userRepository;

    /**
     * @Transactional: 开启事物(事务提交方式默认的是回滚)
     * @Rollback(false): 取消自动回滚
     * 为什么加@Rollback(false),可以参考SpringData JPA 之疑难杂症=》SpringBoot Junit事物自动回滚
     */
    @Test
    @Transactional
    @Rollback(false)
    public void save() {
        User user = new User();
        user.setUsername("admin");
        user.setPassword("password");
        userRepository.save(user);
    }

    @Test
    public void find(){
        System.out.println(userRepository.findAll());
        System.out.println(userRepository.findById(1L));
    }
}

查看日志:

Hibernate: 
    insert 
    into
        sys_user
        (age, password, username) 
    values
        (?, ?, ?)
Hibernate: 
    select
        user0_.id as id1_1_,
        user0_.age as age2_1_,
        user0_.password as password3_1_,
        user0_.username as username4_1_ 
    from
        sys_user user0_
[User(id=1, username=admin, password=password, age=18)]
Hibernate: 
    select
        user0_.id as id1_1_0_,
        user0_.age as age2_1_0_,
        user0_.password as password3_1_0_,
        user0_.username as username4_1_0_ 
    from
        sys_user user0_ 
    where
        user0_.id=?
User(id=1, username=admin, password=password, age=18)

PS:SpringBoot启动类默认可以不加@EnableJpaRepositories(basePackages=“com.xxx”)扫描JPA包,与SpringBoot扫描包类似。

3、SpringDataJPA 整合 H2

1、使用IDEA创建SpringBoot项目

2、导入依赖 pom.xml

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.2</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <!-- 可以不配置版本号,默认就是最新版本 -->
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
            <!--<version>1.4.200</version>-->
        </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>
    </dependencies>

2、application.properties配置

#################### H2 数据库配置 ####################
# 文件数据库
# spring.datasource.url = jdbc:h2:file:./dbh2/dbc2m;AUTO_SERVER=TRUE
# 内存数据库,platform #表明使用的数据库平台是 h2
spring.datasource.url = jdbc:h2:mem:test_jpa
spring.datasource.driverClassName = org.h2.Driver
spring.datasource.username = sa
spring.datasource.password = sa
spring.datasource.platform = h2

#################### H2 Web Console设置 ####################
# enabled:程序开启时就会启动 H2 Web Console, 默认就是启动的
# path:配置访问地址为:/h2,访问 H2 Web Console,默认:/h2-console
# settings.web-allow-others:开启H2 Web Console远程访问,默认为false不开启只能在本机访问
spring.h2.console.enabled = true
spring.h2.console.path = /h2
spring.h2.console.settings.web-allow-others = true

#################### JPA 配置 ####################
# 控制台打印SQL、格式化SQL、设置ddl模式(如果数据库是内存模式,ddl-auto配置没有什么作用)、设置方言
spring.jpa.show-sql = true
spring.jpa.properties.hibernate.format_sql = true
spring.jpa.hibernate.ddl-auto = update
spring.jpa.database-platform = org.hibernate.dialect.H2Dialect

3、其他启动和测试一样的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值