데이터베이스 액세스는 웹 응용 프로그램의 필수적인 부분입니다. 오늘날 가장 일반적인 데이터베이스 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
다음의 증가에 오픈 소스 매퍼 스프링 부팅 - 스타터의 기초 :
- 같은 JSON의 형식 목록에서 MySQL 데이터베이스과 PostgreSQL 데이터베이스에 대한 일부 Java 유형 및 변환 처리 클래스의 데이터베이스 유형을 추가,지도 종류와 MySQL 데이터베이스 변환 과정
- 도메인 매퍼 서비스, 컨트롤러 레이어의 기본적인 CRUD 범용 기능 층을 캡슐화
- 그것은 연결 풀을 기반으로 드루이드의 자동 구성을 제공합니다
- 기타 조정, 복잡한 특성 매핑 등의 기본 치료의 간단한 형식으로 열거, (주로 목록,지도 유형은 다른 유형의 사용자 정의 변환 처리 클래스를 정의해야)
- 그것은 부모 프로젝트, 실제 프로젝트 상속 부모에 의존하는 구성 단순화의 통합 (지속적으로 업데이트 사운드)에 대한 몇 가지 일반적인 프레임 워크를 제공합니다
이 프레임 워크는 실제 프로젝트 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 파일 구성
데이터베이스의 프레임 워크 프로젝트를 소개하는 세 가지 방법이 있습니다 :
- 직접 소개 cn.jboost.springboot : tkmapper 스프링 부팅 - 스타터 (하지 연결 풀)
- 직접 소개 cn.jboost.springboot : 드루이드 스프링 부팅 - 스타터 (드루이드 연결 풀 지원)
- 봄 부팅 부모 (드루이드 연결 풀을 사용하여) : 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. 테스트 실행
-
이것은 새로운 사용자 기기 테스트 기준 중 두 가지 예 제공
SpringbootTkmapperApplicationTests
클래스 -
, 실행 메인 클래스에서 직접 실행 한 다음 브라우저 열기 에 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
----------------------------------------
나는 마이크로 채널 대중 번호, 최신 공유에 대한 적절한 액세스에 대한 관심을 환영합니다