SpringDataJPA-02-JPA 입문 사례

38374 단어 spring자바
목차
  • ORM

  • Hibernate,JPA,SpringDataJpaJPA 입문 안 열★JPA 의 API 소개
    getOne 과 findOne 의 비교JPQL 의 기본 사용specification 의 기본 사용example 의 기본 사용

  • 멀 티 탭 디자인
    표 간 의 구분
    분석 절차
    다 중 표 디자인(한 쌍 이 많다)
  • 다 중 표 디자인(한 쌍 이 많다)
    대상 내 비게 이 션 조회
    JPA 입문 안 열
    수요 소개
    『8195』우리 가 실현 하 는 기능 은 한 고객 을 데이터 뱅 크 의 고객 표 에 저장 하 는 것 이다.
    데이터베이스 만 들 기
     /*     */
        CREATE TABLE cst_customer (
            cust_id bigint(32) NOT NULL AUTO_INCREMENT COMMENT '    (  )',
            cust_name varchar(32) NOT NULL COMMENT '    (    )',
            cust_source varchar(32) DEFAULT NULL COMMENT '      ',
            cust_industry varchar(32) DEFAULT NULL COMMENT '      ',
            cust_level varchar(32) DEFAULT NULL COMMENT '    ',
            cust_address varchar(128) DEFAULT NULL COMMENT '      ',
            cust_phone varchar(64) DEFAULT NULL COMMENT '      ',
            PRIMARY KEY (`cust_id`)
        ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
    

    가 져 오기 의존
    <parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>2.3.1.RELEASEversion>
        <relativePath/> 
    parent>
    
    <properties>
        <java.version>1.8java.version>
    properties>
    
    <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starterartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-data-jpaartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-jdbcartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
    
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
            <scope>runtimescope>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-configuration-processorartifactId>
            <optional>trueoptional>
        dependency>
        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
            <optional>trueoptional>
        dependency>
    
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintagegroupId>
                    <artifactId>junit-vintage-engineartifactId>
                exclusion>
            exclusions>
        dependency>
        <dependency>
            <groupId>com.alibabagroupId>
            <artifactId>druid-spring-boot-starterartifactId>
            <version>1.1.20version>
        dependency>
    dependencies>
    project>
    

    프로필
    spring:
      datasource:
        username: jiang
        password: jiang
        url: jdbc:mysql://localhost:3306/learn?characterEncoding=UTF-8&serverTimezone=UTC
        type: com.alibaba.druid.pool.DruidDataSource
        initialSize: 5
        minIdle: 5
        maxActive: 20
        maxWait: 60000
        timeBetweenEvictionRunsMillis: 60000
        minEvictableIdleTimeMillis: 30000
        validationQuery: select 'x';
        testWhileIdle: true
        testOnBorrow: false
        testOnReturn: false
        poolPreparedStatements: true
        maxPoolPreparedStatementPerConnectionSize: 20
        filters: stat,wall,slf4j
        connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
        useGlobalDataSourceStat: true
      jpa:
        hibernate:
          #            ,create:           (    ,       ); update:        (    ,    ); none:     
          ddl-auto: update
        show-sql: true #     SQ
    
    
    logging:
      level:
        top.codekiller.test.testspringdataone: debug
    
    

    실체 류
  • @Entity

  • 『8195』역할:현재 클래스 를 실체 클래스 로 지정 합 니 다.
  • @Table

  • 『8195』역할:실체 류 와 표 간 의 대응 관 계 를 지정 합 니 다.
    속성:name:데이터베이스 시트 의 이름 을 지정 합 니 다.
  • @Id

  • *8195:현재 필드 를 주 키 로 지정 합 니 다.
  • @GeneratedValue

  • *8195:메 인 키 의 생 성 방식 을 지정 합 니 다.
    속성:strategy:메 인 키 생 성 전략 을 지정 합 니 다.Generation Type 매 거 진 을 통 해 값 을 얻 을 수 있 습 니 다.
  • @Column

  •   작용:실체 류 속성 과 데이터베이스 테이블 간 의 대응 관 계 를 지정 합 니 다.
    속성:
    *8195*8195*name:데이터베이스 시트 의 열 이름 을 지정 합 니 다.
       unique:유일 하 게
       nullable:비어 있 을 수 있 습 니까?
    삽입 가능 여부
    업데이트 가능 여부
       columnDefinition:테이블 을 만 들 때 이 열 을 만 드 는 DDL 을 정의 합 니 다.
       secondary Table:시계 이름 에서.이 열 이 주 표 에 세 워 지지 않 으 면(기본 값 은 주 표 에 세 워 집 니 다)이 속성 은 표 의 이름 으로 개발 환경 을 만 드 는 것 을 정의 합 니 다[중점]
    package top.codekiller.test.testspringdataone.pojo;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    import javax.persistence.*;
    /**
     * @author codekiller
     * @date 2020/6/27 20:49
     * @Description      
     */
    @Entity
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @Table(name="cst_customer")
    public class Customer {
    
        /**
         *     (  )
         */
        @Id
        @GeneratedValue(strategy= GenerationType.IDENTITY) //    ,   Auto
        @Column(name="cust_id")  //        ,        
        private Long custId;
    
        /**
         *     (    )
         */
        @Column(name="cust_name")
        private String custName;
    
        /**
         *       
         */
        @Column(name="cust_source")
        private String custSource;
    
        /**
         *       
         */
        @Column(name="cust_industry")
        private String custIndustry;
    
        /**
         *     
         */
        @Column(name="cust_level")
        private String custLevel;
    
        /**
         *       
         */
        @Column(name="cust_address")
        private String custAddress;
    
        /**
         *       
         */
        @Column(name="cust_phone")
        private String custPhone;
    }
    

    예금 류
    spring 통합 이 적용 되 지 않 으 면 Repository 를 만 들 필요 가 없습니다.이 단 계 는 건 너 뛸 수 있 습 니 다.
    @Repository
    public interface  CustomerRepository extends JpaRepository<Customer,Long>, JpaSpecificationExecutor<Customer> {
    }
    

    JpaRepository:기본 CRUD 조작Jpa SpecificationExecutor:복잡 한 CRUD 작업,예 를 들 어 페이지조작 하 다.
    데이터 추가
    spring 통합 이 적용 되 지 않 습 니 다(Repository 를 만 들 필요 가 없습니다)
    /**
    *          ,  Persistence       
    *                ,  jpa       
    */
    EntityManagerFactory factory = Persistence.createEntityManagerFactory("myJpa");
    //       
    EntityManager em = factory.createEntityManager();
    //      
    EntityTransaction tx = em.getTransaction();
    //    
    tx.begin();
    Customer c = new Customer();
    c.setCustName("    ");
    //    
    em.persist(c);
    //    
    tx.commit();
    //    
    em.close();
    factory.close();
    

    spring 통합 작업
    @Autowired
    private CustomerRepository customerRepository;
    
    /**
    * @Description     
    * @date 2020/6/27 22:52
    * @return void
    */
    @Test
    @Transactional(rollbackFor = Exception.class)
    public void testSave(){
        Customer customer=new Customer();
        customer.setCustId(null);
        customer.setCustName("   ");
        customer.setCustIndustry("  ");
        //  
        this.customerRepository.save(customer);
    }
    

    조회 데이터
    @Test
    public void testQuery(){
        Optional<Customer> optional = this.customerRepository.findById(1L);
        System.out.println(optional.get());
    }
    

    기본 업데이트
    @Test
    public void testUpdate(){
        Customer customer=new Customer();
        customer.setCustId(2L);
        customer.setCustName("     ");
        this.customerRepository.save(customer);
    }
    

    기본 삭제
    @Test
    public void testDelete(){
        this.customerRepository.deleteById(3L);
    }
    

    좋은 웹페이지 즐겨찾기