항목에서 전투에 봄 부팅 : 일반적으로 통합 단순화 된 단일 테이블 작업 매퍼

데이터베이스 액세스는 웹 응용 프로그램의 필수적인 부분입니다. 오늘날 가장 일반적인 데이터베이스 ORM 프레임 워크는 최대 절전 모드와 MyBatis로는, Hibernate는 전통적인 IT 기업의 사용보고, MyBatis로 인터넷 기업에 더 자주 사용된다. 일반 매퍼 ( https://github.com/abel533/Mapper)  일반적인 방법으로 구현 된 단일 테이블을 검색 변경됩니다 MyBatis로, 추가 또는 삭제의 SQL 오픈 소스 프레임 워크가 작성 줄이기 위해, 또한 오픈 소스 매퍼 스프링 부팅이 있음을 기반으로 -starter 제공. 이를 바탕으로, 우리는 재사용의 큰 정도를 달성하기 위해, 특화된 콘텐츠를 추가했다.

프레임 워크의 소스 주소 : https://github.com/ronwxy/base-spring-boot  (지속적으로 개선하기 위해 업데이트는 다음과 스타를 환영)
데모 소스 주소 : https://github.com/ronwxy/springboot-demos/tree/ 마스터 / springboot-tkmapper

다음의 증가에 오픈 소스 매퍼 스프링 부팅 - 스타터의 기초 :

  1. 같은 JSON의 형식 목록에서 MySQL 데이터베이스과 PostgreSQL 데이터베이스에 대한 일부 Java 유형 및 변환 처리 클래스의 데이터베이스 유형을 추가,지도 종류와 MySQL 데이터베이스 변환 과정
  2. 도메인 매퍼 서비스, 컨트롤러 레이어의 기본적인 CRUD 범용 기능 층을 캡슐화
  3. 그것은 연결 풀을 기반으로 드루이드의 자동 구성을 제공합니다
  4. 기타 조정, 복잡한 특성 매핑 등의 기본 치료의 간단한 형식으로 열거, (주로 목록,지도 유형은 다른 유형의 사용자 정의 변환 처리 클래스를 정의해야)
  5. 그것은 부모 프로젝트, 실제 프로젝트 상속 부모에 의존하는 구성 단순화의 통합 (지속적으로 업데이트 사운드)에 대한 몇 가지 일반적인 프레임 워크를 제공합니다

이 프레임 워크는 실제 프로젝트 springboot에 기초하여 사용될 수 있고, 단순히 데이터 소스를 구성, 및 풀 사제 매퍼 연결 공통 기능, 층 기본 CRUD 방법으로 도입 될 수있다.

어떻게 사용 하는가?
절차는 다음과 같다, 참조 예 : https://github.com/ronwxy/springboot-demos/tree/master/springboot-tkmapper

1. 배포 장착 프레임 받는다는

소스 프레임을 다운로드 한 후, 실행 프로젝트 루트 경로 mvn clean install로컬 라이브러리 받는다는에 장착 될 수있다. 당신이 공유하고 넥서스 PW을해야하는 경우, 루트 경로에서의 pom.xml 파일 추가 distributionManagement사용, 구성, 지정 창고 유통 넥서스 주소를 mvn clean deploy같은 원격 메이븐 저장소에 설치

< distributionManagement > 
     < 저장소 > 
         < ID > 넥서스 출시 </ ID > 
         < URL > 
             에 http : // IP : 포트 / 저장소 / 받는다는 - 릴리스 / 
         </ URL > 
     </ 저장소 > 
     < snapshotRepository > 
         < ID > 넥서스 스냅 샷 </ ID > 
         < URL > 
             에 http : // IP : 포트 / 저장소 / 받는다는 - 스냅 샷 / 
         </ URL > 
     </ snapshotRepository >
 </distributionManagement >

 

지정 계좌 저장소 필요한 구성을 가져야 같은 모든 Settings.XML이 받는다는 프로필 (ID가 요구들이 대응) 

 < 서버 > 
   < 서버 > 
     < ID > 넥서스 스냅 샷 </ ID > 
     < 이름 > 관리자 </ 이름 > 
     < 비밀번호 > XXX </ 암호 > 
   </ 서버 > 
< 서버 > 
     < ID > 넥서스 출시 </ ID > 
     < 사용자 이름 > 관리자 </ 이름 > 
     < 비밀번호 >XXX </암호 > 
   </ 서버 > 
 </ 서버 >

 

2. pom.xml 파일 구성

데이터베이스의 프레임 워크 프로젝트를 소개하는 세 가지 방법이 있습니다 :

  1. 직접 소개 cn.jboost.springboot : tkmapper 스프링 부팅 - 스타터 (하지 연결 풀)
  2. 직접 소개 cn.jboost.springboot : 드루이드 스프링 부팅 - 스타터 (드루이드 연결 풀 지원)
  3. 봄 부팅 부모 (드루이드 연결 풀을 사용하여) : cn.jboost.springboot 프로젝트 상속

다음과 같이 세 가지의 pom.xml 배치

#第一种方式
 < 의존성 > 
   < 의 groupId > cn.jboost.springboot </ 의 groupId > 
   < artifactId를 > tkmapper 스프링 부팅 스타트 </ artifactId를 > 
   < 버전 > 1.2 SNAPSHOT </ 버전 > 
</ 의존성 > 

#第二种方式
< 의존성 > 
   < 의 groupId > cn.jboost.springboot </ 의 groupId > 
   < artifactId를 > 사제 스프링 부팅 스타트 </ artifactId를> 
   < 버전 > 1.2 SNAPSHOT </ 버전 > 
</ 의존성 > 

#第三种方式
< 부모 > 
   < 의 groupId > cn.jboost.springboot </ 의 groupId > 
   < artifactId를 > 스프링 부팅 부모 </ artifactId를 > 
   < 버전 > 1.2 SNAPSHOT </ 버전 > 
   < relativepath를 />  <! - 저장소에서 룩업 상위 -> 
</ 부모 >

 

드라이브에 의존하는 MySQL의 또는 PostgreSQL의 도입의 경우 (캐스트와 다른 데이터베이스 지원을 작성, 테스트하지)

 

구성 데이터 소스

드루이드 연결 풀, 다음 application.yml 구성 파일, 다음 데이터 소스 구성을 추가하는 경우 (권장)

봄 : 
  데이터 소스 : 
    드루이드 : 
      드라이버 클래스 이름 : com.mysql.jdbc.Driver의 
      URL : JDBC를 : MySQL은 : // localhost를 :? 3306 / = 사실 autoReconnect 테스트에 & useUnicode = true로 & characterEncoding = UTF-8 
      이름 : 루트 
      암호 : 
      # 사용자 지정 구성 
      initialSize가 2 # 초기 크기 
      minIdle 1 # 최소 연결 
      maxActive 5 # 최대 연결 
      druidServletSettings : 
        허용은 : 127.0.0.1 
        : 거부 
        loginUsername을 : ADMIN 
        loginPassword을 :는 passw0rd 
        resetEnable : 참으로 
      druidFilterSettings : 
        제외 : '*의 .js, * GIF ,. * .JPG, *. PNG * . CSS *. ICO / 사제 / * '
      maxWait : 초과 시간을 기다리는 접속을 얻기 60000 # 구성 
      timeBetweenEvictionRunsMillis : 60000 # 간격 등의 검출 빈도가 유휴 연결 밀리 폐쇄 될 검출 
      minEvictableIdleTimeMillis : 300000 # 풀 생존의 최소 연결 시간을 구성 단위는 MS 
      validationQuery 다음 SELECT 'X' 
      testWhileIdle는 : 참으로 
      testOnBorrow : false로 
      testOnReturn : False로 
      참 PSCache 개방 # 및 각 연결 PSCache 사이즈 지정 poolPreparedStatements 
      maxPoolPreparedStatementPerConnectionSize : 20이다 
      합계 # 벽 후 (벽 코드를 추가하는 것은 직접적으로 접합 될 수있는 SQL은 사제 검사 SQL 인젝션을 갖는) 구성 모니터링 통계 번호 인터셉트 필터 제거 : 필터 SQL 모니터링 인터페이스는 방화벽을 위해, '벽'을 정량화 할 수 없다
      ConnectionProperties와 : druid.stat.mergeSql = TRUE; druid.stat.slowSqlMillis = 5000 # mergeSql connectProperties 특성 함수에 의해 개방, 느린 SQL 레코드 
      useGlobalDataSourceStat : 참 # 모니터링 데이터 DruidDataSource 복수의 병합

 

어떤 연결 풀 경우, 구성으로, 비교적 간단하다 

봄 : 
  데이터 소스 : 
    URL : JDBC한다 : mysql : // localhost를 : 3306 / 테스트 autoReconnect = TRUE & useUnicode = TRUE & characterEncoding = UTF-8 
    이름 : 루트 
    암호 : 
    드라이버 클래스 이름 : com.mysql.jdbc.Driver

 

4. 적절한 도메인을 정의 맵퍼, 서비스, 컨트롤러 레이어 개체 

데모에, 예를 들어, 도메인은 사용자 클래스는 정의 (스크립트 데모 데이터베이스 리소스 / schema.sql 참조)

@Table (이름 = "사용자") 
@Getter 
@Setter 
@ToString 
공용 클래스 사용자는 AutoIncrementKeyBaseDomain 확장 < 정수 > { 
    개인 문자열 이름; 
    @ColumnType (jdbcType = JdbcType.CHAR) 
    개인 성별 성별; 
    개인 목록 < 문자열 > 찬성; 
    개인지도 < 문자열 , 문자열 > 주소; 

    공공 열거 성별 { 
        M, 
        F 
    } 
}

 

우리는 추가 할 필요가 @Table상속을 통해, 데이터베이스 테이블의 이름을 지정 주석을 AutoIncrementKeyBaseDomain증가 기본 키를 달성하기 위해, 또는 UUIDKeyBaseDomain사용자 정의 기본 키 다른 유형의 상속 된 경우, UUID 기본 키를 달성하기 위해 BaseDomain

구현 서비스 프레임 워크 레이어 일반 방법 BaseService만이 기본 키의 조합을 지원하지 않습니다, 하나의 기본 키를 지원 (기본 키 조합은 권장하지 않음)

기본 목록,지도 및 기타 복잡한 속성에 대한 프레임 워크 속성이지도를 필요로하지 않는 경우, MySQL의 또는 PostgreSQL을의 형태 JSON 형식을 jsonb에 매핑되는, 노트 @Transient 추가 할 수 있습니다 열거 유형 jdbcType 지정 @ColumnType를 추가 할 수 있습니다.

DAO 계층 정의 UserMapper,

@Repository 
공용 인터페이스의 UserMapper를 확장 BaseMapper < 사용자 > { 
}

 

BaseMapper단일 테이블 추가 및 삭제의 기본 구현은 복잡한 쿼리의 정의는 인터페이스에서 정의 할 수 있습니다하십시오. 검색 및 대량 삽입 및 기타 기능을 변경 한 다음 매퍼 XML 파일에 의해 달성하기 위해 준비합니다. 

서비스 계층을 정의  UserService상속 BaseService공통 기능 (특정 소스 참조), 동일한 방법이 클래스에서 정의 할 수있다

@Service 
(가) BaseService 확장 UserService 공용 클래스 < 정수 , 사용자 > { 

    @Transactional 
    {공공 무효의 createWithTransaction (사용자 사용자) 
        (사용자)를 만들기를, 
        테스트 거래 // 
        새로운 RuntimeException을 던져 ( "예외가 발생되도록 데이터베이스 롤백의 전면 "); 
    } 
}

 

컨트롤러 레이어에서 정의  UserController상속 BaseController공통 인터페이스 (특정 소스 참조) 

@RestController 
@RequestMapping ( "/ 사용자") 
공용 클래스 UserController이 BaseController를 확장 < 정수 , 사용자 > { 
}

 

이와 같이, 각각의 층은 단지 대응하는 인터페이스 또는 클래스를 정의하는 데 필요하거나 인터페이스를 상속 클래스, 사용자가 기본 CRUD 기능 완료 코드 특정 구현의 하나 개의 라인을 쓸 필요가 없다. 

5. 테스트 실행

  1. 이것은 새로운 사용자 기기 테스트 기준 중 두 가지 예 제공 SpringbootTkmapperApplicationTests클래스

  2. , 실행 메인 클래스에서 직접 실행 한 다음 브라우저 열기  에 http : // localhost를 : 8080 / 사용자가  생성 한 단위 테스트 사용자 (다른 인터페이스 참조 나열 할 수 있습니다 BaseController구현)

6. 요약

이 문서에서는 프레임 워크를 기반으로 설명 tk.mybatis:mapper-spring-boot-starter재사용의 큰 정도를 달성하기 위해 몇 가지 사용자 지정 확장을하고. 실제 프로젝트 개발에 사용할 수 있습니다, 당신은 문제가 발생할 경우 과정은 대중 번호 피드백에 대해 우려 할 수있다.




내 개인 블로그 주소 : http://blog.jboost.cn
내 주요 공간 :  https://www.toutiao.com/c/user/5833678517/#mid=1636101215791112
내 GitHub의 주소 : HTTPS : // GitHub의 .COM / ronwxy
내 마이크로 채널 대중 번호 : jboost-ksxy

----------------------------------------

마이크로 채널 공개 수
나는 마이크로 채널 대중 번호, 최신 공유에 대한 적절한 액세스에 대한 관심을 환영합니다

추천

출처www.cnblogs.com/spec-dog/p/11080741.html