Mybatis 의 일반적인 mapper 사용

10877 단어 springmybatisjavaweb
Mybatis 의 일반적인 mapper 사용
1,maven 에 의존 추가
통합 유 니 버 설 mapper
com.github.abel 533.mapper.Mapper 에 대한 통합 은 실제 적 으로 MapperHelper 를 설정 합 니 다.모두 세 가지 방식 이 있 습 니 다.자바 인 코딩,Spring 통합 및 사용 차단기 설정 입 니 다.
(1)Java 인 코딩
Mybatis 를 단독으로 사용 하 는 것 에 대해 서 는 먼저 다음 과 같은 방식 으로 sqlSession Factory 를 만 듭 니 다.
<dependency>
    <groupId>com.github.abel533</groupId>
    <artifactId>mapper</artifactId>
    <version>2.3.4</version>
</dependency>
그 후에 JAVA 인 코딩 을 직접 사용 하면 sqlSession Factory 를 초기 화 하 는 곳 에서 아래 의 방식 으로 조작 할 수 있 습 니 다.
Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
reader.close();
위 에 파 라 메 터 를 설정 할 때 set 방법 을 하나씩 호출 하여 진행 합 니 다.MapperHelper 의 MapperHelper(Properties properties)구조 방법 을 사용 하거나 setProperties(properties)방법 을 호출 하여.properties 설정 파일 을 통 해 설정 할 수 있 습 니 다.
(2)Spring 통합
Spring 과 결합 하여 사용 할 때 xml 프로필 을 통 해 위의 자바 인 코딩 방식 의 효 과 를 얻 을 수 있 습 니 다.다음 설정:
//    sqlSessionFactory    session
session = sqlSessionFactory.openSession();
//    MapperHelper
MapperHelper mapperHelper = new MapperHelper();
//   UUID    ,  UUID        OGNL   
//    32   :@java.util.UUID@randomUUID().toString().replace("-", "")
mapperHelper.setUUID("");
//         ,   MYSQL,        
mapperHelper.setIDENTITY("HSQLDB");
//        ,  {num}     ,    {0}.nextval,
//   Oracle      3 ,  0,1,2,   SequenceName,ColumnName, PropertyName
mapperHelper.setSeqFormat("NEXT VALUE FOR {0}");
//      catalog,    ,      ,     sql  catalog.tablename
mapperHelper.setCatalog("");
//      schema,    ,      ,     sql  schema.tablename
//        catalog,    catalog.tablename
mapperHelper.setSchema("");
//             ,  AFTER,    (BEFORE|AFTER)
mapperHelper.setOrder("AFTER");
//     Mapper  
mapperHelper.registerMapper(Mapper.class);
mapperHelper.registerMapper(HsqldbMapper.class);
//     ,       
mapperHelper.processConfiguration(session.getConfiguration());
//OK - mapperHelper       
설정 에서 sqlSession 에 의존 하 는 것 을 볼 수 있 기 때문에 이런 방식 을 사용 하면 Spring 설정 에서 sqlSession 의 존 재 를 확보 해 야 합 니 다.일반적으로 Spring 에서 sqlSession 을 정의 합 니 다.일반적인 정의 방법 은 다음 과 같다.
<bean class="com.github.abel533.mapperhelper.MapperHelper"
        depends-on="sqlSession" init-method="initMapper" scope="singleton" lazy-init="false">
    <property name="mappers">
        <array>
            <!--        -->
            <value>com.kang.mybatis.userMapper.mapper</value>
        </array>
    </property>
    <!--       ,               -->
    <property name="sqlSessions" ref="sqlSession"/>
</bean>
Spring 에서 이런 방식 을 사용 할 때 Spring 이 시작 되 었 을 때 모든 유 니 버 설 Mapper 가 처리 되 었 습 니 다.뒤쪽 에 서 는 직접 통용 방법 을 사용 할 수 있 으 며 차단기 가 필요 없다.
메모:현재 Spring 과 통합 할 때 bug 가 존재 합 니 다.이 bug 가 발생 하 는 원인 은 다음 과 같 습 니 다.
만약 에 Mapper 가 프로젝트 가 시 작 될 때@Autowired 를 통 해 Service 나 다른 클래스 에 주입 되 지 않 았 다 면 이 Mapper 는 MybatisSqlSession 에 등록 되 지 않 은 Mapper 입 니 다.MapperHelper 는 시작 과정 에서 이 Mapper 를 처리 하지 않 았 기 때문에 다이나믹 SQL 은 이러한 이상 을 예화 할 수 없습니다.이 경우 차단기 로 만 처리 할 수 있다.
(3)차단기
이 세 가지 설정 방식 은 하나만 선택 하면 되 며 중복 설정 이 필요 없습니다.
차단기 기반 설정 방식 은 my batis 설정 방식 과 순수 spring 통합 방식 으로 나 뉜 다.
우선 Mybatis 설정 파일 방식:
mybatis-config.xml 에 다음 설정 을 추가 합 니 다:
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate" scope="prototype">
    <constructor-arg index="0" ref="sqlSessionFactory"/>
