Mybatis 에서 Mapper 맵 파일 사용 에 대한 자세 한 설명

17103 단어 MybatisMapper반사
이 어 이 글 에서 나 는 Mapper 맵 파일 에 대해 상세 하 게 설명 할 것 이다.
Mapper 맵 파일 은 xml 형식 파일 로 ibatis-3-mapper.dtd 와 같은 dtd 파일 규범 을 따라 야 합 니 다.우 리 는 먼저 어떤 설정 을 지원 하 는 지 대체적으로 봅 시다.다음 과 같이 Eclipse 에서 화면 을 캡 처 했 습 니 다.

위의 그림 에서 볼 수 있 듯 이 맵 파일 은를 루트 노드 로 하고 루트 노드 에서 9 개의 요 소 를 지원 합 니 다.각각 insert,update,delete,select(추가 삭제 검사)입 니 다.cache、cache-ref、resultMap、parameterMap、sql。
다음 글 에서 우 리 는 먼저 첨삭 과 수정 에 대해 설명 한 다음 에 조사 에 대해 상세 하 게 설명 하고 마지막 으로 다른 다섯 가지 요 소 를 간단하게 설명 할 것 이다.
(1)insert、update、delete
설정 파일 부터 봅 시다.

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE mapper  
PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" 
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd"> 

<!-- mapper       ,   namespace    dao -->
<mapper namespace="com.dy.dao.UserDao">

  <insert
   <!-- 1. id (    )
    id            ,          。 
          (namespace)     dao  , 
      id     dao       (        ),  id          -->
   
   id="addUser"
   
   <!-- 2. parameterType (    ,    mybatis      )
                       ,      ,mybatis   ParameterHandler              typeHandler    
    parameterType         ,   int, short, long, string   ,        (   ) -->
   
   parameterType="user"
   
   <!-- 3. flushCache (    ,     true)
          true,           ,                  ,   :true(    、       ) -->
   
   flushCache="true"
   
   <!-- 4. statementType (    ,     PREPARED)
    STATEMENT,PREPARED   CALLABLE    。    MyBatis      Statement,PreparedStatement   CallableStatement,   :PREPARED。 -->
   
   statementType="PREPARED"
   
   <!-- 5. keyProperty (    ,    unset)
    (   insert   update   )        ,MyBatis     getGeneratedKeys          insert     selectKey          ,  :unset。            ,               。 -->
   
   keyProperty=""
   
   <!-- 6. keyColumn   (    )
    (   insert   update   )              ,           (  PostgreSQL)    ,                   。            ,               。 -->
   
   keyColumn=""
   
   <!-- 7. useGeneratedKeys (    ,    false)
    (   insert   update   )    MyBatis    JDBC   getGeneratedKeys                 (  :  MySQL   SQL Server                    ),   :false。 -->
   
   useGeneratedKeys="false"
   
   <!-- 8. timeout (    ,    unset,     )
                ,                  。     unset(    )。 -->
   timeout="20">

  <update
   id="updateUser"
   parameterType="user"
   flushCache="true"
   statementType="PREPARED"
   timeout="20">

  <delete
   id="deleteUser"
   parameterType="user"
   flushCache="true"
   statementType="PREPARED"
   timeout="20">
