상세 MyBatis로 구성 (b)

상세 MyBatis로 구성 (b)

IMG

  1. 글로벌 MybatisConfig

1. 구성 내용과 순서

MybatisConfig.xml은 MyBatis로 글로벌 설정 파일, 구성 내용이며, 다음과 같이 순서는 그입니다 :

1 : 특성 (속성)

2 : 설정 (전역 매개 변수)

3 : typeAliases (유형 별칭)

4 : typeHandlers (프로세서 유형)

5 : ObjectFactory를 (객체 공장)

6 : 플러그인 (플러그인)

7 : 환경 (환경 오브젝트 컬렉션 속성)

8 : 환경 (하위 속성 개체 환경)

9 :의 transactionManager (트랜잭션 관리)

10은 dataSource (데이터 소스)

11 : 맵퍼 (사상)

1.1. 속성 (특성)

  • 속성의 속성

당신은 데이터베이스 구성 정보를로드 할 수 있습니다. 에 SRC / 메인 / 자원에서 만든 Db.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test?characterEncoding=utf8
jdbc.username=root
jdbc.password=123456

Db.properties는 MybatisConfig.xml에로드

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration> 
    <!-- 读取数据库配置信息 --> 
    <properties resource="db.properties"></properties> 
    <environments default="development"> 
        <environment id="development"> 
            <transactionManager type="JDBC" /> 
            <dataSource type="POOLED"> 
                <property name="driver" value="${jdbc.driver}" /> 
                <property name="url" value="${jdbc.url}" /> 
                <property name="username" value="${jdbc.username}" /> 
                <property name="password" value="${jdbc.password}" /> 
            </dataSource> 
        </environment> 
    </environments>
</configuration>
  • 맵퍼 그래피 (사상)

매퍼 글로벌 설정 파일에로드에 대한 파일을 매핑의 MyBatis는 매핑 파일을로드하는 네 가지 방법이있다. 이것은 또 다른 자원, URL, 클래스, 패키지입니다. 다음 레퍼런스 구성은 :

<mappers>
    <mapper resource="userInfoMapper.xml" />
    <mapper url="file:///D:\mybatis-1\config\userInfoMapper.xml" />
    <mapper class="cn.it.mapper.IUsersMapper"/>
    <package name="cn.it.mapper"/>
</mappers>

자원

같은 클래스의 경로에 대해 자원의 사용 :

<mapper resource="userInfoMapper.xml" />

이 방법을 사용하면 맵 파일을로드 할 때입니다.

URL

같은 정규화 된 경로를 사용 :

<mapper url="file:///D:\mybatis-1\config\userInfoMapper.xml" />

이 방법을 사용하면 맵 파일을로드 할 때입니다. 절대 경로의 사용으로 인해,이 방법을 사용하는 것은 권장되지 않는다.

수업

같은 매퍼 인터페이스 경로를 사용

<mapper class="cn.itlaobing.mybatis.mapper.IUserInfoMapper"/>

참고 :이 방법은 같은 이름과 같은 디렉토리에 매퍼 및 매퍼 인터페이스 이름 매핑 파일이 필요합니다.

꾸러미

이러한 모든 매퍼 인터페이스에 지정된 패킷 등록 :

<package name="cn.itlaobing.mybatis.mapper"/>

참고 :이 방법은 같은 이름과 같은 디렉토리에 매퍼 및 매퍼 인터페이스 이름 매핑 파일이 필요합니다. 당신이 대량로드를 달성 할 수있는이 방법을 권장합니다.

지도 parameterType을 입력합니다

ParameterType 입력 맵 속성 매퍼 문에 의해 설정된다. 모든 입력 매핑은 다음 두 단계를 완료하는 데 필요한 :

  1. 매퍼 매핑 구성
  2. 매퍼 인터페이스 정의

