ホームページ > Java > &#&チュートリアル > MyBatisの複数条件クエリの説明

MyBatisの複数条件クエリの説明

巴扎黑
リリース: 2017-07-23 13:45:48
オリジナル
2509 人が閲覧しました

1: 動的 SQL を使用して複数条件クエリを完了します

a: if+where を使用して複数条件クエリを実装します

まず第一に、シナリオの要件です。学年とクラスのテーブルがあり、最初の要件は以下を実行することです。ファジークエリ名と年齢に基づく条件 クエリ、インターフェース層メソッド

 public  List<student>  getStudentByIf(student stu);
ログイン後にコピー

2 つ目はマッピングファイルの構成

 <select id="getStudentByIf" parameterType="stu" resultType="stu">select * from student       <where>   <if test="stuAge!=0">   and stuAge>#{stuAge}       </if> <if test="stuName!=null"> and stuName LIKE &#39;%&#39; #{stuName} &#39;%&#39;             </if>   </where></select>
ログイン後にコピー

テスト

 studentDao dao = MyBatis.getSessionTwo().getMapper(studentDao.= "z"List<student> list="----------"+
ログイン後にコピー

---- ------ zhangyu
---- ------zy
----------zy
----------zhang

 <br/>
ログイン後にコピー

b : 分類時に選択

この方法は Java と同じです。複数の状況を判断するには、

インターフェース クラス

  public List<student> getAllStudentByLike(Map<String, Object> userMap);  //使用map作为参数
ログイン後にコピー

マッピングを変更するだけです。ファイル

 <span style="color: #0000ff"><</span><span style="color: #800000">select </span><span style="color: #ff0000">id</span><span style="color: #0000ff">="getAllStudentByLike"</span><span style="color: #ff0000"> parameterType</span><span style="color: #0000ff">="Map"</span><span style="color: #ff0000"> resultType</span><span style="color: #0000ff">="stu"</span><span style="color: #0000ff">></span><span style="color: #000000">select * from student</span><span style="color: #0000ff"><</span><span style="color: #800000">where</span><span style="color: #0000ff">></span><span style="color: #0000ff"><</span><span style="color: #800000">choose</span><span style="color: #0000ff">></span><span style="color: #0000ff"><</span><span style="color: #800000">when </span><span style="color: #ff0000">test</span><span style="color: #0000ff">="stuName!=null"</span><span style="color: #0000ff">></span><span style="color: #000000"> stuName like CONCAT(&#39;%&#39;,#{stuName},&#39;%&#39;)</span><span style="color: #0000ff"></</span><span style="color: #800000">when</span><span style="color: #0000ff">></span><span style="color: #0000ff"><</span><span style="color: #800000">when </span><span style="color: #ff0000">test</span><span style="color: #0000ff">="stuAge!=0"</span><span style="color: #0000ff">></span><span style="color: #000000"> stuAge> #{stuAge}</span><span style="color: #0000ff"></</span><span style="color: #800000">when</span><span style="color: #0000ff">><br/></span>
ログイン後にコピー
<otherwise>
    1=1
</otherwise>
ログイン後にコピー
<span style="color: #0000ff"><br/></span><span style="color: #0000ff"></</span><span style="color: #800000">choose</span><span style="color: #0000ff">></span><span style="color: #0000ff"></</span><span style="color: #800000">where</span><span style="color: #0000ff">></span><span style="color: #0000ff"></</span><span style="color: #800000">select</span><span style="color: #0000ff">></span>
ログイン後にコピー

結果

zhangyu
zy
zy
zhang
ログイン後にコピー

c: foreach を使用して複雑なクエリを完了するには 3 つの方法があります

1 つ目: 渡されるパラメーターは配列型です

2 番目のタイプ: リスト コレクションを渡す

//传一组 xueshengID public List<student> getStudentBystuId_foreach_array(Integer[] ints);




映射文件配置 <!--跟据学生id查询学生Interger-->
    <select id="getStudentBystuId_foreach_array" resultMap="studentList">select * from student<if test="array.length>0">where stuId IN/*数组形式传入学生Id*/<foreach collection="array" item="stu" open="(" separator="," close=")">  #{stu}</foreach>
        </if>
    </select>
ログイン後にコピー

  Integer[] ints = {2,3,4};
        List<student> list = dao.getStudentBystuId_foreach_array(ints);for (student item:list) {
            System.out.println(item.getStuName());
        }
ログイン後にコピー

テスト:

   public List<student> getStudentBystuId_foreach_list(List<Integer> list);
ログイン後にコピー

3 番目のタイプ: に基づくコレクション地図

  <!--跟据学生id查询学生list方式--><select id="getStudentBystuId_foreach_list" resultMap="studentList">select * from student<if test="list.size>0">where stuId IN
        /*集合形式传入学生Id*/<foreach collection="list" item="stu" open="(" separator="," close=")">#{stu}</foreach></if></select>
ログイン後にコピー

 studentDao dao = MyBatis.getSessionTwo().getMapper(studentDao.class);
        Integer ints = 2;
        List<Integer> list = new ArrayList<Integer>();
        list.add(ints);
        List<student> stulist = dao.getStudentBystuId_foreach_list(list);
        for (student item:stulist) {
            System.out.println(item.getStuName());
        }
ログイン後にコピー

 public List<student> getStudentBystuId_foreach_map(Map<String, Object> stuMap);
ログイン後にコピー

結果を印刷するには、次の手順を実行します。

d; 1 対多の 2 つの実装方法

主に resultMapper の設定の違いによるもの

インターフェースメソッド

 <!--跟据学生id查询学生map方式--><select id="getStudentBystuId_foreach_map" resultMap="studentList">select * from student where stuId IN
        /*集合形式传入学生Id*/<foreach collection="stuId" item="stu" open="(" separator="," close=")">    <!--collection是自己定义的,就是map的key值-->#{stu}</foreach></select>
ログイン後にコピー

マッピングファイルの設定

<span style="color: #008000">  Map<String ,Object> stumap = new HashMap<String, Object>();
        List<Integer> listStuId = new ArrayList<Integer>();
        listStuId.add(2);
        listStuId.add(3);
        listStuId.add(4);
        stumap.put("stuId",listStuId);
         List<student> list = dao.getStudentBystuId_foreach_map(stumap);
        for (student item:list
             ) {
            System.out.println(item.getStuName());
        }</span><span style="color: #008000"><br/></span>
ログイン後にコピー

rrリー

リーリー

 public grade getGradeById(int gradeId);
ログイン後にコピー

 <span style="color: #008000"><!--</span><span style="color: #008000">实现一 对多的第一中实现</span><span style="color: #008000">--></span><span style="color: #0000ff"><</span><span style="color: #800000">resultMap </span><span style="color: #ff0000">id</span><span style="color: #0000ff">="gradeMapOne"</span><span style="color: #ff0000"> type</span><span style="color: #0000ff">="grade"</span><span style="color: #0000ff">></span><span style="color: #0000ff"><</span><span style="color: #800000">id </span><span style="color: #ff0000">column</span><span style="color: #0000ff">="gradeId"</span><span style="color: #ff0000"> property</span><span style="color: #0000ff">="gradeId"</span><span style="color: #0000ff">></</span><span style="color: #800000">id</span><span style="color: #0000ff">></span><span style="color: #0000ff"><</span><span style="color: #800000">result </span><span style="color: #ff0000">column</span><span style="color: #0000ff">="gradeName"</span><span style="color: #ff0000"> property</span><span style="color: #0000ff">="gradeName"</span><span style="color: #0000ff">></</span><span style="color: #800000">result</span><span style="color: #0000ff">></span><span style="color: #0000ff"><</span><span style="color: #800000">collection </span><span style="color: #ff0000">property</span><span style="color: #0000ff">="gatStudent"</span><span style="color: #ff0000"> ofType</span><span style="color: #0000ff">="stu"</span><span style="color: #0000ff">></span><span style="color: #0000ff"><</span><span style="color: #800000">id </span><span style="color: #ff0000">column</span><span style="color: #0000ff">="stuUd"</span><span style="color: #ff0000"> property</span><span style="color: #0000ff">="stuId"</span><span style="color: #0000ff">></</span><span style="color: #800000">id</span><span style="color: #0000ff">></span><span style="color: #0000ff"><</span><span style="color: #800000">result </span><span style="color: #ff0000">column</span><span style="color: #0000ff">="stuName"</span><span style="color: #ff0000"> property</span><span style="color: #0000ff">="stuName"</span><span style="color: #0000ff">></</span><span style="color: #800000">result</span><span style="color: #0000ff">></span><span style="color: #0000ff"><</span><span style="color: #800000">result </span><span style="color: #ff0000">column</span><span style="color: #0000ff">="stuAge"</span><span style="color: #ff0000"> property</span><span style="color: #0000ff">="stuAge"</span><span style="color: #0000ff">></</span><span style="color: #800000">result</span><span style="color: #0000ff">></span><span style="color: #0000ff"></</span><span style="color: #800000">collection</span><span style="color: #0000ff">></span><span style="color: #0000ff"></</span><span style="color: #800000">resultMap</span><span style="color: #0000ff">></span><span style="color: #008000"><!--</span><span style="color: #008000">实现一 对多的第二中实现</span><span style="color: #008000">--></span><span style="color: #0000ff"><</span><span style="color: #800000">resultMap </span><span style="color: #ff0000">id</span><span style="color: #0000ff">="gradeMap"</span><span style="color: #ff0000"> type</span><span style="color: #0000ff">="entity.grade"</span><span style="color: #0000ff">></span><span style="color: #0000ff"><</span><span style="color: #800000">id </span><span style="color: #ff0000">column</span><span style="color: #0000ff">="gradeId"</span><span style="color: #ff0000"> property</span><span style="color: #0000ff">="gradeId"</span><span style="color: #0000ff">></</span><span style="color: #800000">id</span><span style="color: #0000ff">></span><span style="color: #0000ff"><</span><span style="color: #800000">result </span><span style="color: #ff0000">column</span><span style="color: #0000ff">="gradeName"</span><span style="color: #ff0000"> property</span><span style="color: #0000ff">="gradeName"</span><span style="color: #0000ff">></</span><span style="color: #800000">result</span><span style="color: #0000ff">></span><span style="color: #0000ff"><</span><span style="color: #800000">collection </span><span style="color: #ff0000">property</span><span style="color: #0000ff">="gatStudent"</span><span style="color: #ff0000"> ofType</span><span style="color: #0000ff">="student"</span><span style="color: #ff0000"> select</span><span style="color: #0000ff">="getStudentById"</span><span style="color: #ff0000"> column</span><span style="color: #0000ff">="gradeId"</span><span style="color: #0000ff">></</span><span style="color: #800000">collection</span><span style="color: #0000ff">>    <!--column的值主要作为下次查询的条件,既查询学生的条件--></span><span style="color: #0000ff"></</span><span style="color: #800000">resultMap</span><span style="color: #0000ff">><br/></span>
ログイン後にコピー
どちらの方法でも達成できる、印刷効果

プラン 1 の印刷効果

==> GradeId = ? A sql

==> パラメータ: 1(整数)

<== 列: GradeId、gradeName、stuId、stuName、stuAge、stuGrade

<= = 行: 1, S 1297、2、張玉、19、1

<== 行: 1、S1297、3、zy、20、1

<== 行: 1、S1297、4、zy、21、1
<== 合計: 3
zhangyu

zy

zy

終了コード 0 でプロセスが終了しました

オプション 2 の印刷効果


==> 準備中: select * from Grade where GradeId=? ====最初の SQL
==> パラメータ: 1(整数)
< == 列: GradeId、gradeName
<== 行: 1、S1297
====> 準備: select * from students where stuGrade = ? ========== 2 番目の SQL
== ==> パラメータ: 1(Long)
<==== 列: stuId、stuName、stuAge、stuGrade
<==== 行: 2、zhangyu、19、1
<==== 行: 3, zy, 20, 1

<==== 行: 4, zy, 21, 1

< ==== 合計: 3

zhangyuzy

zy

プロセスは終了コード 0 で終了しました


以上がMyBatisの複数条件クエリの説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート