SpringBoot | 8 편: 유 니 버 설 Mapper 와 페이지 플러그 인의 통합
강력 추천
큰 신의 인공지능 튜 토리 얼 을 공유 하 다.제로 베이스!통속 적 이 고 알 기 쉽다!유머노 란 멘 트 도 달 고!당신 도 인공지능 팀 에 합류 하 기 를 바 랍 니 다!http://www.captainbed.net
SpringBoot
는 Spring
응용의 창설, 운행, 디 버 깅, 배치 등 일련의 문 제 를 간소화 하기 위해 탄생 한 산물 이다. XML , , WEB
SpringBoot | 7 편: Mybatis 통합 글 에서 우 리 는 Mybatis
이라는 우수한 프레임 워 크 를 소개 하 는 동시에 민간 대신 이 개발 한 두 가지 플러그 인 * * Mapper
, PageHelper
* * 을 언급 하여 간단 한 CURD 코드 의 작성 과 작별 을 고 합 니 다.플러그 인 소개
다음 두 가지 플러그 인 작성 자 는 모두 같은 사람 입 니 다.
Mybatis
과 플러그 인 개발 에 대해 깊이 알 고 싶다 면 작가 의 책 을 구 매 할 수 있 습 니 다.페이지 플러그 인
페이지 플러그 인 이 없 기 전에 한 페이지 에 두 개의 SQL 문 구 를 써 야 합 니 다. 한 페이지 에 통 계 를 조회 한 다음 에 페이지 번 호 를 계산 할 수 있 습 니 다. 이런 코드 는 지루 하고 무미건조 합 니 다. 더 중요 한 것 은 * *
* 입 니 다. 모두 가 알 고 있 는 것 처럼 서로 다른 데이터 베이스 페이지 쓰기 방법 이 다 릅 니 다. Mybatis
는 Hibernate
와 달리 동적 SQL 과 결과 집합 만 제공 합 니 다.다행히도 페이지 를 나 누 는 데 좋 은 해결 방안 을 제공 하지 않 았 지만 Interceptor
개발 자가 스스로 확장 할 수 있 도록 제공 한 것 도 이 페이지 플러그 인의 유래 이다.유 니 버 설 매 퍼
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
유 니 버 설 매 퍼
페이지 플러그 인
구체 적 인 코딩
기본 설정 을 마 친 후 구체 적 인 인 인 코딩 작업 을 진행 합 니 다.
표 구조
표 만 들 기
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);
}
}
총결산
현재 많은 사내 들 이 * *
SpringBoot
* * 에 관 한 강 좌 를 쓴 적 이 있 습 니 다. 만약 에 비슷 한 점 이 있 으 면 널리 양해 해 주 십시오. 본 강 좌 는 최신 spring-boot-starter-parent:2.0.1.RELEASE
을 바탕 으로 작성 되 었 습 니 다. 새로운 버 전의 특성 을 포함 하여 모두 함께 소개 할 것 입 니 다.뭐 공부 해요?
springboot 기술 교류 군: 681513531
개인 블 로그:https://blog.winterchen.com
전체 텍스트 코드:https://github.com/WinterChenS/springboot-learning-experience
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
MySQL/마이바티스 | 동적 쿼리 사용A라는 서비스에 해당하는 테이블을 조인하고 조회하는 데 사용됩니다. 나중에 공통화를 위해 B 및 C 서비스도 추가됩니다. A, B, C 서비스는 모두 단일 쿼리에서 작동할 수 있도록 공통화되어야 합니다. 테이블에 각...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.