springboot + my batis + my baits plus 통합 및 기본 응용
spring framework
이 지원 하 는 orm
프레임 워 크 에서 mybatis
는 hibernate
에 비해 spring
자체 가 제공 하 는 지원 이 상대 적 으로 적 고 개발 과정 에서 mybatis
을 사용 하여 개발 하 는 프로그래머 에 게 많은 어려움 을 겪 었 다.이 를 위해 개원 에 도 3 자 대
mybatis
의 일부 강화 도구 가 많이 생 겼 다. 예 를 들 어 ourbatis
, mybatis-generator
등 이다.우 리 는 주로 기능 이 풍부 하고 현재 교체 되 고 있 는 한 국민 이 개발 한 증강 도구 mybatis-plus
를 말한다.공식 문서 에서 말 한 것 처럼우리 의 비 전 은 마 이 바 티 스 의 가장 좋 은 파트너 가 되 는 것 이다. 마치 혼 두 라 의 1P, 2P 처럼 기 우 를 매치 하면 효율 이 배가 된다.
mybatis-plus
효율 성 을 높이 고 배 치 를 간소화 하기 위해 태 어 난 것 으로 보인다.다음은 springboot
에서 어떻게 통합 하 는 지 보 여 드 리 겠 습 니 다 mybatis-plus
.준비 작업
우선 하나의
springboot
프로젝트 를 만 드 는 것 입 니 다.관련 의존 도입
springboot
관련, mybaits
, mybatis-plus
등)<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.mybatis.spring.bootgroupId>
<artifactId>mybatis-spring-boot-starterartifactId>
<version>1.3.2version>
dependency>
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<optional>trueoptional>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
<dependency>
<groupId>com.baomidougroupId>
<artifactId>mybatis-plus-boot-starterartifactId>
<version>3.0.5version>
dependency>
dependencies>
mybaits-plus
의 코드 생 성기 맵 생 성 코드 를 사용 합 니 다. 여기 서 사용 하 는 데이터 베 이 스 는 mysql
입 니 다.이것 은 다른 문장 에 설명 하면 여기 서 설명 하지 않 겠 다.여기 서
mybaits-plus
는 BaseMapper
, BaseService
이런 기 류 를 제공 하여 조작 에 대한 지원 을 제공 했다. 예 를 들 어save(T t)
saveOrUpdate(T t)
update(T t, Wrapper wrapper)
page(IPage page, Wrapper queryWrapper)
잠깐 만.
다음은
springboot
에서 어떻게 활용 하 는 지 간단히 소개 하 겠 습 니 다 mybaits-plus
.배치 하 다.
우선 설정 에 대해 서 는 기본적으로
yml
파일 로 mybaits-plus
설정 을 합 니 다.mybatis-plus:
#MyBatis Mapper XML
mapper-locations: classpath*:mapper/*.xml
# MyBaits , ,
# Mapper XML , ( XML )
typeAliasesPackage: com.luwei.models
# typeAliasesPackage ,
# type-aliases-super-type: java.lang.Object
# , ,
typeEnumsPackage: com.luwei.demo.mybatisplusdemo.envm
# ,
# type-handlers-package: com.luwei.demo.mybatisplusdemo.handler
# mybatis
# executorType: simple
configuration:
# , resultType
map-underscore-to-camel-case: true
global-config:
db-config:
# , tb_manager, entity Manager
table-prefix: tb_
#
logic-delete-value: 1
#
logic-not-delete-value: 0
# like , stirng like,
# column-like: false
logging:
level:
# , sql
com.luwei.demo.mybatisplusdemo.mapper: debug
기본적으로 이 설정 들 은 일반적인 응용 을 만족 시 킬 수 있다.
CRUD 인터페이스
위 에서 말 했 듯 이
BaseMapper
과 BaseService
는 이미 기본 적 인 조작 을 실현 했다. 다음은 이러한 인터페이스의 용법 을 간단하게 말 하 자.조회 하 다.
조회 중
Mybatis-plus
은 홈 키 조회, 지 정 된 조건 조회, 페이지 조회 등 여러 가지 봉 인 된 방식 을 제공한다.Manager manager1 = managerService.getById(1);
Assert.assertNotNull(manager1);
LambdaQueryWrapper wrapper = new LambdaQueryWrapper().like(Manager::getName, "na");
List managerList = managerService.list(wrapper);
Assert.assertFalse(managerList.isEmpty());
// page
Page page = new Page<>(1, 2);
IPage managerPage = managerService.page(page, wrapper);
Assert.assertFalse(managerPage.getRecords().isEmpty());
// map
Map map = managerService.getMap(wrapper);
System.out.println(map);
Object obj = managerService.getObj(wrapper);
System.out.println(obj);
try {
// ,
managerService.getOne(wrapper, true);
}catch (RuntimeException e) {
e.printStackTrace();
System.out.println(" ");
}
증가시키다
save(T t)
방법 은 실제 적 으로 대상 을 데이터베이스 에 지속 시 키 는 것 입 니 다. 여기 서 insert 문 구 를 만 들 고 실 행 됩 니 다.@Transactional
public void add() {
Manager manager = new Manager();
manager.setAccount("account");
manager.setRole(RoleEnum.ROOT);
manager.setPassword("password");
manager.setName("name");
save(manager);
}
로그 출력:
==> Preparing: INSERT INTO tb_manager ( account, name, password, role ) VALUES ( ?, ?, ?, ? )
==> Parameters: account(String), name(String), password(String), 0(Integer)
<== Updates: 1
변경 하 다.
제 공 된
update
, updateOrSave
, upateById
모두 데이터 업 데 이 트 를 실현 할 수 있다.각자 의 차이 점 은update
: 조건 에 따라 지정 한 필드 를 선별 하고 업데이트 합 니 다 updateOrSave
: 대상 을 업데이트 하고 저장 되 지 않 은 대상 을 삽입 합 니 다 updateById
: id 에 따라 대상 을 업데이트 @Transactional
public void updateManager() {
Manager manager = getById(1);
manager.setName("testUpdate");
updateById(manager);
//saveOrUpdate(manager);
//update(new Manager(), new UpdateWrapper().lambda().set(Manager::getName, "test").eq(Manager::getManagerId, 1));
}
삭제
삭제 에 서 는 일반적인 물리 적 삭제 외 에 도
mybaits-plus
논리 적 삭 제 를 지원 했다.논리 적 으로 삭제 하려 면 위 설정 외 에 설정 bean 을 추가 하여 플러그 인 을 설치 해 야 합 니 다.
@Bean
public ISqlInjector sqlInjector() {
return new LogicSqlInjector();
}
이렇게 하면 삭 제 를 사용 할 때 기록 에 표 시 된 표 지 를 삭제 하 는 필드 를 변경 하고 조회 와 업데이트 할 때 도 표 지 를 삭제 하지 않 은 기록 으로 만 삭 제 됩 니 다.
public void deleteManager() {
LambdaQueryWrapper wrapper = new LambdaQueryWrapper().eq(Manager::getManagerId, 4);
System.out.println(baseMapper.delete(wrapper));
/*Map deleteMap = new HashMap<>();
//
deleteMap.put("manager_id", 4);
baseMapper.deleteByMap(deleteMap);*/
/*baseMapper.deleteById(4);*/
// service
/*LambdaQueryWrapper wrapper = new LambdaQueryWrapper().eq(Manager::getManagerId, 4);
remove(wrapper);*/
}
조건 부 구조 기
이러한 조작 을 조회, 업데이트, 삭제 할 때 우 리 는 조건 을 정의 하거나 속성 을 설정 해 야 한다. 즉
where
자구 와 set
문 구 는 sql 을 통 해 직접 처리 하지 않 으 면 mybatis-plus
에서 도 포장 기 를 제공 하여 실현 한다.AbstractWrapper
일상적인 수 요 를 거의 만족 시 키 는 조건 조작 을 포함 하고 jpa
의 specification
과 마찬가지 로 동적 생 성 조건 을 지원 하 며 lambda
표현 식 을 사용 하여 조건 을 조립 하 는 것 도 지원 합 니 다.그 는 QueryWrapper
과 UpdateWrapper
의 부류 이다.자주 사용 하 는
wrapper
방법Map conditionMap = new HashMap<>();
//
conditionMap.put("name", "name");
conditionMap.put("manager_id", 1);
//allEq(BiPredicate filter, Map params, boolean null2IsNull)
//filter:
//null2IsNull: true map value null isNull , false value null
QueryWrapper queryWrapper = new QueryWrapper().allEq((r, v) -> r.indexOf("name") > 0, conditionMap, true);
managerService.list(queryWrapper);
//like(R column, Object val) -> column like '%na%'
//likeLeft -> column like '%na'
//likeRight -> column like 'na%'
//and(Function func) -> and (column = val)
LambdaQueryWrapper lambdaWrapper = new LambdaQueryWrapper().like(Manager::getName, "na").and((r) -> r.eq(Manager::getDisabled, false));
managerService.list(lambdaWrapper);
//orderBy(boolean condition, boolean isAsc, R... columns) -> order by columns isAsc
LambdaQueryWrapper lambdaWrapper = new LambdaQueryWrapper().orderBy(true, false, Manager::getManagerId);
managerService.list(lambdaWrapper);
//select
LambdaQueryWrapper lambdaWrapper = new LambdaQueryWrapper().select(Manager::getName, Manager::getDisabled);
managerService.list(lambdaWrapper);
//set(R column, Object val) -> update T set colunm = val
managerService.update(new Manager(), new UpdateWrapper().lambda().set(Manager::getName, "newName").eq(Manager::getManagerId, 4));
예 를 들 어 다른 상
eq
, lte
, isNull
, orderBy
, or
, exists
등 한정 방법 도 있 는데 여기 서 일일이 소개 하지 않 겠 습 니 다.기타
페이지 플러그 인
페이지 를 도입 합 니 다. 설정 외 에 플러그 인 bean 을 추가 해 야 합 니 다.
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
사용 시 사용자 정의 조회 에서 매개 변수 에
Page
대상 을 추가 하고 매개 변수 중 첫 번 째 로 놓 으 라 고 요구 합 니 다.IPage selectManagerPage(Page page, @Param("roleEnum")RoleEnum roleEnum, @Param("managerId") Integer managerId, @Param("name") String name) ;
<select id="selectManagerPage" resultType="com.luwei.pojos.manager.ManagerPageVO">
<if test="name != null">
if>
<if test="managerId != null">
if>
select>
<select id="selectForSpecialCondition" resultType="com.luwei.entity.Manager">
select
<include refid="Base_Column_List" />
from tb_manager
where name like '%admin%'
select>
홈 키 설정
mybaits-plus
에서 여러 가지 메 인 키 생 성 전략 이 있 는데 각각mysql
자체 의 자체 증가 전략 을 사용 하기 때문에 IdType. AUTO 를 사용 합 니 다.@ApiModelProperty(value = " id")
@TableId(value = "manager_id", type = IdType.AUTO)
private Integer managerId;
에 대해 IDWORKER 와 UUID 의 차이 점 은 유일한 키 생 성 전략 이 다 르 기 때 문 입 니 다. IDWORKER 는 공식 설명 에 따라 사용
Sequence
을 바탕 으로 유일한 키 를 만 들 었 다.매 거 속성
mybaits
매 거 진 을 더 잘 사용 할 수 있 도록 mybatis-plus
매 거 진 스 캔 주입 을 제공 합 니 다.구체 적 인 설정, 우선 스 캔 경 로 를 설정 합 니 다.
# , ,
typeEnumsPackage: com.luwei.demo.mybatisplusdemo.envm
매 거 진 클래스 에서 인 터 페 이 스 를 실현 하여 구체 적 인 값 을 얻 는 데 사용 합 니 다.
//
public interface BaseEnum<E extends Enum>, T> {
T getValue();
String getDisplayName();
}
이렇게 하면 기본적으로
mybatis
에서 매 거 진 유형 을 사용 할 수 있다.총결산
위 에서
mybitis-plus
기본 적 인 용법 을 묘 사 했 는데 사실은 이상 을 제외 하고 xml 열 로드, 낙관적 인 잠 금 플러그 인, 성능 분석 플러그 인 등 편리 한 플러그 인과 응용 도 많이 제공 했다. 이런 것들 은 지면 과 주제 로 인해 저 는 여기 서 논술 하지 않 겠 습 니 다.이 편 이 현재 인기 있 는 mybaits
증강 도 구 를 빨리 가지 고 개발 효율 을 높 일 수 있 기 를 바 랍 니 다.금 을 파다
segmentfault
V2EX
알다
블 로그 가든
중국
github
약서
갈대 기술
광저우 갈대 과학기술 자바 개발 팀
갈대 과학기술 - 광저우 전문 소프트웨어 아웃 소 싱 서비스 회사
위 챗 애플 릿, 앱 애플 리 케 이 션 연구개 발, UI 디자인 등 전문 서 비 스 를 제공 하고 인터넷 제품 컨설팅, 브랜드 디자인, 기술 연구개 발 등 분야 에 전념 합 니 다.
www. talkmoney. cn 을 방문 하여 더 알 아 보기
만능 설명서 | 조기 일기 Lite | 요철 벽지 | 언재
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.