[トップ]MyBatis Mapperプロファイルに関する知識セット

5615 ワード

(1)MyBatisマルチパラメータ伝達のデフォルトの命名方法
      マッピングの方法については、MyBatisデフォルトでは左から右へのメソッドのパラメータをparam 1、param 2…と命名し、順次類推します.私たちはこれらのデフォルトの名前をそのままSQL文で説明する必要はありません.
      まず@Paramのコメントを削除したTecher Mapper.javaは下記の通りです.http://down.51cto.com/data/539217)
package com.abc.mapper;
import com.abc.domain.Teacher;
import org.springframework.stereotype.Component;
import java.util.List;
//@Component        myTeacherMapper
//    ,       :
//http://legend2011.blog.51cto.com/3018495/980150
@Component("myTeacherMapper")
public interface TeacherMapper {
public Teacher getById(int id);
//        
public List<Teacher> findTeacherByPage(
String sort,//    
String dir,  //    
int start, //    
int limit  //    
);
}
       上記のデフォルトの命名方式によると、MyBatis対findTecher ByPage方法のパラメータは左から右のデフォルトの名前は順にです.sortはparam 1、dirはparam 2、startはparam 3、limitはparam 4です.その後、マッピングファイルのTecher Mapper.xmlにおいて、この方法に対応するSQL文では、これらの名前を{パラメータ名}として用いることができる.次の25行目に示します.
<?xml version="1.0" encoding="utf8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--     ,namespace                -->
<mapper namespace="com.abc.mapper.TeacherMapper">
<!--      -->
<resultMap id="supervisorResultMap" type="Teacher">
<id property="id"/>
<result property="name"/>
<result property="gender"/>
<result property="researchArea"column="research_area"/>
<result property="title"/>
<!--collection                。     
“     .select  id”      StudentMapper.xml  
select  getStudents。    collection       
select     ,       :
http://legend2011.blog.51cto.com/3018495/985907
-->
<collection property="supStudents" column="id" ofType="Student"
select="com.abc.mapper.StudentMapper.getStudents"/>
</resultMap>
<!--param1、param2  MyBatis             -->
<select id="findTeacherByPage" resultMap="supervisorResultMap">
select * from teacher
order by ${param1} ${param2} limit #{param3},#{param4}
</select>
</mapper>
      注解を利用する方式と同じで、orderにいます. by子文の中で〓〓{パラメータ名}を使う方式は無効で、読者は自分で実験することができます.したがって、ここでは依然として$
(2)MyBatisマルチパラメータ伝達のMap方式
前の記事ではMyBatis多パラメータ転送の注釈、パラメータのデフォルトのネーミングなどを紹介しましたが、今日はMapの方法を紹介します.前の改ページで教師の情報を調べる方法で、findTecher ByPageを例にしています.http://down.51cto.com/data/546809を選択します
      まずマッパーインターフェースTecher MapperのfindTecher ByPageを変更する方法は以下の通りです.
1
2// public  List<Teacher> findTeacherByPage(Map<String, Object> map);      したがって、ここではMapインターフェースを用いて、このインターフェースを導入すべきである:import java.util.Map
実行クラスのCollection Demoにおいて、findTecher ByPageメソッドを呼び出す関連コードは以下の通りである.
Map<String, Object> params = new HashMap<String, Object>();
// name      ,
params.put("sort", "name");
params.put("dir", "asc");
//      0   ,  2   
params.put("start", 0);
params.put("limit", 2);
//              
params.put("title", "%  ");
//        
List<Teacher> teachers = mapper.findTeacherByPage(params);
      まず一つのMapにパラメータを置いて、対応するSQL文の中でこれらのパラメータを氥氨{}の形で引用することができます.以下の通りです
<select id="findTeacherByPage" resultMap="supervisorResultMap"
parameterType="java.util.Map">
select * from teacher where title like #{title}
order by ${sort} ${dir} limit #{start},#{limit}
</select>
       以前と同じ、orderにいます. by子文には「~の形を使うべきです.実は、ここのparameterType=「java.util.Map」はいらないです.
(3)MyBatisマルチパラメータ伝達の混合方式
masthiguangさんの質問は以下の方法でパラメーターを伝えます.public List findStudents(Map) conditions 要点 page 要点 PageSize)これは、Mapタイプのパラメータもあれば、intのような一般タイプのパラメータもあるハイブリッド形式です.いろいろ模索した結果、筆者はこのような状況の処理方法を比較的順調に見つけました.
      実は簡単です.デフォルトの命名方式(MyBatis多パラメータ転送のデフォルトの命名方法例)では、MyBatisのパラメータに対するデフォルトの名前を紹介しています.この名前はこの場合も有効です.私たちが必要なのは、このネーミングに基づいてMapのパラメータ値を読み取る方法です.ここではこのような方式を採用して、教師のページ別の照会を実現します.まずマッパーインターフェース(Techer Mapper.java)の中の教師のページ別の照会方法を修正した声明は以下の通りです.http://down.51cto.com/data/742758) 
//        
public List<Teacher> findTeacherByPage(
Map params, //    
int start, //    
int limit  //    
);
 (コード1)
      MyBatisはこの方法の3つのパラメータを順にparam 1、param 2、param 3と命名します.そのうち、最初のパラメータはMapタイプで、後の2つのパラメータはintタイプです.
      実行クラス(Collection Demo.java)のクエリコードのセグメントは以下の通りである. 
Map<String, Object> params =
new HashMap<String, Object>();
// name      ,
params.put("sort", "name");
params.put("dir", "asc");
//              
params.put("title", "%  ");
//        
List<Teacher> teachers =
// name      ,  0       。
//  2   
mapper.findTeacherByPage(params,0, 2);
  (コード2)
      対応するマッピング構成(Techer Mapper.xml)ファイルのセグメントは以下の通りです. 
<selectid="findTeacherByPage"resultMap="supervisorResultMap">
select * from teacher where teacher.title like
#{param1.title} order by ${param1.sort} ${param1.dir} limit #{param2},#{param3}
</select>
 (コード3)
      以上のマップファイルでは、〹{param 1.title}という形でMapのtitle属性の値にアクセスできます.もちろん、orderにいます by子文では、$の形をとるべきです.(本シリーズの博文の「MyBatisマルチパラメータ伝達の注釈方式例」を参照してください.第二部分は「遭遇する可能性のあるエラー」です.第一はorderについてです. byのです.しかし、筆者が検証したところ、この例では「𞃳」を使ってもいいです.これによって、私たちは钻{パラメータのデフォルトの名前.属性名}という形式を使って、マップファイルでMapパラメータの属性値にアクセスできるようにまとめられます.