</bean>
그리고 순 Spring 설정 방식:
사용자 정의 인터페이스 mapper 통합 유 니 버 설 mapper
우 리 는 mapper 인터페이스 에서 통용 되 는 Mapper를 계승 할 수 있 지만,반드시 범 형를 지정 해 야 합 니 다.
예 를 들 어 다음 의 예:
public interface UserMapper extends Mapper {
}
Mapper를 계승 하면 계승 하 는 Mapper 즉 User InfoMapper 는 다음 과 같은 통용 방법 을 가지 게 됩 니 다.
<plugins>
  <plugin interceptor="com.github.abel533.mapperhelper.MapperInterceptor">
    <!--================================================-->
    <!--       (      )-->
    <!--================================================-->
    <!--UUID    -->
    <!--  UUID        OGNL   -->
    <!--   32   :@java.util.UUID@randomUUID().toString().replace("-", "")-->
    <!--<property name="UUID" value="@java.util.UUID@randomUUID().toString()"/>-->
    <!--        ,   MYSQL,        -->
    <property name="IDENTITY" value="HSQLDB"/>
    <!--       ,  {num}     ,    {0}.nextval,  Oracle-->
    <!--      3 ,  0,1,2,   SequenceName,ColumnName,PropertyName-->
    <property name="seqFormat" value="{0}.nextval"/>
    <!--            ,  AFTER,    (BEFORE|AFTER)-->
    <!--<property name="ORDER" value="AFTER"/>-->
    <!--  Mapper  ,           -->
    <property name="mappers" value="com.github.abel533.mapper.Mapper"/>
  </plugin>
