Spring Boot 2 입문 부터 실전 까지: 유 니 버 설 Mapper 통합 단일 표 조작 간소화
프레임 소스 주소:https://github.com/ronwxy/base-spring-boot (지속 적 인 업데이트 보완 중, follow, star 환영) 데모 소스 주소:https://github.com/ronwxy/springboot-demos/tree/master/springboot-tkmapper
오픈 소스 mapper - spring - boot - starter 를 바탕 으로 다음 과 같은 내용 을 추가 하 였 습 니 다.
어떻게 사용 합 니까?다음은 사용 절 차 를 제시 하고 예 시 를 참고 할 수 있 습 니 다.https://github.com/ronwxy/springboot-demos/tree/master/springboot-tkmapper
1. 프레임 Maven 배치 설치
프레임 워 크 원본 을 다운로드 한 후 프로젝트 루트 에서 실행
mvn clean install
하면 로 컬 maven 라 이브 러 리 에 설치 할 수 있 습 니 다.공유 가 필요 하고 Nexus 사복 을 입 었 다 면 루트 pom. xml 파일 에 distributionManagement
설정 을 추가 하고 Nexus 창고 배포 주 소 를 지정 하여 원 격 maven 창고 에 설치 합 니 다. 예 를 들 어 mvn clean deploy
<distributionManagement>
<repository>
<id>nexus-releasesid>
<url>
http://ip:port/repository/maven-releases/
url>
repository>
<snapshotRepository>
<id>nexus-snapshotsid>
<url>
http://ip:port/repository/maven-snapshots/
url>
snapshotRepository>
distributionManagement>
위 에서 지정 한 reposcory 는 maven 의 모든 프로필 settings. xml 에 해당 하 는 계 정 설정 이 있어 야 합 니 다 (id 는 일일이 대응 해 야 합 니 다). 예 를 들 어
<servers>
<server>
<id>nexus-snapshotsid>
<username>adminusername>
<password>xxxpassword>
server>
<server>
<id>nexus-releasesid>
<username>adminusername>
<password>xxxpassword>
server>
servers>
2. pom. xml 설정
프로젝트 에 이 데이터베이스 프레임 워 크 를 도입 하 는 데 는 세 가지 방식 이 있 습 니 다.
#
<dependency>
<groupId>cn.jboost.springbootgroupId>
<artifactId>tkmapper-spring-boot-starterartifactId>
<version>1.2-SNAPSHOTversion>
dependency>
#
<dependency>
<groupId>cn.jboost.springbootgroupId>
<artifactId>druid-spring-boot-starterartifactId>
<version>1.2-SNAPSHOTversion>
dependency>
#
<parent>
<groupId>cn.jboost.springbootgroupId>
<artifactId>spring-boot-parentartifactId>
<version>1.2-SNAPSHOTversion>
<relativePath/>
parent>
상황 에 따라 my sql 또는 postgresql 의 구동 의존 도 를 도입 합 니 다 (다른 데이터 베 이 스 는 형식 변환 지원 을 하지 않 고 테스트 하지 않 습 니 다)
3. 데이터 원본 설정
druid 연결 풀 을 사용 하면 application. yml 설정 파일 에 다음 데이터 원본 설정 을 추가 합 니 다 (추천)
spring:
datasource:
druid:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=utf-8
username: root
password:
#
initialSize: 2 #
minIdle: 1 #
maxActive: 5 #
druidServletSettings:
allow: 127.0.0.1
deny:
loginUsername: admin
loginPassword: Passw0rd
resetEnable: true
druidFilterSettings:
exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'
maxWait: 60000 #
timeBetweenEvictionRunsMillis: 60000 # , ,
minEvictableIdleTimeMillis: 300000 # ,
validationQuery: SELECT 'x'
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true # PSCache, PSCache
maxPoolPreparedStatementPerConnectionSize: 20
filters: stat #,wall( wall sql,druid sql ) # filters, sql ,'wall'
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 # connectProperties mergeSql ; SQL
useGlobalDataSourceStat: true # DruidDataSource
연결 탱크 를 사용 하지 않 으 면 설정 이 상대 적 으로 간단 합 니 다. 다음 과 같 습 니 다.
spring:
datasource:
url: jdbc:mysql://localhost:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=utf-8
username: root
password:
driver-class-name: com.mysql.jdbc.Driver
4. 해당 도 메 인, mapper, service, controller 각 층 대상 정의
demo 를 예 로 들 면 (demo 데이터베이스 스 크 립 트 는 resources / schema. sql 참조) domain 은 사용자 클래스 를 정의 합 니 다.
@Table(name = "user")
@Getter
@Setter
@ToString
public class User extends AutoIncrementKeyBaseDomain<Integer> {
private String name;
@ColumnType(jdbcType = JdbcType.CHAR)
private Gender gender;
private List<String> favor;
private Map<String, String> address;
public enum Gender{
M,
F
}
}
지정 한 데이터베이스 테이블 이름
@Table
주석 을 추가 해 야 합 니 다. 계승 AutoIncrementKeyBaseDomain
을 통 해 홈 키 를 추가 하거나 UUIDKeyBaseDomain
UUID 홈 키 를 구현 할 수 있 습 니 다. 다른 유형의 홈 키 를 사용자 정의 하면 계승 BaseDomain
합 니 다. 이 프레임 워 크 서비스 계층 의 일반적인 방법 실현
BaseService
은 단일 열 메 인 키 만 지원 하고 그룹 메 인 키 는 지원 되 지 않 습 니 다 (조합 메 인 키 를 사용 하 는 것 도 권장 하지 않 습 니 다)프레임 워 크 는 기본적으로 List, Map 등 복잡 한 유형 속성 에 my sql 의 json 형식 이나 post gresql 의 jsonb 형식 을 반영 합 니 다. 만약 에 특정한 속성 이 맵 이 필요 하지 않 으 면 @ Transient 주 해 를 추가 할 수 있 습 니 다.매 거 진 형식 은 @ ColumnType 지정 jdbc Type 을 추가 해 야 합 니 다.
dao 층 정의
UserMapper
,@Repository
public interface UserMapper extends BaseMapper<User> {
}
BaseMapper
기본적으로 단일 표 의 추가 삭제 및 일괄 삽입 등 기능 을 실현 합 니 다. 복잡 한 조 회 를 정의 하려 면 이 인터페이스 에서 정의 한 다음 에 mapper xml 파일 을 통 해 작성 할 수 있 습 니 다. 서비스 계층 정의
UserService
은 BaseService
의 유 니 버 설 기능 (원본 코드 를 구체 적 으로 볼 수 있 음) 을 계승 하여 이 클래스 에서 사용자 정의 방법 을 사용 할 수 있 습 니 다.@Service
public class UserService extends BaseService<Integer, User> {
@Transactional
public void createWithTransaction(User user){
create(user);
//
throw new RuntimeException(" , ");
}
}
controller 계층 정의
UserController
, 계승 BaseController
의 유 니 버 설 인터페이스 (구체 적 으로 소스 코드 를 볼 수 있 음) @RestController
@RequestMapping("/user")
public class UserController extends BaseController<Integer, User> {
}
예 를 들 어 각 층 에 대응 하 는 인터페이스 나 클래스 만 정의 하고 기초 인터페이스 나 클래스 를 계승 하면 사용자 의 기본 적 인 삭제 와 검사 기능 을 완성 할 수 있 으 며 구체 적 인 실현 코드 를 쓸 필요 가 없다.
5. 테스트, 실행
SpringbootTkmapperApplicationTests
류 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————————————————————————————————————————
나의 위 챗 공식 번 호 를 주목 하고 최신 공 유 를 얻 는 것 을 환영 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.