[トップ]MyBatis Mapperプロファイルに関する知識セット
(1)MyBatisマルチパラメータ伝達のデフォルトの命名方法
マッピングの方法については、MyBatisデフォルトでは左から右へのメソッドのパラメータをparam 1、param 2…と命名し、順次類推します.私たちはこれらのデフォルトの名前をそのままSQL文で説明する必要はありません.
まず@Paramのコメントを削除したTecher Mapper.javaは下記の通りです.http://down.51cto.com/data/539217)
(2)MyBatisマルチパラメータ伝達のMap方式
前の記事ではMyBatis多パラメータ転送の注釈、パラメータのデフォルトのネーミングなどを紹介しましたが、今日はMapの方法を紹介します.前の改ページで教師の情報を調べる方法で、findTecher ByPageを例にしています.http://down.51cto.com/data/546809を選択します
まずマッパーインターフェースTecher MapperのfindTecher ByPageを変更する方法は以下の通りです.
1
2
実行クラスのCollection Demoにおいて、findTecher ByPageメソッドを呼び出す関連コードは以下の通りである.
(3)MyBatisマルチパラメータ伝達の混合方式
masthiguangさんの質問は以下の方法でパラメーターを伝えます.public List findStudents(Map) conditions 要点 page 要点 PageSize)これは、Mapタイプのパラメータもあれば、intのような一般タイプのパラメータもあるハイブリッド形式です.いろいろ模索した結果、筆者はこのような状況の処理方法を比較的順調に見つけました.
実は簡単です.デフォルトの命名方式(MyBatis多パラメータ転送のデフォルトの命名方法例)では、MyBatisのパラメータに対するデフォルトの名前を紹介しています.この名前はこの場合も有効です.私たちが必要なのは、このネーミングに基づいてMapのパラメータ値を読み取る方法です.ここではこのような方式を採用して、教師のページ別の照会を実現します.まずマッパーインターフェース(Techer Mapper.java)の中の教師のページ別の照会方法を修正した声明は以下の通りです.http://down.51cto.com/data/742758)
MyBatisはこの方法の3つのパラメータを順にparam 1、param 2、param 3と命名します.そのうち、最初のパラメータはMapタイプで、後の2つのパラメータはintタイプです.
実行クラス(Collection Demo.java)のクエリコードのセグメントは以下の通りである.
対応するマッピング構成(Techer Mapper.xml)ファイルのセグメントは以下の通りです.
以上のマップファイルでは、〹{param 1.title}という形でMapのtitle属性の値にアクセスできます.もちろん、orderにいます by子文では、$の形をとるべきです.(本シリーズの博文の「MyBatisマルチパラメータ伝達の注釈方式例」を参照してください.第二部分は「遭遇する可能性のあるエラー」です.第一はorderについてです. byのです.しかし、筆者が検証したところ、この例では「」を使ってもいいです.これによって、私たちは钻{パラメータのデフォルトの名前.属性名}という形式を使って、マップファイルでMapパラメータの属性値にアクセスできるようにまとめられます.
マッピングの方法については、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パラメータの属性値にアクセスできるようにまとめられます.