MyBatis로 입력 매핑은 자바 열 값의 SQL 문에 개체를 매핑하는 것이다. 입력 맵핑의 MyBatis 형태는 단순한 유형 입력 매핑 POJO 타입 입력 매핑 VO 유형 입력 맵핑 입력 HashMap의 매핑을 포함한다.

  • 간단한 타입 입력 매핑

요구 사항 : ID 사용자 쿼리에 의해 지정

  1. 매퍼 매핑 구성
<select id="findUserInfoById" parameterType="int" resultType="cn.it.model.UsersModel"> 		select * from userInfo where userid=#{userid}
</select>
  1. 매퍼 인터페이스 정의
public UsersModel findUsersById(int userid)
  • POJO 유형의 입력 맵핑

요구 사항 : 사용자 추가

  1. 매퍼 매핑 구성
<insert id="insertUsers" parameterType="cn.it.model.UsersModel"> 
    <selectKey keyProperty="userid" order="AFTER" resultType="java.lang.Integer"> 
        select last_insert_id()
    </selectKey> 
    insert into users(username,password,createtime) values(#{username},#{password},#{createtime});
</insert>
  1. 매퍼 인터페이스 정의
public void insertUsers(UsersModel model);
  • HashMap의 타입 입력 매핑

요구 사항 : 사용자에 따르면 사용자 이름과 성별을 조회

  1. 매퍼 매핑 구성
<select id="findByHashMap" parameterType="hashmap" resultType="cn.it.model.UsersModel"> 	SELECT * FROM users WHERE username =#{username} AND password=#{password}
</select>
  1. 매퍼 인터페이스 정의
public List<UsersModel>  findByHashMap(HashMap<String, String> hashMap) ;

3. 출력 매핑 resultType

ResultType 입력 맵 속성 매퍼 문에 의해 설정된다. 출력 매핑 모두 다음 두 단계를 완료해야합니다 :

  1. 매퍼 매핑 구성
  2. 매퍼 인터페이스 정의

MyBatis로 출력 매핑 조회의 결과가 자바 객체에 매핑된다. MyBatis로는 POJO 단일 레코드 오브젝트 맵핑 레코드 세트에 질의하는 복수의 매핑 문의되며, 자바의 단순한 형태로 매핑 한 데이터 쿼리 (예를 들어, 집합 쿼리) 일 수있다.

쿼리는 하나의 레코드, MyBatis로 호출 selectOne 메서드 () 메소드이며, POJO 객체에 결과를 매핑하는 경우. 쿼리 여러 레코드 경우, MyBatis로 호출 selectList의 () 메소드는, 그 결과는 POJO의 컬렉션에 매핑됩니다. selectOne 메서드 () 또는 selectList의 사이의 MyBatis 호출 ()의 값에있어서 매퍼 인터페이스에 따라 결정된 복귀 리턴 값의 타입이 설정되면 호출 selectList의 인 () 메소드 리턴 값 POJO 객체 selectOne 메서드 () 메소드 간의 통화 인 경우.

  • 간단한 형식 출력 매핑

테이블에 사용자 정보 쿼리의 레코드 번호 : 수요

  1. 매퍼 매핑 구성
<select id="findUsersCount" resultType="int">    
    select count(1) from userInfo
</select>
  1. 매퍼 인터페이스 정의

공공 INT findUsersCount ();

  • POJO는 출력 매핑 객체

요구 사항 : findUserInfoById이 경우 ID 지정된 사용자 쿼리를 따르면.

  1. 매퍼 매핑 구성
<select id="findUsersById" parameterType="int"    resultType="cn.it.model.UsersModel">    	select * from users where userid=#{userid}
</select>
  1. 매퍼 인터페이스 정의
public UsersModel findUsersById(int id);
  • HashMap의 형식 출력 매핑

요구 사항 : 모든 사용자에 대한 쿼리.

  1. 매퍼 매핑 구성
<select id="findToHashMap" resultType="hashmap">
    select * from users
</select>
  1. 매퍼 인터페이스 정의
public List<Map<String, String>> findToHashMap() throws Exception;

4. 동적 SQL

IMG

사용자 이름을 입력, 사용자는 성별과 주문 번호입니다

select * from userInfos where username=#{username} 
and gender=#{gender}and id 
in(select userId from userorders where orderid=#{orderId})

이 많은 조건, 마찬가지로 상기 절은 사용자에 의해 선택된 동적 모자이크 필터 기준을 필요로하는 부분. MyBatis로 동적 SQL은 스 플라이 싱에 의해 동적 SQL 문에 MyBatis로 제공 라벨의 다양한 의미 동적 SQL을 제공한다.

  1. 매퍼 매핑 구성
<!-- 动态SQL-多条件查询 -->
<select id="findUsersCondition" parameterType="hashmap"resultType="cn.it.model.UsersModel">
    select * from users     
    <!-- where标签自动去掉满足条件的第一个and -->     
    <where>         
        <!-- 如果userName不为空,则将userName拼接到查询条件中 -->         
        <if test="username!=null">
            and userName=#{username}         
        </if>         
        <!-- 如果gender不为空,则将gender拼接到查询条件中 --> 
        <if test="password!=null">          
            and password=#{password}     
        </if>     
        <!-- 如果orderId不为空,则将orderId拼接到查询条件中 -->   
        <if test="orderId!=null">     
            and id in(select userId from orders where id=#{orderId})  
        </if> 
    </where>
</select> 
  1. 매퍼 인터페이스 정의
public List<UserInfosModel> findUserInfosCondition(HashMap<String, String> condition);

5. 지연로드

우리는 효과적으로 사용자가 얻을 때 다시로드 테이블을 연결하는 데이터베이스의 압력, 첫 번째 질의 메인 쿼리 테이블 정보, 정보를 줄일 수 있습니다 MyBatis로 지연로드 기능을 사용하여 관련 정보를 조회 할 필요가있다.

협회와 컬렉션의 MyBatis 한 협회의 많은 게으른 로딩을 달성 할 수있다. 게으른 로딩이 사용 resultType 할 수 없을 때 된 resultMap을 사용합니다.

  1. 시작 지연로드

MyBatis로 기본이 열려 게으른 로딩 구성이 아닙니다, 당신은 게으른 로딩 켜 aggressiveLazyLoading에서 lazyLoadingEnabled에 의해 SqlMapperConfig.xml의 구성 설정이 필요합니다.

<settings>
    <setting name="lazyLoadingEnabled" value="true"/> 
    <setting name="aggressiveLazyLoading" value="false"/>
</settings>

6. 캐시

  1. 왜 사용 캐싱

캐시 (또는 캐시 라 함)로서 데이터베이스의 성능을 향상시키기 위해베이스에 압력을 감산한다. 캐시 구현 원리는 사용 후에서 데이터베이스 개체에서 쿼리를 파괴하지 않는 것입니다,하지만 다시 한 번 메모리에서 직접 직접 사용할 수있는 개체를 얻을 필요가있을 때 메모리 (캐시)에, (캐시) 더 이상에, 저장 SELECT 문의 데이터베이스 구현하여, 따라서 데이터베이스의 성능을 향상, 데이터베이스 쿼리의 수를 줄일 수있다. 지도 캐시는 캐시 된 데이터 집합을 사용하는 것입니다.

MyBatis로는 캐시 및 보조 캐시가 있습니다. 레벨 캐시 범위는 동일 SQLSESSION이며, 같은 SQLSESSION에 두 번 같은 문을 SQL 실행, 처음으로 데이터가 데이터베이스 쿼리 작성 캐시 (메모리)에 완료 될 것이며, 두 번째는 캐시에서 데이터를 얻을 것이다 더 이상 데이터베이스 쿼리에서 쿼리 효율성을 향상 없습니다 것입니다. SQLSESSION의 끝은 캐시에 SQLSESSION가 존재하지 않을 때. MyBatis로 캐시는 기본적으로 활성화되어 있습니다.

SQLSESSION 차 캐시가 동일한 공간 매퍼 다른 SQLSESSION가 동일한 공간 SQL 문 아래 회 수행 SQL 즉 동일한 파라미터에 전송 범위 다수가 공유하고, 우선, 동일한 최종 SQL 문을 수행 캐시 (메모리)에 기록 된 데이터베이스 쿼리는 두 번째 쿼리의 효율성을 개선하기 위해 데이터베이스 쿼리에서되지 않습니다 캐시에서 데이터를 가져 일단 데이터가 완료됩니다. 기본적으로 사용되지 MyBatis로하면 글로벌 캐시 매개 변수를 설정에서 구성 할 수있는 두 개의 보조 캐시의 요구를 엽니 다.

  • 소개 캐시

캐시 영역 SQLSESSION 따른 단위로 분할된다. 각 쿼리 캐시 영역은 데이터 후 데이터베이스 쿼리, 쓰기 캐싱 데이터베이스 쿼리에서 발견되지 않는 경우는, 찾기 시작합니다.

캐시 HashMap의 데이터를 사용하여 MyBatis로 내부 메모리 캐시 해시 코드 + SQLID + SQL 문에 키를 누릅니다. 지도 생성 된 자바 개체에서 쿼리 값.

  • 보조 캐시의 원리를 소개

보조 캐시 영역 매퍼 공간 분할되어 각각의 매퍼 Mapper 프록시 방법에 대한 공간이 때 이해되는 바와 같이, 상이한 2 차 캐쉬 영역에 매핑되는 경우, 데이터 맵퍼는 동일한 지역에서 동일한 네임 캐시를 조회 부문.

각 쿼리 캐시 영역은 데이터베이스 쿼리 및 캐시에 기록 된 데이터에 대한 쿼리에서 발견되지 않는 경우는, 찾기 시작합니다. MyBatis로 내부 스토리지 캐시는 HashMap, 해시 코드 + SQLID + SQL 문에 키를 사용합니다. 지도 생성 된 자바 개체에서 쿼리 값.

  • 구성이 캐시 구성

첫 번째 단계 : 보조 캐시를 켜십시오

설정이 false로, cacheEnabled 보조 캐시에 해당하는 설정을 사용하는 경우 다음 코드와 같이 보조 캐시를 활성화 SqlMapperConfig.xml, 보조 캐시를 사용할 수 없습니다.

<setting name="cacheEnabled" value="true"/>

단계 : POJO 직렬화

POJO 클래스가 구현하는 모든 직렬 인터페이스는 java.io 직렬화.

세 번째 단계 : 구성 매핑 파일

데이터베이스로부터 쿼리 및 쿼리 데이터를 캐시에 기록하지 않는 경우, 캐시를 찾기 위해 지역과 함께 시작합니다. MyBatis로 내부 스토리지 캐시는 HashMap, 해시 코드 + SQLID + SQL 문에 키를 사용합니다. 지도 생성 된 자바 개체에서 쿼리 값.

  • 구성이 캐시 구성

첫 번째 단계 : 보조 캐시를 켜십시오

설정이 false로, cacheEnabled 보조 캐시에 해당하는 설정을 사용하는 경우 다음 코드와 같이 보조 캐시를 활성화 SqlMapperConfig.xml, 보조 캐시를 사용할 수 없습니다.

<setting name="cacheEnabled" value="true"/>

단계 : POJO 직렬화

POJO 클래스가 구현하는 모든 직렬 인터페이스는 java.io 직렬화.

세 번째 단계 : 구성 매핑 파일

매퍼에서 매핑 파일은 매퍼 개방 L2 캐시를 의미 추가됩니다.

게시 10 개 원래 기사 · 원의 찬양 3 · 전망 (65)

추천

출처blog.csdn.net/weixin_42174239/article/details/104524551