• Spring Boot Sample 017之spring-boot-data-crudrepository


    一、环境

    • Idea 2020.1
    • JDK 1.8
    • maven

    二、目的

    spring boot整合crudrepository。

    三、步骤

    3.1、点击File -> New Project -> Spring Initializer,点击next

    3.2、在对应地方修改自己的项目信息

     3.3、选择Web依赖,选中Spring Web、Spring Data JDBC、H2 DataBase。可以选择Spring Boot版本,本次默认为2.2.6,点击Next

    3.4、项目结构

    四、添加文件

    pom.xml文件
    <?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.2.6.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>org.ouyushan</groupId>
        <artifactId>spring-boot-data-crudrepository</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>spring-boot-data-crudrepository</name>
        <description>Crudrepository project for Spring Boot</description>
    
        <properties>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jdbc</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>com.h2database</groupId>
                <artifactId>h2</artifactId>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
                <exclusions>
                    <exclusion>
                        <groupId>org.junit.vintage</groupId>
                        <artifactId>junit-vintage-engine</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>
    数据库表结构文件schema.sql
    CREATE TABLE CUSTOMER (
      ID             INTEGER IDENTITY PRIMARY KEY,
      FIRST_NAME     VARCHAR(30),
      DATE_OF_BIRTH  DATE
    );
    数据库记录文件data.sql
    INSERT INTO CUSTOMER (ID, FIRST_NAME, DATE_OF_BIRTH) values (1, 'Meredith', '1998-07-13');
    INSERT INTO CUSTOMER (ID, FIRST_NAME, DATE_OF_BIRTH) values (2, 'Joan', '1982-10-29');
    
    
    Customer.java
    package org.ouyushan.springboot.data.crudrepository.entity;
    
    import org.springframework.data.annotation.Id;
    
    import java.time.LocalDate;
    
    /**
     * @Description:
     * @Author: ouyushan
     * @Email: ouyushan@hotmail.com
     * @Date: 2020/5/7 17:34
     */
    public class Customer {
    
        @Id
        private Long id;
    
        private String firstName;
    
        private LocalDate dateOfBirth;
    
        public Long getId() {
            return id;
        }
    
        public void setId(Long id) {
            this.id = id;
        }
    
        public String getFirstName() {
            return firstName;
        }
    
        public void setFirstName(String firstName) {
            this.firstName = firstName;
        }
    
        public LocalDate getDateOfBirth() {
            return dateOfBirth;
        }
    
        public void setDateOfBirth(LocalDate dateOfBirth) {
            this.dateOfBirth = dateOfBirth;
        }
    }
    
    
    CustomerRepository.java
    package org.ouyushan.springboot.data.crudrepository.repository;
    
    import org.ouyushan.springboot.data.crudrepository.entity.Customer;
    import org.springframework.data.jdbc.repository.query.Query;
    import org.springframework.data.repository.CrudRepository;
    import org.springframework.data.repository.query.Param;
    
    import java.util.List;
    
    /**
     * @Description:
     * @Author: ouyushan
     * @Email: ouyushan@hotmail.com
     * @Date: 2020/5/7 17:34
     */
    public interface CustomerRepository extends CrudRepository<Customer, Long> {
    
        @Query("select id, first_name, date_of_birth from customer where upper(first_name) like '%' || upper(:name) || '%' ")
        List<Customer> findByName(@Param("name") String name);
    
    }
    
    
    CustomerController.java
    package org.ouyushan.springboot.data.crudrepository.controller;
    
    import org.ouyushan.springboot.data.crudrepository.entity.Customer;
    import org.ouyushan.springboot.data.crudrepository.repository.CustomerRepository;
    import org.springframework.transaction.annotation.Transactional;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.List;
    
    /**
     * @Description:
     * @Author: ouyushan
     * @Email: ouyushan@hotmail.com
     * @Date: 2020/5/7 17:36
     */
    @RestController
    public class CustomerController {
    
        private final CustomerRepository customerRepository;
    
        // 构造注入
        public CustomerController(CustomerRepository customerRepository) {
            this.customerRepository = customerRepository;
        }
    
        @GetMapping("/")
        @Transactional(readOnly = true)
        public List<Customer> customers(@RequestParam String name) {
            return this.customerRepository.findByName(name);
        }
    }
    
    
    README.md
    # spring-boot-data-crudrepository
    springboot中CrudRepository的使用
    
    * 继承CrudRepository   编写Repository 接口类,使用@Query注解编写查询语句
    * 在Controller中通过构造函数注入Repository接口
    
    1.Spring Data JPA可以极大地简化JPA的写法,在几乎不用写接口实现的情况下完成对数据的访问和操作。
    
    2.Spring Data通过提供Repository接口来约定数据访问的统一标准。
    
    3.Repository接口下包含一些常用的子接口:
    
       CrudRepository、PagingAndSortingRepository、JpaRepository
    
       JpaRepository,它继承自PagingAndSortingRepository,而PagingAndSortingRepository又继承自CrudRepository。
    每个都有自己的功能:
       CrudRepository提供CRUD的功能。
       PagingAndSortingRepository提供分页和排序功能
       JpaRepository提供JPA相关的方法,如刷新持久化数据、批量删除。
       由于三者之间的继承关系,所以JpaRepository包含了CrudRepository和PagingAndSortingRepository所有的API。
    
    4.在进行spring boot 项目的开发中,开发者只需要定义自己项目的数据访问接口,然后实现Spring Data提供的这些接口,就可以实现对数据的CRUD操作。
    ```
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jdbc</artifactId>
            </dependency>
            <dependency>
                <groupId>com.h2database</groupId>
                <artifactId>h2</artifactId>
                <scope>runtime</scope>
            </dependency>
    ```
    
    Spring Boot可以自动配置嵌入式H2、HSQL和Derby数据库。
    您不需要提供任何连接url,您只需要包含对希望使用的嵌入式数据库的构建依赖项。
    
    默认数据源:HikariCP,其次Tomcat pooling DataSource,再次Commons DBCP2
    
    默认采用h2数据库,在resources中定义以下文件
    schema.sql      定义数据表
    ```
    CREATE TABLE CUSTOMER (
      ID             INTEGER IDENTITY PRIMARY KEY,
      FIRST_NAME     VARCHAR(30),
      DATE_OF_BIRTH  DATE
    );
    ```
    
    data.sql    定义数据
    ```
    INSERT INTO CUSTOMER (ID, FIRST_NAME, DATE_OF_BIRTH) values (1, 'Meredith', '1998-07-13');
    INSERT INTO CUSTOMER (ID, FIRST_NAME, DATE_OF_BIRTH) values (2, 'Joan', '1982-10-29');
    ```
    
    
    http://localhost:8080/?name
    ```
    [
    {
    "id": 1,
    "firstName": "Meredith",
    "dateOfBirth": "1998-07-13"
    },
    {
    "id": 2,
    "firstName": "Joan",
    "dateOfBirth": "1982-10-29"
    }
    ]
    ```
    
    http://localhost:8080/?name=Joan
    ```
    [{"id":2,"firstName":"Joan","dateOfBirth":"1982-10-29"}]
    ```

    五、测试

    http://localhost:8080/?name
    [
    {
    "id": 1,
    "firstName": "Meredith",
    "dateOfBirth": "1998-07-13"
    },
    {
    "id": 2,
    "firstName": "Joan",
    "dateOfBirth": "1982-10-29"
    }
    ]
    http://localhost:8080/?name=Joan
    [{"id":2,"firstName":"Joan","dateOfBirth":"1982-10-29"}]
  • 相关阅读:
    迭代器
    【转】javascript中this的四种用法
    【转】CSS(10)盒子模型
    【转】深入理解JVM—JVM内存模型
    【转】深入JVM系列(一)之内存模型与内存分配
    【转】[译]深入理解JVM
    【转】C#中virtual和abstract的区别
    【转】面向对象设计的SOLID原则
    【转】Building a RESTful Web Service
    【转】设计模式:简单工厂、工厂方法、抽象工厂之小结与区别
  • 原文地址:https://www.cnblogs.com/ouyushan/p/13030879.html
Copyright © 2020-2023  润新知