상세 MyBatis로 구성 (b)
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 입력 맵 속성 매퍼 문에 의해 설정된다. 모든 입력 매핑은 다음 두 단계를 완료하는 데 필요한 :
- 매퍼 매핑 구성
- 매퍼 인터페이스 정의
MyBatis로 입력 매핑은 자바 열 값의 SQL 문에 개체를 매핑하는 것이다. 입력 맵핑의 MyBatis 형태는 단순한 유형 입력 매핑 POJO 타입 입력 매핑 VO 유형 입력 맵핑 입력 HashMap의 매핑을 포함한다.
- 간단한 타입 입력 매핑
요구 사항 : ID 사용자 쿼리에 의해 지정
- 매퍼 매핑 구성
<select id="findUserInfoById" parameterType="int" resultType="cn.it.model.UsersModel"> select * from userInfo where userid=#{userid}
</select>
- 매퍼 인터페이스 정의
public UsersModel findUsersById(int userid);
- POJO 유형의 입력 맵핑
요구 사항 : 사용자 추가
- 매퍼 매핑 구성
<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>
- 매퍼 인터페이스 정의
public void insertUsers(UsersModel model);
- HashMap의 타입 입력 매핑
요구 사항 : 사용자에 따르면 사용자 이름과 성별을 조회
- 매퍼 매핑 구성
<select id="findByHashMap" parameterType="hashmap" resultType="cn.it.model.UsersModel"> SELECT * FROM users WHERE username =#{username} AND password=#{password}
</select>
- 매퍼 인터페이스 정의
public List<UsersModel> findByHashMap(HashMap<String, String> hashMap) ;
3. 출력 매핑 resultType
ResultType 입력 맵 속성 매퍼 문에 의해 설정된다. 출력 매핑 모두 다음 두 단계를 완료해야합니다 :
- 매퍼 매핑 구성
- 매퍼 인터페이스 정의
MyBatis로 출력 매핑 조회의 결과가 자바 객체에 매핑된다. MyBatis로는 POJO 단일 레코드 오브젝트 맵핑 레코드 세트에 질의하는 복수의 매핑 문의되며, 자바의 단순한 형태로 매핑 한 데이터 쿼리 (예를 들어, 집합 쿼리) 일 수있다.
쿼리는 하나의 레코드, MyBatis로 호출 selectOne 메서드 () 메소드이며, POJO 객체에 결과를 매핑하는 경우. 쿼리 여러 레코드 경우, MyBatis로 호출 selectList의 () 메소드는, 그 결과는 POJO의 컬렉션에 매핑됩니다. selectOne 메서드 () 또는 selectList의 사이의 MyBatis 호출 ()의 값에있어서 매퍼 인터페이스에 따라 결정된 복귀 리턴 값의 타입이 설정되면 호출 selectList의 인 () 메소드 리턴 값 POJO 객체 selectOne 메서드 () 메소드 간의 통화 인 경우.
- 간단한 형식 출력 매핑
테이블에 사용자 정보 쿼리의 레코드 번호 : 수요
- 매퍼 매핑 구성
<select id="findUsersCount" resultType="int">
select count(1) from userInfo
</select>
- 매퍼 인터페이스 정의
공공 INT findUsersCount ();
- POJO는 출력 매핑 객체
요구 사항 : findUserInfoById이 경우 ID 지정된 사용자 쿼리를 따르면.
- 매퍼 매핑 구성
<select id="findUsersById" parameterType="int" resultType="cn.it.model.UsersModel"> select * from users where userid=#{userid}
</select>
- 매퍼 인터페이스 정의
public UsersModel findUsersById(int id);
- HashMap의 형식 출력 매핑
요구 사항 : 모든 사용자에 대한 쿼리.
- 매퍼 매핑 구성
<select id="findToHashMap" resultType="hashmap">
select * from users
</select>
- 매퍼 인터페이스 정의
public List<Map<String, String>> findToHashMap() throws Exception;
4. 동적 SQL
사용자 이름을 입력, 사용자는 성별과 주문 번호입니다
select * from userInfos where username=#{username}
and gender=#{gender}and id
in(select userId from userorders where orderid=#{orderId})
이 많은 조건, 마찬가지로 상기 절은 사용자에 의해 선택된 동적 모자이크 필터 기준을 필요로하는 부분. MyBatis로 동적 SQL은 스 플라이 싱에 의해 동적 SQL 문에 MyBatis로 제공 라벨의 다양한 의미 동적 SQL을 제공한다.
- 매퍼 매핑 구성
<!-- 动态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>
- 매퍼 인터페이스 정의
public List<UserInfosModel> findUserInfosCondition(HashMap<String, String> condition);
5. 지연로드
우리는 효과적으로 사용자가 얻을 때 다시로드 테이블을 연결하는 데이터베이스의 압력, 첫 번째 질의 메인 쿼리 테이블 정보, 정보를 줄일 수 있습니다 MyBatis로 지연로드 기능을 사용하여 관련 정보를 조회 할 필요가있다.
협회와 컬렉션의 MyBatis 한 협회의 많은 게으른 로딩을 달성 할 수있다. 게으른 로딩이 사용 resultType 할 수 없을 때 된 resultMap을 사용합니다.
- 시작 지연로드
MyBatis로 기본이 열려 게으른 로딩 구성이 아닙니다, 당신은 게으른 로딩 켜 aggressiveLazyLoading에서 lazyLoadingEnabled에 의해 SqlMapperConfig.xml의 구성 설정이 필요합니다.
<settings>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="false"/>
</settings>
6. 캐시
- 왜 사용 캐싱
캐시 (또는 캐시 라 함)로서 데이터베이스의 성능을 향상시키기 위해베이스에 압력을 감산한다. 캐시 구현 원리는 사용 후에서 데이터베이스 개체에서 쿼리를 파괴하지 않는 것입니다,하지만 다시 한 번 메모리에서 직접 직접 사용할 수있는 개체를 얻을 필요가있을 때 메모리 (캐시)에, (캐시) 더 이상에, 저장 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 캐시를 의미 추가됩니다.