</plugins>
그러나 범 형(실체 류)의 유형 은 다음 과 같은 요구 에 부합 해 야 합 니 다.
실체 클래스 는 다음 과 같은 규칙 과 데이터베이스 시트 에 따라 변환 되 며 주 해 는 모두 JPA 의 주해 입 니 다.
1)테이블 이름 은 기본적으로 클래스 이름 을 사용 하고,낙타 봉 은 밑줄 을 긋 습 니 다(대문자 만 처리 합 니 다).예 를 들 어 UserInfo 는 기본적으로 대응 하 는 테이블 이름 이 user 입 니 다.info。
2)표 이름 은@Table(name="tableName")을 사용 하여 지정 할 수 있 으 며,첫 번 째 기본 규칙 에 부합 되 지 않 는 경우 에는 이러한 방식 으로 표 이름 을 지정 할 수 있 습 니 다.
3)필드 는 기본적으로@Column 과 마찬가지 로 표 필드 로 되 어 있 으 며,표 필드 는 기본적으로 자바 대상 의 Field 이름 인 낙타 봉 을 밑줄 로 전환 합 니 다.
4)@Column(name="fieldName")을 사용 하여 세 번 째 규칙 에 맞지 않 는 필드 이름 을 지정 할 수 있 습 니 다.
5)@Transient 주 해 를 사용 하면 필드 를 무시 할 수 있 습 니 다.이 주 해 를 추가 한 필드 는 표 필드 로 사용 되 지 않 습 니 다.
6)메 인 키 의 필드 로@Id 주 해 를 설정 하 는 것 을 권장 합 니 다.여러 개의@Id 주해 필드 를 연합 메 인 키 로 사용 할 수 있 습 니 다.
7)기본 적 인 상황 에서 실체 클래스 에@Id 주 해 를 포함 하 는 필드 가 존재 하지 않 으 면 모든 필드 를 메 인 키 필드 로 사용 합 니 다(이러한 효율 은 매우 낮 습 니 다).
8)실체 류 는 계승 하여 사용 할 수 있다.
9)기본 유형,예 를 들 어 int 가 실체 필드 일 때 기본 값 0 이 있 고 제거 할 수 없 기 때문에 실체 류 에 서 는 기본 유형 을 사용 하지 말고 Integer,Long 등 기본 유형의 포장 유형 을 사용 하 는 것 을 권장 합 니 다.
위 에서 언급 한 것 외 에 도 Mapper 는 시퀀스(Oracle 지원),UUID(임의의 데이터베이스,필드 길이 32),메 인 키 자체 증가(Mysql,Hsqldb 와 유사)세 가지 방식 을 제공 했다.그 중에서 시퀀스 와 UUID 는 여러 개 를 설정 할 수 있 고 메 인 키 자체 증 가 는 하나만 설정 할 수 있다.
이 세 가지 방식 은 동시에 사용 할 수 없 으 며,동시에 존재 할 때 시퀀스>UUID>메 인 키 가 증가 하 는 우선 순위 에 따라 선택 할 수 있 습 니 다.다음은 구체 적 인 설정 방법 입 니 다.
1)사용 서열 은 다음 과 같은 주 해 를 추가 할 수 있다.
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  <property name="dataSource" ref="dataSource"/>
  <property name="mapperLocations">
    <array>
      <value>classpath:mapper/*.xml</value>
      <value>classpath:com/isea533/mybatis/mapper/*.xml</value>
    </array>
  </property>
  <property name="typeAliasesPackage" value="com.isea533.mybatis.model"/>
  <property name="plugins">
    <array>
      <bean class="com.github.abel533.mapperhelper.MapperInterceptor">
        <property name="properties">
          <!--       ,      mybatis-config.xml     -->
          <value>
            mappers=com.github.abel533.mapper.Mapper
          </value>
        </property>
      </bean>
    </array>
  </property>
</bean>
2)UUID 사용 시:
4.567913.3)메 인 키 를 사용 하여 증가:
//@Id 주해 의 필드 에 국한 되 지 않 지만 하나의 실체 클래스 에 하나만 존재 합 니 다(계승 관계 에 도 하나만 존재 합 니 다)
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
이 주 해 를 추가 하면 ID 를 다시 씁 니 다.
@Generated Value 의 generator 인 자 를 설정 하면 홈 키 를 더 많이 가 져 오 는 방법 을 지원 할 수 있 습 니 다.예 를 들 어 Oracle 에서 시퀀스 를 사용 하 는 것 입 니 다.
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY,generator = "select SEQ_ID.nextval from dual")
private Integer id;
Oracle 시퀀스 를 사용 할 때 설정 이 필요 합 니 다.

데이터 베 이 스 를 삽입 하기 전에 시퀀스 값 을 먼저 가 져 와 야 하기 때문에,그렇지 않 으 면 오 류 를 보고 할 수 있 습 니 다.
이러한 상황 에 대한 xml 는 다음 과 같 습 니 다.
4.567913.메 인 키 가 증가 하면 간단 한 쓰기 방법 도 있다.
//@Id 주해 의 필드 에 국한 되 지 않 지만 하나의 실체 클래스 에 하나만 존재 합 니 다(계승 관계 에 도 하나만 존재 합 니 다)
@GeneratedValue(generator = "JDBC")
private Integer id;
이것 은 MyBatis 로 하여 금 JDBC 의 getGenerated Keys 방법 을 사용 하여 데이터베이스 내부 에서 생 성 된 메 인 키(예 를 들 어 MySQL 과 SQL Server 와 같은 관계 데이터베이스 관리 시스템 의 자동 증가 필드)를 추출 하 게 할 것 이다.이 경우 대응 하 는 xml 는 다음 과 같 습 니 다.
4
//       null       ,      = and  
List<T> select(T record);


//       null       ,      = and  
int selectCount(T record);


//        ,        
//        ,         
//     ,key      ,    Map
T selectByPrimaryKey(Object key);


//      
//  Oracle  ,UUID,  Mysql INDENTITY    (    )
//          ,     ,      、UUID,    
int insert(T record);


//      ,     null   ,           
//  Oracle  ,UUID,  Mysql INDENTITY    (    )
//          ,     ,      、UUID,    
int insertSelective(T record);


//          null       ,      = and  
int delete(T key);


//        ,            
//        ,         
//     ,key      ,    Map
int deleteByPrimaryKey(Object key);


//        ,            
//      
int updateByPrimaryKey(T record);


//        
//      null   
int updateByPrimaryKeySelective(T record);


//  Exmaple      
int selectCountByExample(Object example);


//  Exmaple    
int deleteByExample(Object example);


//  Exmaple    
List<T> selectByExample(Object example);


//  Exmaple      (null)  
int updateByExampleSelective(@Param("record") T record, @Param("example") Object example);


//  Exmaple        
int updateByExample(@Param("record") T record, @Param("example") Object example);
유 니 버 설 mapper 를 Mybatis 설정 에 추가 합 니 다.
spring 통합 방식 을 추천 합 니 다.Mapper 인 터 페 이 스 를 스 캔 하 는 이 설정 만 있 으 면 됩 니 다.다음 과 같 습 니 다.
//        ,     (          )   
@SequenceGenerator(name="Any",sequenceName="seq_userid")
@Id
private Integer id;
       。           XML:
<insert id="insertAuthor">
  insert into Author
    (id, username, password, email,bio, favourite_section)
  values
    (seq_userid.nextval, #{username, #{password}, #{email}, #{bio}, #{favouriteSection,jdbcType=VARCHAR})
</insert>
스프링 4 에 팬 주입 을 사용 하려 면 Mapper가 있 는 가방 도 포함 해 야 합 니 다.
5.관련 블 로그
spring 통합 Mybatis 는 유 니 버 설 mapper 와 페이지 조 수 를 이용 하여 restful 스타일 의 작성 을 실현 합 니 다.

좋은 웹페이지 즐겨찾기