springboot + my batis + my baits plus 통합 및 기본 응용

머리말spring framework 이 지원 하 는 orm 프레임 워 크 에서 mybatishibernate 에 비해 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-plusBaseMapper, 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 인터페이스
    위 에서 말 했 듯 이 BaseMapperBaseService 는 이미 기본 적 인 조작 을 실현 했다. 다음은 이러한 인터페이스의 용법 을 간단하게 말 하 자.
    조회 하 다.
    조회 중 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 일상적인 수 요 를 거의 만족 시 키 는 조건 조작 을 포함 하고 jpaspecification 과 마찬가지 로 동적 생 성 조건 을 지원 하 며 lambda 표현 식 을 사용 하여 조건 을 조립 하 는 것 도 지원 합 니 다.그 는 QueryWrapperUpdateWrapper 의 부류 이다.
    자주 사용 하 는 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 에서 여러 가지 메 인 키 생 성 전략 이 있 는데 각각
  • IdType. AUTO: 데이터베이스 id 자체 증가
  • IdType. INPUT: 사용자 입력
  • IdType.ID_WORKER: 유일한 ID, 자동 채 우기 (기본 값)
  • IdType. UUID: 유일한 ID, 자동 충전
  • 우리 회 사 는 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 | 요철 벽지 | 언재

    좋은 웹페이지 즐겨찾기