SpringBoot | 8 편: 유 니 버 설 Mapper 와 페이지 플러그 인의 통합

  • * * 본문 작성 자: * * 당 아 봉
  • 본문 링크:http://blog.battcn.com/2018/05/10/springboot/v2-orm-mybatis-plugin/
  • * * 저작권 성명: * 본 블 로그 의 모든 글 은 특별 성명 을 제외 하고 CC BY - NC - SA 3.0 허가 협 의 를 사용 합 니 다.전재 출처 를 밝 혀 주세요!

  • 강력 추천
    큰 신의 인공지능 튜 토리 얼 을 공유 하 다.제로 베이스!통속 적 이 고 알 기 쉽다!유머노 란 멘 트 도 달 고!당신 도 인공지능 팀 에 합류 하 기 를 바 랍 니 다!http://www.captainbed.net SpringBootSpring 응용의 창설, 운행, 디 버 깅, 배치 등 일련의 문 제 를 간소화 하기 위해 탄생 한 산물 이다. XML , , WEB SpringBoot | 7 편: Mybatis 통합 글 에서 우 리 는 Mybatis 이라는 우수한 프레임 워 크 를 소개 하 는 동시에 민간 대신 이 개발 한 두 가지 플러그 인 * * Mapper, PageHelper * * 을 언급 하여 간단 한 CURD 코드 의 작성 과 작별 을 고 합 니 다.
    플러그 인 소개
    다음 두 가지 플러그 인 작성 자 는 모두 같은 사람 입 니 다. Mybatis 과 플러그 인 개발 에 대해 깊이 알 고 싶다 면 작가 의 책 을 구 매 할 수 있 습 니 다.
    一起来学SpringBoot | 第八篇:通用Mapper与分页插件的集成_第1张图片
  • 경 동:https://item.jd.com/12103309.html
  • 저당:http://product.dangdang.com/25098208.html

  • 페이지 플러그 인
  • GIT 주소:https://github.com/pagehelper/Mybatis-PageHelper

  • 페이지 플러그 인 이 없 기 전에 한 페이지 에 두 개의 SQL 문 구 를 써 야 합 니 다. 한 페이지 에 통 계 를 조회 한 다음 에 페이지 번 호 를 계산 할 수 있 습 니 다. 이런 코드 는 지루 하고 무미건조 합 니 다. 더 중요 한 것 은 * * * 입 니 다. 모두 가 알 고 있 는 것 처럼 서로 다른 데이터 베이스 페이지 쓰기 방법 이 다 릅 니 다. MybatisHibernate 와 달리 동적 SQL 과 결과 집합 만 제공 합 니 다.다행히도 페이지 를 나 누 는 데 좋 은 해결 방안 을 제공 하지 않 았 지만 Interceptor 개발 자가 스스로 확장 할 수 있 도록 제공 한 것 도 이 페이지 플러그 인의 유래 이다.
    유 니 버 설 매 퍼
  • GIT 주소:https://gitee.com/free/Mapper
  • Mapper 는 임 의 MyBatis 통용 방법 을 실현 할 수 있 는 프레임 워 크 로 프로젝트 는 일반적인 첨삭 검사 조작 과 Example 관련 된 단일 표 조작 을 제공 했다.유 니 버 설 매 퍼 는 마 이 바 티 스 사용 중 90% 의 기본 조작 을 해결 하기 위해 사용 하면 개발 자 들 의 많은 시간 을 절약 할 수 있 고 편리 하 게 개발 할 수 있다.
    가 져 오기 의존pom.xml 에 유 니 버 설 Mapper 와 페이지 플러그 인 의존 팩 을 추가 합 니 다.
    
    <dependency>
        <groupId>tk.mybatisgroupId>
        <artifactId>mapper-spring-boot-starterartifactId>
        <version>2.0.2version>
    dependency>
    
    <dependency>
        <groupId>com.github.pagehelpergroupId>
        <artifactId>pagehelper-spring-boot-starterartifactId>
        <version>1.2.5version>
    dependency>
    
    <dependency>
        <groupId>mysqlgroupId>
        <artifactId>mysql-connector-javaartifactId>
    dependency>
    
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-webartifactId>
    dependency>
    
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-testartifactId>
        <scope>testscope>
    dependency>
    

    속성 설정application.properties 파일 에 각각 * * , Mybatis, Mapper, PageHelper 의 속성 설정 을 추가 합 니 다. 여 기 는 흔히 볼 수 있 는 장면 의 설정 만 제공 합 니 다. 더 완전한 설정 은 앞에서 말 한 (#^.^#) * * 을 참고 할 수 있 습 니 다.
    spring.datasource.url=jdbc:mysql://localhost:3306/chapter7?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&useSSL=false
    spring.datasource.username=root
    spring.datasource.password=root
    #      mybatis         
    logging.level.com.battcn=DEBUG
    ########## Mybatis      ##########
    mybatis.mapper-locations=classpath:mapper/*.xml
    mybatis.type-aliases-package=com.winterchen.entity
    #         :        order_id             orderId
    mybatis.configuration.map-underscore-to-camel-case=true
    ##########   Mapper ##########
    #         ,   MYSQL,        
    mapper.identity=MYSQL
    mapper.mappers=tk.mybatis.mapper.common.BaseMapper
    #    insert   update  ,         !=''
    mapper.not-empty=true
    #          
    mapper.enum-as-simple-type=true
    ##########      ##########
    pagehelper.helper-dialect=mysql
    pagehelper.params=count=countSql
    pagehelper.reasonable=false
    pagehelper.support-methods-arguments=true
    

    유 니 버 설 매 퍼
  • * * mapper. enum - as - simple - type: * * 매 거 진 은 간단 한 유형 으로 처리 되 며, 매 거 진 필드 가 있 으 면 이 설정 을 추가 해 야 매 핑
  • * * mapper. not - empty: * * 설정 후 insert 와 update 의 문자열 형식 을 판단 합 니 다! = '

  • 페이지 플러그 인
  • * * pagehelper. 합리화 매개 변수: * * 페이지 합 리 화 매개 변 수 는 기본 값 은 false 입 니 다.이 매개 변수 가 true 로 설정 되 었 을 때 pageNum < = 0 시 첫 페이지, pageNum > pages (총 수 를 초과 할 때) 를 조회 하고 마지막 페이지 를 조회 합 니 다.기본 false 일 때 매개 변수 에 따라 직접 조회 합 니 다.
  • * * support - methods - arguments: * * Mapper 인터페이스 파 라 메 터 를 통 해 페이지 파 라 메 터 를 전달 하 는 것 을 지원 합 니 다. 기본 값 false, 페이지 플러그 인 은 조회 방법의 매개 변수 값 에서 위 params 가 설정 한 필드 에서 자동 으로 값 을 추출 하여 적당 한 값 을 찾 으 면 자동 으로 페이지 를 나 눕 니 다.

  • 구체 적 인 코딩
    기본 설정 을 마 친 후 구체 적 인 인 인 코딩 작업 을 진행 합 니 다.
    표 구조
    표 만 들 기 t_user
    CREATE TABLE `t_user` (
      `id` int(8) NOT NULL AUTO_INCREMENT COMMENT '    ',
      `username` varchar(50) NOT NULL COMMENT '   ',
      `password` varchar(50) NOT NULL COMMENT '  ',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='   ';
    

    실체 류 Mapper JPA 규범 가방 에 있 는 주 해 를 사 용 했 는데 이런 디자인 은 반복 적 으로 바퀴 를 만 드 는 것 을 피 했 고 Spring Data Jpa 의 응용 을 쉽게 전환 할 수 있 게 했다 Mybatis.
    package com.winterchen.entity;
    
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.Table;
    import java.io.Serializable;
    
    /**
     * Created by Donghua.Chen on 2018/6/7.
     */
    @Table(name = "t_user")
    public class User implements Serializable{
        private static final long serialVersionUID = 8655851615465363473L;
    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
        private String username;
        private String password;
    
        public User() {
        }
    
        public User(String username, String password) {
            this.username = username;
            this.password = password;
        }
    
        public User(Long id, String username, String password) {
            this.id = id;
            this.username = username;
            this.password = password;
        }
    
        // TODO    get set
    }
    

    지구 층
    이 를 잘 알 리 기 위해 사용자 정의 SQL 을 모 의 했 습 니 다. 사용 Mapper 후 기 존 코드 구 조 를 파괴 하지 않 는 다 는 것 을 알 수 있 습 니 다.
    UserMapper
    계승 BaseMapper 하면 됩 니 다. 이 점 은 약간 유사 하지 않 습 니까? JpaRepository 동시에 자신의 수요 에 따라 자신의 프로젝트 에 더욱 적합 한 BaseMapper 을 확장 할 수 있 습 니 다. 그의 유연성 도 많은 개발 자 들 이 좋아 하 는 요소 중 하나 입 니 다.
    package com.winterchen.mapper;
    
    import com.winterchen.entity.User;
    import org.apache.ibatis.annotations.Mapper;
    import tk.mybatis.mapper.common.BaseMapper;
    
    /**
     * Created by Donghua.Chen on 2018/6/7.
     */
    @Mapper
    public interface UserMapper extends BaseMapper<User> {
    
        /**
         *        (TODO           SQL)
         *
         * @param username    
         * @return     
         */
        int countByUsername(String username);
    
    }
    
    UserMapper 맵 파일
    
    
    <mapper namespace="com.winterchen.mapper.UserMapper">
    
        <select id="countByUsername" resultType="java.lang.Integer">
            SELECT count(1) FROM t_user WHERE username = #{username}
        select>
    mapper>
    

    테스트
    데이터 액세스 층 인 터 페 이 스 를 완성 한 후 코드 의 정확성 을 검사 하기 위해 junit 테스트 클래스 를 작성 합 니 다.
    package com.winterchen;
    
    import com.github.pagehelper.PageHelper;
    import com.github.pagehelper.PageInfo;
    import com.winterchen.entity.User;
    import com.winterchen.mapper.UserMapper;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringRunner;
    
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class SpringBootMybatisPluginApplicationTests {
    
        private static final Logger log = LoggerFactory.getLogger(SpringBootMybatisPluginApplicationTests.class);
    
        @Autowired
        private UserMapper userMapper;
    
        @Test
        public void test1() throws Exception {
            final User user1 = new User("u1", "p1");
            final User user2 = new User("u1", "p2");
            final User user3 = new User("u3", "p3");
            userMapper.insertSelective(user1);
            log.info("[user1    ] - [{}]", user1.getId());
            userMapper.insertSelective(user2);
            log.info("[user2    ] - [{}]", user2.getId());
            userMapper.insertSelective(user3);
            log.info("[user3    ] - [{}]", user3.getId());
            final int count = userMapper.countByUsername("u1");
            log.info("[      SQL] - [{}]", count);
    
            // TODO     
            userMapper.insertSelective(new User("u1", "p1"));
            userMapper.insertSelective(new User("u1", "p1"));
            userMapper.insertSelective(new User("u1", "p1"));
            userMapper.insertSelective(new User("u1", "p1"));
            userMapper.insertSelective(new User("u1", "p1"));
            userMapper.insertSelective(new User("u1", "p1"));
            userMapper.insertSelective(new User("u1", "p1"));
            userMapper.insertSelective(new User("u1", "p1"));
            userMapper.insertSelective(new User("u1", "p1"));
            userMapper.insertSelective(new User("u1", "p1"));
            // TODO    +    this.userMapper.selectAll()              ,                
            final PageInfo<Object> pageInfo = PageHelper.startPage(1, 10).setOrderBy("id desc").doSelectPageInfo(() -> this.userMapper.selectAll());
            log.info("[lambda  ] - [    ] - [{}]", pageInfo.toString());
    
            PageHelper.startPage(1, 10).setOrderBy("id desc");
            final PageInfo<User> userPageInfo = new PageInfo<>(this.userMapper.selectAll());
            log.info("[    ] - [{}]", userPageInfo);
        }
    
    }
    

    총결산
  • Mybatis 공식 문서:http://www.mybatis.org/mybatis-3/zh/index.html
  • 유 니 버 설 Mapper 문서:https://gitee.com/free/Mapper/wikis/1.1-java?parent=1.integration
  • 페이지 플러그 인 문서:https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md

  • 현재 많은 사내 들 이 * * SpringBoot * * 에 관 한 강 좌 를 쓴 적 이 있 습 니 다. 만약 에 비슷 한 점 이 있 으 면 널리 양해 해 주 십시오. 본 강 좌 는 최신 spring-boot-starter-parent:2.0.1.RELEASE 을 바탕 으로 작성 되 었 습 니 다. 새로운 버 전의 특성 을 포함 하여 모두 함께 소개 할 것 입 니 다.
    뭐 공부 해요?
    springboot 기술 교류 군: 681513531
    개인 블 로그:https://blog.winterchen.com
    전체 텍스트 코드:https://github.com/WinterChenS/springboot-learning-experience
  • * * 본문 작성 자: * * 당 아 봉
  • 본문 링크:http://blog.battcn.com/2018/05/10/springboot/v2-orm-mybatis-plugin/
  • * * 저작권 성명: * 본 블 로그 의 모든 글 은 특별 성명 을 제외 하고 CC BY - NC - SA 3.0 허가 협 의 를 사용 합 니 다.전재 출처 를 밝 혀 주세요!
  • 좋은 웹페이지 즐겨찾기