</mapper>
위 에서 비교적 전면적 인 설정 설명 을 제 시 했 지만 실제 사용 과정 에서 모두 설정 할 필요 가 없 으 며 자신의 필요 에 따라 일부 설정 항목 을 삭제 할 수 있 습 니 다.
여기 서 나 는 내 프로필 을 열거 했다.간소화 한 후에 다음 과 같다.

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE mapper  
PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" 
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="com.majing.learning.mybatis.dao.UserDao">
	
	<insert id="addUser" parameterType="user" useGeneratedKeys="true" keyProperty="id">
		insert into user(name,password,age) values(#{name},#{password},#{age})
	</insert>
	
	<delete id="deleteUser" parameterType="int">
		delete from user where id = #{id}
	</delete>
	
	<update id="updateUser" parameterType="user" >
		update user set name = #{name}, password = #{password}, age = #{age} where id = #{id}
	</update>
	
	
 
</mapper>
이 parameterType 을 user 로 설정 한 것 은 설정 하지 않 으 면 이니셜 소문 자 뒤의 이름 을 사용자 라 고 자동 으로 설정 하기 때 문 입 니 다.하지만 type:Alias 를 사용 하여 설정 하 는 것 을 권장 합 니 다.유일 하 게 설명 해 야 할 것 은요소 의 useGenerated Keys 와 key Properties 속성 입 니 다.이 두 속성 은 데이터베이스 의 메 인 키 를 가 져 오 는 데 사 용 됩 니 다.
데이터베이스 에 서 는 항상 데이터베이스 시트 에 자체 적 으로 증가 하 는 열 을 메 인 키 로 설정 합 니 다.만약 에 우리 가 데이터 베 이 스 를 조작 한 후에 이 메 인 키 를 얻 으 려 면 어떻게 해 야 합 니까?위 에서 말 한 바 와 같이 mysql 데이터베이스 와 같은 자체 성장 을 지원 하 는 데이터베이스 라면 useGenerated Keys 와 key Properties 속성 만 설정 하면 되 지만,자체 성장 을 지원 하지 않 는 데이터베이스(예 를 들 어 oracle)에 대해 서 는 어떻게 해 야 합 니까?
my batis 에 서 는요소 아래 에서하위 요 소 를 제공 하여 이 문 제 를 해결 하 는 데 도움 을 주 었 습 니 다.설정 보기:

<selectKey
    <!-- selectKey               。            ,               。 -->
    keyProperty="id"
    <!--      。MyBatis         ,                  。MyBatis                ,     。             ,               Object     Map。 -->
    resultType="int"
    <!--         BEFORE   AFTER。      BEFORE,          ,   keyProperty         。      AFTER,         ,    selectKey    -     Oracle       ,                。 -->
    order="BEFORE"
    <!--      ,MyBatis    STATEMENT,PREPARED   CALLABLE        ,     PreparedStatement   CallableStatement   。 -->
    statementType="PREPARED">
</selectKey>
자체 성장 특성 을 사용 할 수 없 는 데이터 베 이 스 를 대상 으로 아래 설정 을 사용 하여 같은 기능 을 수행 할 수 있 습 니 다.

<insert id="insertUser" parameterType="com.dy.entity.User">
      <!-- oracle    id    ,    id    ,   id -->
      
    <selectKey resultType="int" order="BEFORE" keyProperty="id">
       select seq_user_id.nextval as id from dual
    </selectKey>
 
      insert into user(id, name, password, age, deleteFlag) 
        values(#{id}, #{name}, #{password}, #{age}, #{deleteFlag})
  </insert>
insert,update,delete 에 대해 이 야 기 를 끝 냈 습 니 다.다음은 비교적 많이 사용 하 는 select 를 살 펴 보 겠 습 니 다.
(2)select、resultType、resultMap
먼저 select 요소 가 어떤 설정 을 설정 할 수 있 는 지 살 펴 보 겠 습 니 다.

<select
    <!-- 1. id (    )
    id            ,          。 
          (namespace)     dao  , 
      id     dao       (        ),  id          -->
   
   id="findUserById"
   
   <!-- 2. parameterType (    ,    mybatis      )
                       ,      ,mybatis   ParameterHandler              typeHandler    
    parameterType         ,   int, short, long, string   ,        (   ) -->
   parameterType="int"
   
   <!-- 3. resultType (resultType   resultMap      )
     resultType        ,            ,   java  ,    javabean -->
   resultType="User"
   
   <!-- 4. resultMap (resultType   resultMap      )
     resultMap         resultMap         ,   mybatis            -->
   resultMap="userResultMap"
   
   <!-- 5. flushCache (    )
           true,           ,                  ,   :false -->
   flushCache="false"
   
   <!-- 6. useCache (    )
           true,                ,   :  select     true -->
   useCache="true"
   
   <!-- 7. timeout (    ) 
                 ,                  。     unset(    )-->
   timeout="10000"
   
   <!-- 8. fetchSize (    ) 
                                  。     unset(    )-->
   fetchSize="256"
   
   <!-- 9. statementType (    ) 
     STATEMENT,PREPARED   CALLABLE    。    MyBatis      Statement,PreparedStatement   CallableStatement,   :PREPARED-->
   statementType="PREPARED"
   
   <!-- 10. resultSetType (    ) 
     FORWARD_ONLY,SCROLL_SENSITIVE   SCROLL_INSENSITIVE     ,     unset (    )-->
   resultSetType="FORWARD_ONLY">
우 리 는 구체 적 인 예 를 들 어 보 자.

<select id="findUserById" resultType="User">
	select * from user where id = #{id}
</select>
여기 서 저 희 는 사용자 id 에 따라 이 사용자 의 정 보 를 조회 합 니 다.resultType=User 는 별명 입 니 다.만약 에 저희 가 이러한 일대일 문 제 를 접 하 게 된다 면 하나의 실 체 를 간단하게 정의 할 수 있 습 니 다.이 실 체 는 데이터베이스 시트 의 기록 을 대표 하면 됩 니 다.그러나 만약 에 우리 가 한 쌍 의 많은 문제 에 부 딪 히 면 이곳 의 사용자 정 보 를 조회 하 는 데 있어 모든 사용자 가 여러 가지 관심 을 가지 고 모든 사용자 의 관심 정 보 를 유지 해 야 한다 면 우 리 는 아래 의 데이터 시트 구조 가 존재 할 수 있 습 니 다.

CREATE TABLE `user` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(255) NOT NULL,
 `password` varchar(255) NOT NULL,
 `age` int(3) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8;
 
CREATE TABLE `userinterests` (
 `userid` int(11) DEFAULT NULL,
 `interestid` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
CREATE TABLE `interests` (
 `interestid` int(11) NOT NULL,
 `interestname` varchar(255) DEFAULT NULL,
 PRIMARY KEY (`interestid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
그 중에서 user 표 는 사용자 정 보 를 기록 하 는 데 사용 되 고 interests 표 는 모든 관심 라벨 을 유지 하 는 데 사용 되 며 userinterests 는 모든 사용자 의 관심 상황 을 유지 하 는 데 사 용 됩 니 다.
이때 사용자 id 에 따라 사용자 의 정보 와 관심 정 보 를 조회 해 야 한다 면 어떻게 해 야 합 니까?이 럴 때 우 리 는

좋은 웹페이지 즐겨찾기