ybatis 공통 Mapper 소개 및 사용 상세 정보

8099 단어 MybatisMapper통용
Mybatis를 사용하는 개발자들은 대부분 많은 SQL을 xml 파일에 쓰려고 하는데 특수한 업무 논리 SQL을 제외하고 구조와 유사한 추가 삭제 수정 SQL이 대량으로 있다.그리고 데이터베이스 테이블 구조가 변경될 때 대응하는 모든 SQL과 실체 클래스를 변경해야 합니다.이 작업량과 효율의 영향은 아마도 증삭제 프로그래머와 진정한 프로그래머를 구별하는 장벽일 것이다.이때 유니버설 마퍼가 생겨났다.
범용 매퍼란 무엇입니까?
유니버설 Mapper는 Mybatis를 기반으로 한 플러그인을 해결하기 위한 것입니다.개발자는 SQL을 작성할 필요가 없고 DAO에 방법을 추가할 필요가 없으며 실체류만 잘 쓰면 상응하는 삭제 검사 방법을 지원할 수 있다.
어떻게 사용합니까
ySQL의 경우 다음과 같은 테이블이 있다고 가정합니다.

CREATE TABLE `test_table` (
 `id` bigint(20) NOT NULL AUTO_INCREMENT,
 `name` varchar(255) DEFAULT '',
 `create_time` datetime DEFAULT NULL,
 `create_user_id` varchar(32) DEFAULT NULL,
 `update_time` datetime DEFAULT NULL,
 `update_user_id` varchar(32) DEFAULT NULL,
 `is_delete` int(8) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
메인 키는 id입니다.다음은 이 표를 예로 들어 유니버설 매퍼를 어떻게 사용하는지 소개한다.
Maven 의존

<!--  Mapper -->
<dependency>
  <groupId>tk.mybatis</groupId>
  <artifactId>mapper</artifactId>
  <version>3.3.9</version>
</dependency>
SpringMVC 구성

<!--   Mapper -->
<beanclass="tk.mybatis.spring.mapper.MapperScannerConfigurer">
  <propertyname="basePackage"value="cn.com.bluemoon.bd.service.spider.dao"/>
  <propertyname="properties">
    <value>
      mappers=tk.mybatis.mapper.common.Mapper
    </value>
  </property>
</bean>
이곳에서 사용하도록 주의하세요 tk.mybatis.spring.mapper.MapperScannerConfigure 원래 Mybatis를 바꿉니다org.mybatis.spring.mapper.MapperScannerConfigurer .
어셈블 매개변수 설명:
  • UUID: UUID를 생성하는 방법을 설정하려면 OGNL 방식으로 설정해야 하며 반환 값을 제한하지 않지만 필드 형식과 일치해야 합니다
  • IDENTITY: 메인 키를 되찾는 방식입니다. 설정할 수 있는 내용은 다음 편에서 어떻게 사용하는지 설명합니다
  • ORDER:의order 속성, 옵션 값은 BEFORE와 After입니다
  • catalog: 데이터베이스의catalog, 이 값을 설정하면 조회할 때 표명은catalog가 설정한 접두사를 가지고 있습니다
  • schema: 같은 catalog,catalog 우선순위가 schema보다 높다
  • seqFormat: 시퀀스 획득 규칙, {num} 포맷 파라미터를 사용합니다. 기본값은 {0}입니다.Oracle에 대해 선택할 수 있는 매개 변수는 모두 4개입니다. 0, 1, 2, 3은 SequenceName, ColumnName, PropertyName, TableName입니다
  • notempty: insert와 update에서 문자열 유형을 판단할 지 여부! =',소수의 방법이 사용될 것이다
  • style: 실체와 표를 변환할 때의 규칙, 기본 낙타 봉은 밑줄을 긋고, 선택할 수 있는 값은normal용 실체 이름과 필드 이름입니다.camelhump는 기본값이고 낙타봉은 밑줄을 그립니다.uppercase를 대문자로 변환하기;lowercase를 소문자로 변환합니다
  • enableMethodAnnotation: 지원 방법의 JPA 메모를 제어할 수 있습니다. 기본false..
  • 대부분의 경우 이런 매개 변수를 사용하지 않고 스스로 연구할 수 있는 특수한 상황이 있다.
    실체류의 작법
    하나의 원칙을 기억하십시오: 실체 클래스의 필드 수량 >= 데이터베이스 테이블에서 조작해야 할 필드 수량.기본적으로 실체 클래스의 모든 필드는 테이블의 필드로 동작합니다. 추가 필드가 있으면 추가해야 합니다 @Transient 주해.
    
    @Table(name = "test_table")
    public class TestTableVOimplements Serializable{
      private static final long serialVersionUID = 1L;
      @Id
      @GeneratedValue(generator = "JDBC")
      private Long id;
    
      @Transient
      private String userId;
      private String name;
      private Timestamp createTime;
      private String createUserId;
      private Timestamp updateTime;
      private String updateUserId;
      private Integer isDelete;  
      //  get、set...  
    }
    설명:
  • 테이블 이름은 기본적으로 클래스 이름을 사용하고 낙타 봉은 밑줄을 그립니다(대문자만 처리). 예를 들어 UserInfo는 기본적으로 사용자 _info .
  • 테이블 이름은 @Table (name = "tableName") 을 사용하여 지정할 수 있으며, 첫 번째 기본 규칙에 부합되지 않는 경우 이런 방식으로 테이블 이름을 지정할 수 있습니다
  • 필드 기본값은 @Column과 마찬가지로 모두 테이블 필드로 사용되며, 기본 필드는 Java 객체의 Field 이름인 낙타봉에 밑줄을 긋는 형식입니다
  • @Column (name = "fieldName") 을 사용하여 세 번째 규칙에 맞지 않는 필드 이름을 지정할 수 있습니다
  • @Transient 메모를 사용하면 필드를 무시할 수 있으며, 이 메모를 추가한 필드는 테이블 필드로 사용되지 않습니다
  • @Id 주석을 메인 키로 하는 필드가 있어야 합니다. 여러 개의 @Id 주석을 공동 메인 키로 할 수 있습니다
  • MySQL의 자체 증가 필드인 경우 @GeneratedValue(generator = "JDBC")를 추가하면 됩니다..
  • DAO 쓰기
    전통적인 Mybatis 쓰기에서 DAO 인터페이스는 Mapper 파일과 연결되어야 한다. 즉, SQL을 작성하여 DAO 인터페이스를 실현하는 방법이 필요하다.범용 Mapper에서 DAO는 하나의 범용 인터페이스만 계승하면 다음과 같은 다양한 방법을 사용할 수 있습니다.
    범용 Mapper를 상속하려면 범용을 지정해야 합니다.
    
    public interface TestTableDaoextends Mapper<TestTableVO>{
    }
    일단 마퍼를 계승하면 계승된 마퍼는 마퍼의 모든 일반적인 방법을 가지게 된다.
    Select
    방법: Listselect(T record);
    설명: 엔티티의 속성 값에 따라 조회하고 조회 조건은 등호를 사용합니다.
    방법: T selectByPrimaryKey(Object key);
    설명: 키 필드에 따라 조회합니다. 방법 매개 변수는 완전한 키 속성을 포함해야 합니다. 조회 조건은 등호를 사용합니다.
    메서드: ListselectAll();
    설명: 모든 결과를 조회하면 select(null) 방법이 같은 효과를 얻을 수 있습니다
    방법: T selectOne(T record);
    설명: 실체 중의 속성에 따라 조회를 하면 하나의 반환값만 있을 수 있고 여러 가지 결과는 이상을 던지고 조회 조건은 등호를 사용한다
    방법: int selectCount(T record);
    설명: 엔티티의 속성 조회 총수에 따라 조회 조건에 등호를 사용합니다.
    Insert
    방법: int insert(T record);
    설명: 실체를 저장하면null의 속성도 저장되고 데이터베이스 기본값을 사용하지 않습니다.
    방법: int insertSelective(T record);
    설명: 실체를 저장하면null의 속성은 저장되지 않고 데이터베이스 기본값을 사용합니다
    Update
    방법: int updateByPrimaryKey(T record);
    설명: 메인 키에 따라 실체의 모든 필드를 업데이트하면null 값이 업데이트됩니다
    방법: int updateByPrimaryKeySelective(T record);
    설명: 키 업데이트 속성에 따라null이 아닌 값
    Delete
    방법: int delete(T record);
    설명: 엔티티 속성을 기준으로 삭제하고 조회 기준은 등호를 사용합니다.
    방법: int deleteByPrimaryKey(Object key),
    설명: 키 필드에 따라 삭제합니다. 메소드 매개 변수는 전체 키 속성을 포함해야 합니다.
    예제 방법
    방법: ListselectByExample(Object example);
    설명: Example 기준 질의
    중점: 이 검색은 Example 클래스를 통해 검색 열을 지정하고, selectProperties 방법을 통해 검색 열을 지정합니다.
    방법: int selectCountByExample(Object example),
    설명: 총 조회 수는 Example 기준
    방법: int updateByExample(@Param("record") T record, @Param("example") Object example);
    설명: Example 조건에 따라 실체 record에 포함된 모든 속성을 업데이트하면 null 값이 업데이트됩니다.
    방법: int updateByExample Selective(@Param("record") T record, @Param("example") Object example);
    설명: Example 조건에 따라 실체 record에 포함된 null이 아닌 속성 값을 업데이트합니다.
    메서드: int deleteByExample(Object example),
    설명: 예제 기준에 따라 데이터 삭제
    코드에서 사용
    서비스에 dao를 주입하면 사용할 수 있습니다.
    
    @Autowired
    private TestTableDao testTableDao;
    다음은 대략적인 쓰기 방법을 보여 줍니다.
    새로 추가됨
    
    TestTableVO vo = new TestTableVO();
    //  vo ...
    int row = testTableDao.insertSelective(vo);
    
    수정하다
    
    TestTableVO vo = new TestTableVO();
    //  vo ...
    int row = testTableDao.updateByPrimaryKeySelective(vo);
    
    단일 질의
    
    TestTableVO vo = new TestTableVO();
    vo.setId(123L);
    TestTableVO result = testTableDao.selectOne(vo);
    
    조건 조회
    
    //  Example
    Example example = new Example(TestTableVO.class);
    //  Criteria
    Example.Criteria criteria = example.createCriteria();
    //  
    criteria.andEqualTo("isDelete", 0);
    criteria.andLike("name", "%abc123%");
    List<TestTableVO> list = testTableDao.selectByExample(example);
    
    총결산
    유니버설 매퍼의 원리는 반사를 통해 실체류의 정보를 얻고 해당하는 SQL을 구성하는 것이다. 따라서 우리는 실체류를 잘 유지하기만 하면 되고 복잡하고 변화가 많은 수요에 대처하는 데 큰 편의를 제공한다.위에서 서술한 것은 유니버설 마퍼의 간단한 사용법일 뿐이다. 실제 프로젝트에서 업무에 따라 유니버설 마퍼를 바탕으로 입도가 더 크고 유니버설하며 더 좋은 방법을 봉인해야 한다.
    Spring Boot 구성 포함
    Maven
    
    <!--mybatis-->
    <dependency>
      <groupId>org.mybatis.spring.boot</groupId>
      <artifactId>mybatis-spring-boot-starter</artifactId>
      <version>1.3.1</version>
    </dependency>
    <!--mapper-->
    <dependency>
      <groupId>tk.mybatis</groupId>
      <artifactId>mapper-spring-boot-starter</artifactId>
      <version>1.1.4</version>
    </dependency>
    
    application.properties 구성
    
    #mapper
    #mappers  
    mapper.mappers=tk.mybatis.mapper.common.Mapper
    mapper.not-empty=false
    mapper.identity=MYSQL
    
    
    이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.

    좋은 웹페이지 즐겨찾기