내 연락처 정보
우편메소피아@프로톤메일.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
《마이바티스 이론 40개 질문》다음 2개의 기사가 포함되어 있습니다:
새 태그에 추가:keyProperty=“ID”
그게 다야.
<insert id="insert" useGeneratedKeys="true" keyProperty="userId" >
insert into user(user_name, user_password, create_time)
values(#{userName}, #{userPassword} , #{createTime, jdbcType=TIMESTAMP})
</insert>
(1) 쿼리를 통해 SQL 필드 이름의 별칭이 엔터티 클래스의 속성 이름과 일치하도록 명령문에서 필드 이름의 별칭을 정의합니다.
<select id="getOrder" parameterType="int" resultType="com.jourwon.pojo.Order">
select order_id id, order_no orderno, order_price price form orders
where order_id=#{id};
</select>
(2) 합격 <resultMap>
필드 이름과 엔터티 클래스 속성 이름 간의 일대일 대응을 매핑합니다.
<select id="getOrder" parameterType="int" resultMap="orderResultMap">
select * from orders where order_id=#{id}
</select>
<resultMap type="com.jourwon.pojo.Order" id="orderResultMap">
<!-- 用id属性来映射主键字段 -->
<id property="id" column="order_id">
<!-- 用result属性来映射非主键字段,property为实体类属性名,column为数据库表中的属性 -->
<result property="orderno" column="order_no" />
<result property="price" column="order_price" />
</reslutMap>
(1) 인터페이스 구현 클래스 상속 SqlSessionDaoSupport
: 이 방법을 사용하려면 다음을 작성해야 합니다. mapper
상호 작용,mapper
인터페이스 구현 클래스,mapper.xml
문서.
sqlMapConfig.xml
중간 구성mapper.xml
위치.<mappers>
<mapper resource="mapper.xml 文件的地址" />
<mapper resource="mapper.xml 文件的地址" />
</mappers>
mapper
상호 작용.SqlSessionDaoSupport
。mapper
메소드에서 사용할 수 있습니다.this.getSqlSession()
데이터 추가, 삭제, 수정, 확인을 수행합니다.spring
구성.<bean id=" " class="mapper 接口的实现">
<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean>
(2) 용도 org.mybatis.spring.mapper.MapperFactoryBean
。
sqlMapConfig.xml
중간 구성mapper.xml
위치mapper.xml
그리고mapper
인터페이스는 동일한 이름을 갖고 동일한 디렉터리에 있으므로 여기에서는 구성이 필요하지 않습니다.mapper
상호 작용.<mappers>
<mapper resource="mapper.xml 文件的地址" />
<mapper resource="mapper.xml 文件的地址" />
</mappers>
mapper.xml
가운데namespace
~을 위한mapper
인터페이스의 주소입니다.mapper
인터페이스의 메소드 이름 및mapper.xml
에 정의됨statement
~의id
일관성을 유지하십시오.Spring
에 정의되어 있습니다.<bean id="" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="mapper 接口地址" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
(3) 용도 mapper
스캐너.
mapper.xml
문서 작성.mapper.xml
가운데namespace
~을 위한mapper
인터페이스의 주소입니다.mapper
인터페이스의 메소드 이름 및mapper.xml
에 정의됨statement
~의id
일관성을 유지하십시오.mapper.xml
그리고mapper
인터페이스 이름이 일관되게 유지되면 필요하지 않습니다.sqlMapConfig.xml
에서 구성합니다.mapper
상호 작용.알아채다mapper.xml
파일 이름과mapper
인터페이스 이름은 일관되어야 하며 동일한 디렉터리에 배치되어야 합니다.mapper
스캐너.<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="mapper 接口包地址"></property>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
spring
컨테이너에서 가져오기mapper
구현 객체.인터페이스 바인딩은 MyBatis에서 임의로 인터페이스를 정의한 후, 인터페이스 내의 메소드를 SQL과 결합하는 것입니다. 성명바인딩하면 인터페이스 메서드를 직접 호출할 수 있으므로 원본과 비교하면 SqlSession
제공된 방법을 사용하면 보다 유연한 선택과 설정을 할 수 있습니다.
인터페이스 바인딩을 구현하는 방법에는 두 가지가 있습니다.
@Select
、@Update
바인딩할 SQL 문이 포함된 주석을 기다립니다.xml
내부에 SQL을 작성하여 바인딩해야 합니다.xml
매핑 파일에서namespace
인터페이스의 전체 경로 이름이어야 합니다.SQL 문이 비교적 간단한 경우 주석 바인딩을 사용합니다. SQL 문이 비교적 복잡한 경우에는 주석 바인딩을 사용합니다.xml
바인딩, 일반 용도xml
더 많은 바인딩이 있습니다.mapper.xml
정의된 각 SQL의id
같은.mapper.xml
정의된 각 SQL의parameterType
같은 유형의.mapper.xml
정의된 각 SQL의resultType
같은 유형의.Mapper.xml
파일에namespace
이것이 Mapper 인터페이스의 클래스 경로입니다.proxy
객체, 프록시 객체proxy
대신 인터페이스 메소드가 가로채어 실행됩니다.MappedStatement
SQL을 표현한 후 SQL 실행 결과를 반환합니다.namespace
,그래서 id
구성되지 않은 경우 반복될 수 있습니다.namespace
,그래서 id
결국 반복할 수 없습니다.namespace
필수는 아니며 모범 사례입니다.namespace + id
이다 M ap < 문자열 , 매핑된 문 > 맵<String, MappedStatement>중ㅏ피<성아르 자형~에g,중ㅏ페이지이자형디성ㅏ티이자형중이자형N티> 사용할 키(없는 경우)namespace
, 남은 것만 id
,그래서,id
중복으로 인해 데이터가 서로 덮어쓰일 수 있습니다.알았어요namespace
,자연 id
반복하시면 됩니다,namespace
다른,namespace + id
당연히 다릅니다.MyBatis는 모든 Xml 구성 정보를 올인원 중량 객체로 캡슐화합니다. Configuration
내부. XML 매핑 파일에서,<parameterMap>
태그는 다음과 같이 구문 분석됩니다.ParameterMap
객체의 각 하위 요소는 다음과 같이 구문 분석됩니다.ParameterMapping
물체.<resultMap>
태그는 다음과 같이 구문 분석됩니다.ResultMap
객체의 각 하위 요소는 다음과 같이 구문 분석됩니다.ResultMapping
물체.모든<select>
、<insert>
、<update>
、<delete>
태그는 다음과 같이 구문 분석됩니다.MappedStatement
개체, 태그의 SQL은 다음과 같이 구문 분석됩니다.BoundSql
물체.
<resultMap>
태그는 열 이름과 개체 속성 이름 간의 매핑 관계를 하나씩 정의합니다.T_NAME AS NAME
, 객체 속성 이름은 일반적으로 name
, 소문자이지만 열 이름은 대소문자를 구분하지 않습니다. MyBatis는 열 이름의 대소문자를 무시하고 해당 객체 속성 이름을 지능적으로 찾을 수도 있습니다. T_NAME AS NaMe
, MyBatis는 여전히 정상적으로 작동할 수 있습니다.마이바티스는 컬럼명과 속성명 간의 매핑 관계를 맺은 후 리플렉션을 통해 객체를 생성하고, 매핑 관계를 찾을 수 없는 속성에 대해서는 리플렉션을 이용해 객체의 속성에 하나씩 값을 할당하고 이를 반환한다. , 과제를 완료할 수 없습니다.
그 밖에도 많은 태그가 있지만, <resultMap>
、<parameterMap>
、<sql>
、<include>
、<selectKey>
, 동적 SQL
9
9
9 태그:trim
、where
、set
、foreach
、if
、choose
、when
、otherwise
、bind
기다리다.~에<sql>
SQL 조각 태그의 경우 통과<include>
태그는 SQL 조각을 소개합니다.<selectKey>
자동 증가를 지원하지 않는 기본 키에 대한 정책 라벨을 생성합니다.
MyBatis는 Xml 매핑 파일을 순서대로 구문 분석하지만 참조된 B 태그는 여전히 어디에서나 정의할 수 있으며 MyBatis는 이를 올바르게 식별할 수 있습니다.
원칙은 MyBatis가 A 태그를 구문 분석하고 A 태그가 B 태그를 참조하지만 B 태그가 구문 분석되지 않았으며 아직 존재하지 않음을 발견한다는 것입니다. 이때 MyBatis는 A 태그를 해결되지 않은 것으로 표시한 다음 계속합니다. B 태그를 포함한 나머지 태그를 구문 분석하기 위해 모든 태그가 구문 분석된 후 MyBatis는 A 태그를 구문 분석할 때 B 태그가 이미 존재하므로 A 태그를 정상적으로 구문 분석할 수 있습니다.
할 수 있다, 할 수 있을 뿐만 아니라 일대다, 일대일,충분해요 다대다, 다대일 . 이는 다음과 같이 달성됩니다.
MyBatis는 열거 클래스를 매핑할 수 있을 뿐만 아니라 어떤 객체든 테이블의 열에 매핑할 수 있습니다.매핑 방법은 맞춤형입니다.TypeHandler
,성취하다 TypeHandler
~의setParameter()
그리고getResult()
인터페이스 방법.
TypeHandler
그것에는 2개의 기능이 있습니다, 하나는 완료하는 것입니다javaType
에게jdbcType
두 번째 변환이 완료되었습니다.jdbcType
에게javaType
변환은 다음과 같이 반영됩니다.setParameter()
그리고getResult()
두 가지 방법은 각각 SQL 물음표 자리 표시자 매개 변수를 설정하고 열 쿼리 결과를 얻는 것을 나타냅니다.
MyBatis 동적 SQL을 사용하면 Xml 매핑 파일에 태그 형식으로 동적 SQL을 작성하여 MyBatis가 제공하는 논리적 판단 및 동적 접합 기능을 완성할 수 있습니다.
9
9
9 동적 SQL 태그:trim
、where
、set
、foreach
、if
、choose
、when
、otherwise
、bind
。
실행 원칙은 다음과 같습니다. OGNL
SQL 매개변수 객체에서 표현식 값을 계산하고 표현식 값에 따라 SQL을 동적으로 결합하여 동적 SQL 기능을 완성합니다.
마이바티스는 RowBounds
개체에 페이지가 매겨져 있습니다.ResultSet
결과 집합에 의해 수행되는 메모리 페이징은 물리적 페이징이 아닙니다. SQL에서 물리적 페이징과 함께 매개 변수를 직접 작성하여 물리적 페이징 기능을 완료할 수도 있고, 페이징 플러그인을 사용하여 물리적 페이징을 완료할 수도 있습니다.
페이징 플러그인의 기본 원리는 MyBatis에서 제공하는 플러그인 인터페이스를 사용하여 커스텀 플러그인을 구현하고, 플러그인의 가로채기 방식에서 실행될 SQL을 가로채고, 그에 따라 SQL을 다시 작성하는 것이다. 에게 dialect
방언, 해당 물리적 페이징 문 및 물리적 페이징 매개변수를 추가합니다.
예:
select * from student
SQL을 가로채고 다음과 같이 다시 작성합니다.
select t.* from (select * from student) t limit 0, 10
MyBatis는 다음 용도로만 쓸 수 있습니다. ParameterHandler
、ResultSetHandler
、StatementHandler
、Executor
이것
4
4
4 인터페이스 플러그인의 일종인 MyBatis는 JDK의 동적 프록시를 사용하여 인터페이스 메소드 차단 기능을 구현하기 위해 차단해야 하는 인터페이스에 대한 프록시 객체를 생성합니다.
4
4
4 인터페이스 객체의 메소드, 특히 차단 메소드로 들어갑니다.InvocationHandler
~의invoke()
물론 메서드는 사용자가 가로채도록 지정한 메서드만 가로채게 됩니다.
마이바티스 구현 Interceptor
인터페이스 및 재정의intercept()
그런 다음 플러그인에 대한 주석을 작성하고 인터셉트하려는 인터페이스의 메소드를 지정하십시오. 구성 파일에 작성한 플러그인을 구성하는 것을 잊지 마십시오.
PerpetualCache
HashMap 로컬 캐시, 저장 범위는 Session입니다.flush
또는close
그 후에는 세션의 모든 캐시가 지워지고 기본적으로 첫 번째 수준 캐시가 켜집니다.PerpetualCache
, HashMap 저장소, 차이점은 저장소 범위가 Mapper
(Namespace
), 저장 소스는 다음과 같이 사용자 정의할 수 있습니다. Ehcache
.두 번째 수준 캐시는 기본적으로 활성화되지 않습니다. 두 번째 수준 캐시를 활성화하려면 두 번째 수준 캐시 속성 클래스를 구현해야 합니다.Serializable
매핑 파일에서 구성 가능한 직렬화 인터페이스(객체의 상태를 저장하는 데 사용할 수 있음)<cache/>
。C
/ U
/ D
작업 후 기본적으로 이 범위의 모든 파일select
캐시는 다음과 같습니다.clear
。