詳細にMyBatisのマッピングファイルの設定

共通の追加や削除、検索に変更

<?xml version = "1.0"エンコード= "UTF-8"?> 
<!DOCTYPEマッパー
        PUBLIC " - // mybatis.org//DTDマッパー3.0 // EN" 
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <マッパー名前空間= "com.chy.mapper。 StudentMapper "> 
    <インサートID =" insertStudent」のParameterType = "com.chy.pojo.Student"> 
        INSERT INTO student_tb(ID、名前、年齢、スコア)VALUES(#{ID}、#{名前}、#{年齢} 、#{スコア}) </挿入> 
    <更新ID = "updateStudent"のParameterType = "com.chy.pojo.Student"> 
        UPDATE student_tb・セット名 =#{名前}、年齢=#{年齢}、スコア=#{スコア} WHERE ID = #{ID}
     </更新>


    


        DELETE FROM student_tb WHERE ID = #{ID}
     </削除> 

    <SELECT ID = "queryById"のParameterType = " 整数 " resultTypeと=" com.chy.pojo.Student" > 
        SELECT * FROM student_tb WHERE ID = #{ID}
     < / select>の
</マッパー>

名前空間のファイルの<マッパー>一般的なマッピングがに位置して  マッピングファイル名のパッケージと名前 たとえば、マップ・ファイル内のcom.chy.mapperパケットStudentMapper.xml => com.chy.mapper.StudentMapper

ParameterTypeが渡されたパラメータのデータ型を指定し、resultTypeとは、クエリ結果がデータの種類にマッピングされている指定します。

 

 

学生の学生= sqlSession.selectOne( " com.chy.mapper.StudentMapper.queryById "、1);

名前空間と対応する要素IDによって参照されるパラメータのタイプは、ParameterTypeに合格しました。resultTypeと戻り値のデータ型を指定しました。

 あなたは一意のIDによって参照される要素を特定することができれば実際には、それは名前空間、書き込み専用IDを省略することができます。 

 

 

 


 

 

 

ファジィクエリ

正確なクエリ:氏名=「CHY」、名前フィールドはCHYだけ一致ではなく、どのようなchy1しなければならない場合など、同一である必要があります。

ファジィクエリ:ロング缶構成する限り、名前フィールドがCHYを含めることができるよう名LIKE「%CHY%」は、CHY、1chy1を一致させることができます例えば......

 

 

<SELECT ID = "queryByNameは"のParameterType = "string"はresultTypeと= "学生"> 
        student_tb FROM WHERE名SELECT * LIKE '%$ {値}%' 
</選択>

%は、他の文字を表すワイルドカードです。

機能に加えて$#{} {}、そこに連結ストリング。

 

 

{}安全でない接続文字列、SQLインジェクションを使用して$は、接続文字列に連結するSQL()関数の中で可能な限り、安全のため、防止することができません。

<SELECT ID = "queryByName"のParameterType = "string"はresultTypeと= "文字列"> 
        のような名前student_tbから選択した名前CONCAT( '%'、#{値}、 '%')が
 </選択>

文字列のSQL CONCAT()関数は、入力順に接続されるように、複数のストリングに接続することができます。

なお} {#を使用して

 

 

それはに渡されたパラメータが含まれています CONCAT( '%'、#{値}、 '%') '%の$ {値}%'
入ってくるパラメータで始まります CONCAT( '%'、#{値}) '%の$ {値}'
渡された引数の終わりに 連結(#{値}、 '%') '$ {値}%'

 

 

 


  

 

着信データは、数値、文字列、#{}、{}のような単純なタイプである場合、$容易変数名を書くことができ、名前知らセンスは一般#で書かれ、参照する{}クラスフィールド名POJO、$ { }多くの場合、値を書き込みます。

入ってくるオブジェクトPOJOクラスの#{}場合は、$ {名前}フィールドはPOJOクラスを記述することができます。

 

 


 

 

 

POJOベースクラスのメンバ変数、基本的なデータ型マッピングファイルは、パッケージの種類を使用するようにします。

例えば、int型の場合=>整数、長い=>ロング。

 

 

例えば:

結果テーブルの同級生の不在、財政支出の表は、今月記入していません

あなたは、SQL 0手段を使用する場合は、他の人はそれが0のテストだと思った、今月の支出は0です。

フィールドがnull値の表現を使用していませんでした。他の人は今月の支出を充填していない、不在、あなたはこの男が得点しなかったことを知って、ヌルを参照してください。

 

 

こうした0の整数に変換することができます0 int型などの包装の数値型に変換することができます。

ただし、数値型のベース値よりもパッケージの多くの種類:nullは、この値は基本値に対応するタイプでは見られません。

 

 

プライベートint型スコア;私たちは、このフィールドの割り当てを与えていない、初期値にJVMが0は、データベースに挿入され、0です。

プライベート整数得点、私たちは、このフィールドの割り当てを与えていない、ラッパークラスの初期値にJVMがデータベースに挿入され、nullでnullです。値が0である場合、それに割り当て、スコア= 0は、0がそのように挿入データベースことであるたいです。

いくつかの基本的なタイプより、より包括的なパッケージタイプは、基本的なタイプは、それはまた、それが基本的なタイプも表現することができ表すことができないと述べ表すことができます。

POJOメンバ変数のクラス、データ型マッピングファイルはパッケージタイプを使用するようにします。

 

 

 


 

 

 

 <マッパー>子要素の共通

  • <選択>、<挿入>、<更新>、<削除>
  • SQL断片<SQL>リユーザブルを定義するために使用され
  • <このresultMap>

 

 

<SELECT>、<挿入>、<更新>、<削除>性質を持っています

  • userCache二次キャッシュ制御オープニング、クロージング、ブール値
  • flushCacheに呼び出し、SQLステートメントの後、ローカルキャッシュおよび二次キャッシュのクエリは前に、ブール値をクリアする必要があります
  • デフォルトでは、秒単位で設定されたタイムアウトタイムアウトタイムアウトは、例外がスローされます
  • ワーク、任意の値にMyBatisのステートメントが提供されたJDBCするStatementType使用:STATEMENT、PREPARED(デフォルト値)、CALLABLE、それぞれJDBC文に対応する、のPreparedStatement、CallableStatementの

 

 

<select>要素のユニークな属性

  • resultTypeとクエリの結果は、データの種類にマッピングされ
  • このresultMap参照<このresultMap>
  • レコードの合計数を取得FETCHSIZE

 

 


 

 

<このresultMap>使い方

クエリの結果セットの<このresultMap>カスタムマッピングルール。

<このresultMap ID = ""タイプ= ""> 
        <コンストラクタ> 
            <idArg /> 
            <引数/> 
        </コンストラクタ> 

        <ID /> 
        <結果/> 

        <関連性= "" /> 
        <判別のJavaType = ""> 
            < ケースの値= "" /> 
        </弁別> 
</このresultMap>

タイプは、結果セットがデータ型にマッピングされている指定します。

<コンストラクタ>について:POJOクラスがパラメータのコンストラクタを提供していますが、<コンストラクタ>パラメータ渡してコンストラクタを参照して、<idArg> biographeesキー、<引数>通常のパスを使用して、引数なしのコンストラクタを提供するために、表示されません。コラム。

<ID>、<結果>のための:POJOクラスは唯一の変数は、<ID>プライマリーキー送信、POJOインスタンスのクラスのメンバーに(セッターメソッドを呼び出す本質的に)二つの要素のための引数のコンストラクタ、割り当てを提供しません<結果>は、通常のフィールドを渡します。

<協会> 1つの関連付けを指定するために使用され、<弁別>は、多くの関連付けを指定するために使用されます。

 

 

使用例

    <このresultMapのID = "このresultMap"タイプ= "com.chy.pojo.Student"> 
        <idプロパティ= "ID"列= "ID" /> 
        <結果プロパティ= "名前"欄= "名前" /> 
        <結果プロパティ= "年齢"列= "スコア" /> 
        <resultプロパティ= "スコア"の列= "スコア" /> 
    </このresultMap> 

    <。SELECT ID = "queryById"のParameterType = "整数" このresultMap = "このresultMap" > 
        SELECT * FROM student_tb WHERE ID = #{ID}
     </選択>

プロパティ指定されたメンバ変数は、テーブル内のクラス、列指定されたフィールドをPOJO。結果は自動的にレコードの指定したフィールドが実行される設定、インスタンス変数に割り当てられたメンバーは、クラスをPOJO。

テーブル内のメンバ変数名のPOJOクラスのフィールド名がない同じである場合は、デフォルトプロパティは、カラムは、同じである、我々は<このresultMap>自分自身を設定する必要があります。

使用このresultMapに参照ID <このresultMap>で<選択>。

 

 

 


 

 

 

プライマリキーレコードの挿入と自己通電

提供される(1)インクリメント主キーテーブルに設計された主キーのレコードは、データベースを自動的にIDの値をセットするときに、値が設定されていません。主キーフィールドのレコードを挿入した後、自動的に値に対応するクラスのPOJOインスタンスを提供しました。

<ID = "insertStudent"のParameterType = "com.chy.pojo.Student"インサートkeyProperty = "ID" useGeneratedKeys = "真" > 
        INSERT INTO student_tb(名前、年齢、スコア)VALUES(#{名前}、#{年齢} 、#{スコア})
 </インサート>

 keyProperty、挿入、更新、戻り値は、あなたが複数のフィールドを割り当てたい場合は、カンマで区切られ、クラス指定されたフィールドのPOJOの操作に割り当てられています。

useGeneratedKeys、コールへのJDBC getGeneratedKeys()自己増力によって生成された主キーフィールドにデータベースの値を取得します。

 

学生の学生= 学生(); 
student.setName( "CHY" ); 
sqlSession.insert( "com.chy.mapper.StudentMapper.insertStudent" 学生)。
System.out.println(student.getId())。

 主キーフィールドの値を提供する必要はありません。

 

 

 

(2)MySQLは、SQL Serverが、我々は、このOracleを使用する場合は、自動的にSQL Serverの増分主キーがチェックされていない主キーデータベースやMySQLを、インクリメントされない、主キーの増分を設定することができ、それはすることができます。

<インサートID = "insertStudent"のParameterType = "com.chy.pojo.Student">
        <selectKey keyProperty = "ID" resultTypeと= "整数"注文= "前"> 
            (MAX(ID)がNULL、1、最大値である場合に選択student_tbから(ID)+1)
        </ selectKey> 
        INSERT INTOのstudent_tb(ID、名前、年齢、スコア)VALUES(#{ID} 、#{ 名前}、#{年齢}、#{スコア})
 </インサート>

 <SelectKey>はデータベースを照会するための主キーであり、戻り値は、<挿入>着信パラメータ(POJO例)主キーフィールドに割り当てられています。

主キーPOJOクラスに対応する属性を指定keyProperty、resultTypeと返品をデータ型にマッピングされた結果(主キー)を指定しました。

実行の順序を指定するため。前:実行中の<selectKey>挿入前に、AFTER:への挿入を実行した後、<selectKey>実行する前に。

 

選択した場合(MAX(ID)であるヌル student_tbから、1、MAX(ID)+1)

テーブルからのIDフィールドの最大クエリ(INT)、レコードがない場合、1を返し、記録場合、+1 IDの最大値を返します。

 

 

我々は、手動で主キーフィールドの値を設定する必要はありません前に:

学生の学生= 学生(); 
student.setName( "CHY" ); 
sqlSession.insert( "com.chy.mapper.StudentMapper.insertStudent" 学生)。
System.out.println(student.getId())。

 

 

 AFTER場合は、手動でプライマリキーフィールドの値を設定する必要があります。

student.setId(100)。

 

 

説明

<更新>と<挿入> <更新> IDが変更されたレコードを返すために使用される少なくとも同じ属性、サブエレメントを有します。

 

 

 


 

 

 

<。SQL>使用例

オリジナルの言葉遣い:

<SELECT ID = "queryById"のParameterType = "整数" resultTypeと= "com.chy.pojo.Student"> 
        SELECT ID = WHERE student_tb * FROM #{idは}
 </選択>

 

 

<SQL>文言を使用します。

<SQL ID = "tableNameの"> 
    student_tb 
</ SQL>が 
<選択ID = "queryByIdは"のParameterType = "整数" resultTypeと= "com.chy.pojo.Student"> 
    SELECT * FROM </ = "tableNameの" REFID挙げ> WHERE ID = #{ID}
 </選択>

<SQL>セクションのコードで定義されたSQL文、その後に<含む/>コードの部分を介してIDが含まれます。

おすすめ

転載: www.cnblogs.com/chy18883701161/p/12122079.html