美文网首页Spring Boot 从入门到上瘾程序员Spring Boot
SpringBoot 快速整合SpringDataJPA (基础

SpringBoot 快速整合SpringDataJPA (基础

作者: 一只袜子 | 来源:发表于2017-10-06 23:30 被阅读649次

    序言:
    SpringDataJPA秉承大道至简的设计理念,给我们的数据层开发带来的极大的便利。诸如基于注解就可完成实体-数据库的映射关系,提供自带的通用Repo接口、接口方法约定名称即可实现数据访问等特性都是值得称赞的功能。

    正文:Spring Data JPA 实战步骤

    1.引入依赖

    在pom.xml 中添加ORM框架(JPA)和数据库驱动(MySQL-Conn)的依赖。

    <?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <!--继承信息 -->
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.0.M4</version>
            <relativePath/>
        </parent>
        
        <!--依赖管理 -->
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <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.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </project>
    
    

    2. 添加数据源

    在application.yml 添加数据源信息,具体如下:

    spring:
      datasource:
        url: jdbc:mysql://localhost:3306/socks?useSSL=false
        username: root
        password: root
        driver-class-name: com.mysql.jdbc.Driver
    

    3. 编写数据层代码

    —— 以前我们自己定制模板
    在此之前,我们往往需要自行设计通用仓库的接口并添加对应的实现,这样做的目的是,方便让每个子仓库中继承这个通用模板,以减少我们重复的代码量。
    —— 现在我们直接使用模板
    这种跟业务无关的东西,通用性极高,符合约定大于配置的理念。所以SpringDataJPA 直接为我们提供了通用仓库的接口(JpaRepository)并添加了对应的实现(SimpleJpaRepository)。

    具体代码:
    在仓库中添加用户接口,然后继承通用仓库接口JpaRepository,即可获得通用的增删改查功能。例如findAll 、getOne 等常用方法。

    public interface UserRepository extends JpaRepository<User, String> {
    
        List<User> findByUsername(String username);
    }
    

    注:SpringDataJPA 的亮点其实并不只有通用仓库这么简单,例如接口方法约定名称即可完成数据访问也是一个大道至简的设计体现,更多细节和亮点可查阅 Spring Data JPA 参考指南

    4. 添加数据库记录

    在Navicat 连接本地数据库,随便打开查询窗口,然后执行脚本内容,如下:

    DROP DATABASE IF EXISTS `socks`;
    CREATE DATABASE `socks`;
    USE `SOCKS`;
    DROP TABLE IF EXISTS `t_user`;
    CREATE TABLE `t_user` (
      `USER_ID` varchar(50) ,
      `USERNAME` varchar(50) ,
      `PASSWORD` varchar(50) 
    ) ;
    
    INSERT INTO `t_user` VALUES ('1', 'admin', 'admin');
    INSERT INTO `t_user` VALUES ('2', 'yizhiwazi', '123456');
    

    5. 启动项目

    在启动项目前,记得先添加好数据库socks和用户表t_user ,并插入几条测试数据。准备好数据后,启动项目,测试相关接口。

    @SpringBootApplication
    @EnableJpaRepositories("com.hehe.repository") //指定仓库的扫描路径
    public class JpaApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(JpaApplication.class, args);
        }
    }
    

    6. 单元测试

    import static org.assertj.core.api.Assertions.assertThat;
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class JpaApplicationTest {
        @Autowired
        UserRepository userRepository;
        @Test
        public void testuser() {
            //添加测试数据
            userRepository.save(new User("1111","test-data-jpa","first-pass"));
            userRepository.save(new User("9527","test-data-jpa","second-pass"));
            //开始进行测试
            assertThat(userRepository.existsById("9527")).isEqualTo(true);
            assertThat(userRepository.findByUsername("test-data-jpa").size()).isEqualTo(2);
        }
    }
    

    文档资料

    源码下载:SpringDataJPA+通用CRUD+实战示例

    专题阅读:《SpringBoot 布道系列》

    相关文章

      网友评论

      • IOLO_鑫鑫向上:请问老师,复杂的SQL怎么办,结合SQLserver如何?
        一只袜子:@IOLO_鑫鑫向上 部分是需要改的 例如分页
        IOLO_鑫鑫向上:@yizhiwazi 复杂的SQL就是拼SQL字符串吧,我现在就想,结合SQLServer做,以后要换MySQL,所以我就只想更改数据源,对逻辑语句不做更改,这样做可行吗
        一只袜子:复杂的SQL可以使用原生SQL来查询 也可以继续使用内置的条件查询来做 但是需要一定的能力

      本文标题:SpringBoot 快速整合SpringDataJPA (基础

      本文链接:https://www.haomeiwen.com/subject/rsytyxtx.html