1. ResultMap
SQLマッピングされたXMLファイルは、すべてのSQLステートメントが配置される場所です。通常、対応するインターフェイスクラスのパスとして定義されるワークスペースを定義する必要があります。 SQLステートメントマッピングファイルを記述した後、MyBatis Configuration File Mappersタグ、たとえば次のように参照する必要があります。
<mapper resource = "com/liming/manager/data/mappers/usermapper.xml"/> <mapper resource = "com/liming/manager/data/mappers/sustentmapper"/> <mapperリソース= " /> < /mappers>
JavaインターフェイスがXMLファイルへの相対パスにある場合、MyBatis構成ファイルのマッパーで宣言することはできません。
SQLは、XMLファイルのいくつかの基本要素をマップします。
(1)。キャッシュは、特定のパターンのキャッシュを構成します(2)。 Cache-Refは、別のパターンからのキャッシュを指します(3)。 ResultMapこれは、結果セット(4)からオブジェクトをロードする方法を説明する最も複雑だが強力な要素です。 SQL他のステートメント(5)で多重化できるSQLブロック。マップ挿入ステートメント(6)を挿入します。マップ更新ステートメント(7)を更新します。 Map DeLeeteステートメント(8)を削除します。選択 - [ステートメント]をマップします
1.1 resultmap
ResultMapは、MyBatisで最も重要で強力な要素です。 JDBCで結果セットを呼び出すよりもコードの90%を保存することも、JDBCがサポートしていない多くのことをすることもできます。実際、相互作用と同様のマッピングに相当する複雑なステートメントを記述するには、数千行のコードが必要になる場合があります。結果マップの目的は、不必要な結果マッピングなしの非常に簡単なステートメントです。より複雑なステートメントでは、関係を説明するために、絶対に必要なステートメント以外は必要ありません。
resultMap属性:タイプはJavaエンティティクラスです。 IDはこの結果マップの識別子です。
結果マップを設定できます。
(1)。コンストラクターは、結果をインスタンス化されたクラスコンストラクターに反映するために使用されます
a)Idarg IDパラメーター。結果セットをIDとしてマークしてグローバルコールを容易にします
b)コンストラクターへの平均反射
(2)。 ID IDの結果、結果セットをIDとしてマークしてグローバルコールを容易にします
(3)。結果は、Javabean Propertiesの通常の結果を反映しています
(4)。複雑なタイプの組み合わせ。複数の結果合成の種類
a)ネストされた結果マッピングいくつかの結果は、ネストされた関連付け自体をマッピングし、他の1つを参照することもできます
(5)。複雑なタイプのコレクションをコレクション
(6)。ネストされた結果マッピングコレクションは、別の結果を参照することもできます
(7)。識別子は結果値を使用して、使用する結果マップを決定する
a)いくつかの基本値の結果マップのケースケースケースケース
私。ネストされた結果マッピングケースシナリオ自体は結果マップであるため、同じ要素の一部を含めるか、外部結果マップを参照することもできます。
1.1.1 ID、結果
IDと結果は最も単純なマッピングであり、IDは主キーマッピングです。結果マップは、他の基本データベーステーブルフィールドからエンティティクラス属性へのマップです。
最も簡単な例:
<resultMap type="liming.student.manager.data.model.StudentEntity" id="studentResultMap"> <id property="studentId" column="STUDENT_ID" javaType="String" jdbcType="VARCHAR"/> <result property="studentName" column="STUDENT_NAME" javaType="String" jdbcType="VARCHAR"/> <結果プロパティ= "学生セックス" column = "sudent_sex" javatype = "int" jdbctype = "integer"/> <result property = "desudentbirthday" column = "desudent_birthday" javatype = "date" jdbctype = "date"/> <result property = "desudentphoto" colunid_photo "" javatipe "" javatipe " jdbctype = "blob" typehandler = "org.apache.ibatis.type.blobtypehandler" /> < /resultmap>
IDおよび結果ステートメントプロパティの構成の詳細:
財産 | 説明する | |
財産 | Javabeanにマッピングする必要がある属性名。 | |
カラム | データテーブルの列名またはラベルエイリアス。 | |
Javatype | 完全なクラス名、またはタイプエイリアス。 Javabeanと一致する場合、MyBatisは通常、それ自体でそれを検出します。次に、ハッシュマップにマッピングする場合は、Javatypeによって達成される目的を指定する必要があります。 | |
jdbctype | データテーブルでサポートされているタイプのリスト。このプロパティは、挿入、更新、または削除するときに空にすることを許可する列にのみ役立ちます。 JDBCはこれを必要としますが、MyBatisはそうではありません。 JDBC向けに直接エンコードしていて、空の可能性のある列がある場合は、このアイテムを指定する必要があります。 | |
タイプハンドラー | このプロパティを使用して、タイププロセッサをオーバーライドします。この値は、完全なクラス名またはタイプエイリアスにすることができます。 |
<resultmap inpy = "desustomentity" id = "sustentresultmap"> <constructor> <idarg javatype = "string" column = "sudent_id"/> <arg javatype = "string" column = "sudent_name"/> < </resultmap>
もちろん、StudentSentityエンティティクラスのコンストラクターメソッドを定義する必要があります。
Public StudentEntity(String StudentID、String StudentName、String StudentSex、date StudentBirthday){this.studentid = dustentid; this.studentname = sustentName; this.studentsex = sustentsex; this.studentbirthday = sustentbirthday; } 1.1.3協会
ユニオン要素は、「1対1」の関係を扱うために使用されます。マッピングされたJavaエンティティクラスのプロパティと属性のJavatypeを指定する必要があります(通常、MyBatisは自分で認識します)。対応するデータベーステーブルの列名。オーバーライドする場合は、結果値を返します。TypeHandlerを指定する必要があります。
さまざまな状況が、MyBatisに組合のロード方法を伝える必要があります。 MyBatisは2つの方法でロードできます。
(1)。選択:他のマッピングSQLステートメントを実行して、Javaエンティティタイプを返します。より柔軟性。
(2)。 Resultsmap:ネストされた結果マップを使用して、結合を介して結果セットを処理し、それらをJavaエンティティタイプにマッピングします。
たとえば、クラスはクラスの教師に対応します。
まず、クラスのクラス教師の属性を定義します。
プライベート教師教師の教師。
1.1.3.1 Selectを使用して組合を実装します
例:クラスエンティティカテゴリにクラス教師の属性があります。クラスエンティティが共同の取り組みを通じて取得される場合、クラスの教師エンティティは同時にマッピングされます。
これにより、IDに従って教師をクエリするために、TeacherMapper.xmlファイルで定義されている選択されたステートメントを直接再利用できます。また、書かれたSQLステートメントを変更する必要はありません。結果マップを直接変更するだけです。
classmapper.xmlファイルの内容の一部:
<resultmap inpy = "clessentity" id = "classResultmap"> <id property = "classid" column = "class_id" /> <resultプロパティ= "classname" column = "class_name" /> <resultプロパティ= "classeear" column = "class_year" /> <ocationsプロパティ= " id = "getClassByID" parameterType = "string" resultmap = "classResultmap"> select * from class_tbl ct where ct.class_id =#{classId}; </select>TeacherMapper.xmlファイルの一部:
<resultmap type = "teacherentity" id = "teacherresultmap"> <id property = "teacherid" column = "teacher_id" /> <result property = "teachername" colummen = "teacher_name" /> <result property = "teachersex" column = "teachex" /> <result property = "chooverbirthday =" /<resportday " column = "work_date"/> <resultプロパティ= "workdate" column = "work_date"/> <respurentプロパティ= "profession" column = "professional"/> </resultmap> <select id = "getteacher" parametertype = "string" resultmap = "teacherresultmap"> select * from teaster_tbl ower ttt.teemy_id>
1.1.3.2 resultmapを使用して組合を達成します
上記と同じ機能は、クラスを照会し、クラス教師を照会することです。 AssociationにresultMap(教師のXMLファイルで定義されている)を追加し、新しいSQL(クラステーブルを左にQuery Teacher Table)を作成する必要がありますが、教師の選択は必要ありません。
classmapper.xmlファイルの内容を変更します。
<resultmap type = "clessentity" id = "classResultmap"> <id property = "classid" column = "class_id" /> <result property = "classname" column = "class_name" /> <resultプロパティ= "classeyear" column = "class_year" /> <associationプロパティ= "教師id = "getClassAndTeacher" parameterType = "string" resultMap = "classResultMap"> select * from Class_tbl ct left Joint teacher_tbl tt on Ct.teacher_id = tt.teacher_id where ct.class_id =#{classId}; </select>TeachErresultMapについては、TeacherMapper.xmlファイルの上記のコンテンツをご覧ください。
1.1.4コレクション
集約要素は、「1対Many」関係を扱うために使用されます。マッピングJava Entityクラスの属性、属性のJavatype(通常はArrayList)を指定する必要があります。オブジェクトのリスト内のオブジェクトのタイプ(Java Entityクラス);対応するデータベーステーブルの列名。
さまざまな状況が、MyBatisに集約をロードする方法を伝える必要があります。 MyBatisは2つの方法でロードできます。
(1)。選択:他のマッピングSQLステートメントを実行して、Javaエンティティタイプを返します。より柔軟性。
(2)。 Resultsmap:ネストされた結果マップを使用して、結合を介して結果セットを処理し、それらをJavaエンティティタイプにマッピングします。
たとえば、クラスには複数の学生がいます。
最初にクラス内の学生リスト属性を定義します。
プライベートリスト<StudentStive> StudentList;
1.1.4.1 SELECTを使用して集約を実装します
使用法はユニオンに非常に似ており、違いはこれが1対多いため、一般にマップされたリストがリストされていることです。したがって、JavatypeをArrayListとして定義する必要があります。リスト内のオブジェクトのタイプを定義する必要があります。また、設定する必要があるSelectのステートメント名も定義する必要があります(ここのクエリ学生のSelectステートメント条件は、外部キークラシッドでなければならないことに注意してください)。
classmapper.xmlファイルの内容の一部:
<resultmap type = "clessentity" id = "classResultmap"> <id property = "classid" column = "class_id" /> <result property = "classname" column = "class_name" /> <resultプロパティ= "classyear" column = "class_year" /> <ocations property = "教師columen" class " javatype = "arrayList" ofType = "studentSentity" select = "getStudentByClassid"/> </resultMap> <select id = "getClassByID" parameterType = "string" resultmap = "classResultMap"> class_tbl ct.class_id =##{classid}; </select>StudentMapper.xmlファイルの一部:
<! - Javaプロパティ、データベーステーブルフィールド間のマッピング定義 - > <resultmap型= "dustentRestity" id = "desustomResultmap"> <id property = "desuted_id" /> <resustentプロパティ= "desudent_name" /> <result property = "desudent property =" dustonex " /> <ruction property" " column = "Student_BirthDay" /> < /resultMap> <! - クラスIDに基づいて学生リストをクエリ - > <選択ID = "GetStudentByClassid" parameterType = "string" resudentmap = "sustentResultmap"> <includid = "selectstudentall" /> where s.class_id =#{classid} 1.1.4.2 resultmapを使用して集約を実現します
resultMapを使用して、SQLを書き直し、学生テーブルに参加する必要があります。
<resultmap type = "clessentity" id = "classResultmap"> <id property = "classid" column = "class_id" /> <result property = "classname" column = "class_name" /> <resultプロパティ= "classeyear" column = "class_year" /> <associationプロパティ= "教師colummentity" column = "class_id" javatype = "arrayList" ofType = "desustive" resustentmap "/> </resultmap> <select id =" getClassAndTeacherStudent "parametertype =" string "resultmap =" classResultmap "> class_tbl ct lefted lettbl ct let from ct from ct.ct. CT.TEACHER_ID = TT.TEACHER_ID ON CT.TEACHER_ID ON CT.CLASS_ID =#{classID}; </select>
TeachErresultMapについては、TeacherMapper.xmlファイルの上記のコンテンツをご覧ください。 StudentMapper.xmlファイルの上記のセクションのStudentResultMapをご覧ください。
1.1.5Discriminator Disfrinator <BR />別のデータベースクエリが、多くの異なる(ただしいくつかの相関)データ型の結果セットを返す場合があります。識別子要素は、クラスの継承階層を含むこの状況を処理するように設計されています。判別器は、Javaのスイッチステートメントによく似ているため、非常に理解しやすいです。
定義差別装置は、列とJavatypeのプロパティを指定します。列は、MyBatisが比較値を探す場所です。 Javatypeは、同等のテストを確保するために使用される適切なタイプです(ただし、文字列は多くの場合有用です)。
次の例は、ClassIDが200001の場合、ClassID属性がマッピングされていることです。
<resultmap type = "liming.student.manager.data.model.studentity" id = "resultmap_studententity_discriminator"> <id property = "desudent" column = "desudent_id" javatype = "string" jdbctype = "varchar" jdbctype = "varchar"/> <resultプロパティ= "desutentsex" column = "desuted_sex" javatype = "int" jdbctype = "integer"/> <resputプロパティ= "desudentbirthday" column = "desudent_birthday" javatype = "date" jdbctype = "colument" columen javatype = "byte []" jdbctype = "blob" typehandler = "org.apache.ibatis.type.blobtypehandler" /> <respuringプロパティ= "placeid" column = "place_id" javatype = "string" jdbctype = "varchar" /> <識別列= "クラスjdbctype = "varchar"> <case value = "20000001" resultType = "liming.student.manager.data.model.studententity"> <resputプロパティ= "classid" column = "class_id" javatype = "string" jdbctype = "arear"
2.追加、削除、変更、チェック、パラメーター、およびキャッシュ
2.1選択
選択要素は非常にシンプルです。例えば:
<
このステートメントは、「getStudent」と呼ばれ、文字列パラメーターを持ち、学生型タイプのオブジェクトを返します。
パラメーター識別は次のとおりです。
[ステートメント]属性の構成の詳細を選択します。
| 財産 | 説明する | 値を取得します | デフォルト |
| id | このモードでは、一意の識別子は他のステートメントで参照できます | ||
| パラメータ型 | このステートメントに渡されたパラメーターの完全なクラス名またはエイリアス | ||
| resultType | ステートメントは、クラスの名前全体または値タイプのエイリアスを返します。コレクションの場合は、コレクションのクラス名またはコレクションのクラス名またはエイリアスがコレクション自体のクラス名ではなく、ここに記入されていることに注意してください。 (resultTypeとresultMapを一緒に使用することはできません) | ||
| 結果マップ | 参照されている外部結果マップ名。結果セットマッピングは、MyBatisで最も強力な機能です。多くの複雑なマッピングを簡単に解決できます。 (resultTypeとresultMapを一緒に使用することはできません) | ||
| flushcache | trueに設定すると、ステートメントが呼び出されるたびにキャッシュがクリアされます。 Selectステートメントはデフォルトでfalseに設定されます | true | false | 間違い |
| usecache | trueに設定されている場合、ステートメントの結果セットはキャッシュされます。 Selectステートメントはデフォルトでfalseに設定されますtrue | false false タイムアウトは、例外をスローする前に、ドライブが応答を待つ最大時間を設定します。デフォルトは価値がないため、ドライブはそれ自体を決定します。 | true | false | 間違い |
| タイムアウト | 例外をスローする前に、ドライブが応答を待つ最大時間を設定します。デフォルトは値なしで設定され、ドライブ自体は決定します | ポジティブ整数 | 設定されていません |
| フェッチサイズ | 値を設定した後、結果セットの数がこの値に達した後、ドライブが戻ることに興奮します。デフォルトは設定されておらず、ドライブはそれ自体を決定します。 | ポジティブ整数 | 意思決定を推進します |
| StatementType StatementType | 声明、準備された声明、呼び出し可能な声明。 準備されたステートメント、呼び出し可能な声明 | 声明 準備した 呼び出すことができます | 準備した |
| resultsettype | Forward_only、scroll_sensitive、scroll_insensive 転送のみ、敏感でケースに依存しないスクロールをスクロールします | Forward_only scroll_sensitive scroll_insensive | 意思決定を推進します |
2.2挿入
簡単な挿入ステートメント:
<! - inserts student-> <insert id = "insertStudent" parametertype = "sustententity"> inserting intoud susteent_tbl(sudent_id、sudent_name、desuted_sex、student_birthday、class_id)values(#{desudentname}、#{desudentname}、#{desudentsex}、#{studentday}、emsidid}INSERTは、データベースでサポートされている自動プライマリキーポリシーを使用し、useGeneratedKeys = "true”を設定してから、keypropertyを対応する列に設定できます。たとえば、上記のStudentEntityは、自動生成されたものを使用してID列の主キーを生成します。 SelectKey要素を使用することもできます。次の例では、キーを生成するためのカスタム関数としてMySQLデータベースNextval( 'Student')を使用します。
< (#{sustentid}、#{sustentname}、#{sustentsex}、#{sustentbirthday}、#{classentity.classid})</insert>| 財産 | 説明する | 値を取得します | デフォルト |
| id | このモードでは、一意の識別子は他のステートメントで参照できます | ||
| パラメータ型 | このステートメントに渡されたパラメーターの完全なクラス名またはエイリアス | ||
| flushcache | trueに設定すると、ステートメントが呼び出されるたびにキャッシュがクリアされます。 Selectステートメントはデフォルトでfalseに設定されます | true | false | 間違い |
| usecache | trueに設定されている場合、ステートメントの結果セットはキャッシュされます。 Selectステートメントはデフォルトでfalseに設定されますtrue | false false タイムアウトは、例外をスローする前に、ドライブが応答を待つ最大時間を設定します。デフォルトは価値がないため、ドライブはそれ自体を決定します。 | true | false | 間違い |
| タイムアウト | 例外をスローする前に、ドライブが応答を待つ最大時間を設定します。デフォルトは値なしで設定され、ドライブ自体は決定します | ポジティブ整数 | 設定されていません |
| フェッチサイズ | 値を設定した後、結果セットの数がこの値に達した後、ドライブが戻ることに興奮します。デフォルトは設定されておらず、ドライブはそれ自体を決定します。 | ポジティブ整数 | 意思決定を推進します |
| StatementType StatementType | 声明、準備された声明、呼び出し可能な声明。 準備されたステートメント、呼び出し可能な声明 | 声明 準備した 呼び出すことができます | 準備した |
| UseGeneratedKeys | MyBatisに、JDBCのGetGeneratedKeysメソッドを使用して、データベース(MySQL、SQLServerなど)によって生成されたプライマリキーを取得するように伝えます。 リレーショナルデータベースには、自動的に生成されるフィールドがあります)。デフォルト:false | true | false | 間違い |
| keyproperty | mybatisに設定されているキーによって返される値を識別し、getGeneratedKeysにするか、挿入ステートメントにSelectKeyを使用します サブエレメント。 |
| 財産 | 説明する | 値を取得します |
| keyproperty | SelectKeyステートメントによって生成される結果に対して設定する必要がある属性。 | |
| resultType | 結果タイプを生成します。 MyBatisでは、文字列やINTタイプなどの基本的なデータ型を使用できます。 | |
| 注文 | 前後に設定できます。以前に設定されている場合は、最初にプライマリキーを選択し、次にKeyPropertyを設定し、挿入ステートメントを実行します。後に設定されている場合、最初に挿入ステートメントを実行し、次にSelectKeyステートメントを実行します。これは通常、内部コールデータベース(Oracleなど)の挿入ステートメントに埋め込まれたシーケンスメカニズムです。 | 前に 後 |
| StatementType StatementType | 上記のように、MyBatisは、声明、準備、およびcallable -statementの応答に対応する声明、準備、および呼び出し可能な声明フォームをサポートしています。 | 声明 準備した 呼び出すことができます |
2.3更新、削除
簡単な更新:
< #{classentity.classid} where desutent_tbl.student_id =#{sustentid}; </update>簡単な削除:
<! - delete sustent-> <delete id = "deletestudent" parametertype = "desustentity"> delete from Student_tbl where where where where where where where where
ステートメント属性の構成の詳細を更新および削除します。
| 財産 | 説明する | 値を取得します | デフォルト |
| id | このモードでは、一意の識別子は他のステートメントで参照できます | ||
| パラメータ型 | このステートメントに渡されたパラメーターの完全なクラス名またはエイリアス | ||
| flushcache | trueに設定すると、ステートメントが呼び出されるたびにキャッシュがクリアされます。 Selectステートメントはデフォルトでfalseに設定されます | true | false | 間違い |
| usecache | trueに設定されている場合、ステートメントの結果セットはキャッシュされます。 Selectステートメントはデフォルトでfalseに設定されますtrue | false false タイムアウトは、例外をスローする前に、ドライブが応答を待つ最大時間を設定します。デフォルトは価値がないため、ドライブはそれ自体を決定します。 | true | false | 間違い |
| タイムアウト | 例外をスローする前に、ドライブが応答を待つ最大時間を設定します。デフォルトは値なしで設定され、ドライブ自体は決定します | ポジティブ整数 | 設定されていません |
| フェッチサイズ | 値を設定した後、結果セットの数がこの値に達した後、ドライブが戻ることに興奮します。デフォルトは設定されておらず、ドライブはそれ自体を決定します。 | ポジティブ整数 | 意思決定を推進します |
| StatementType StatementType | 声明、準備された声明、呼び出し可能な声明。 準備されたステートメント、呼び出し可能な声明 | 声明 準備した 呼び出すことができます | 準備した |
<! - 学生テーブルのすべてのフィールドをクエリするマルチプレックスSQLステートメント - > <SQL ID = "SelectStudentall"> Select St.student_id、St.student_name、St.student_sex、St.student_birthday、St.class_id from Student_tbl st </sql>
このようにして、Selectステートメントで直接参照して使用できます。上記の選択ステートメントを以下に変更します。
<! - IDに従って学生をクエリします - > <Select id = "getstudent" parametertype = "string" resultmap = "sustentresultmap"> <include refid = "selectstudentall"/> where st.student_id =#{desudent} </select> 2.5パラメーター
パラメーターは、クエリ、変更、削除条件、挿入、修正データなど、上記の多くの場所で使用されています。MyBatisが使用できる基本的なデータ型やJAVAの複雑なデータ型。
基本データ型、文字列、int、日付など。
ただし、基本的なデータ型を使用すると、1つのパラメーターのみを提供できるため、Java Entityクラスまたはマップタイプをパラメータータイプとして使用する必要があります。その属性は、#{}を介して直接取得できます。
2.5.1基本型パラメーター
入学時間に基づいて学生リストを検索します。
< </select>
List <StudentStive> StudentList = StudentMapper.GetStudEntListByClassyear(Stringutil.Parse( "2007-9-1")); for(desustentity entityTemp:sustentList){system.out.println(entityTemp.toString()); } 2.5.2 Javaエンティティタイプパラメーター
名前と性別で学生リストを検索します。エンティティクラスをパラメーターとして使用します。
<! - Query Student list、like name、= gender、parameter Entity type-> <select id = "getstudentlist" parametertype = "desutionEntity" resudentmap = "dustentresultmap"> select * select * where where where where where concat(concat( '%'、 '%'、#{#{name}、 '%')、 '%') </select> StudentEntity Entity = new StudentEntity(); entity.setStudentName( "li"); entity.setStudentsex( "MALE"); List <StudentStive> StudentList = StudentMapper.GetStudEntListWhereStivity(Entity); for(desustentity entityTemp:sustentList){system.out.println(entityTemp.toString()); } 2.5.3mapパラメーター
名前と性別で学生リストを検索します。マップをパラメーターとして使用します。
<! - クエリ学生リスト、=性別、パラメーターマップタイプ - > <選択id = "getstudentlistwheremap" parametertype = "map" resudentmap = "sustentresultmap"> select * from Student_tbl st where where where where where where where where where where where
map <string、string> map = new hashmap <string、string>(); map.put( "sex"、 "female"); map.put( "name"、 "li"); List <StudentSty> StudentList = StudentMapper.GetStudEntListWhereMap(MAP); for(desustentity entityTemp:sustentList){system.out.println(entityTemp.toString()); } 2.5.4マルチパラメーターの実装
複数のパラメーターを渡す場合は、インターフェイスのパラメーターに@Param Annotationを追加する必要があります。例を挙げて:
インターフェイスライティング:
public list <StudentSentity> getStudEntListWhereParam(@Param(value = "name")String name、@param(value = "sex")string sex、@param(bulation = "Birthday")日付誕生日、@param(value = "clessentity")Classentity Classentity);
SQLライティング方法:
<! - Query Student list、like name、= gender、= Birthday、= class、multi-parameter method-> <select id = "getstudentlistwhereparam" resudentmap = "sustentresultmap"> select * from Student_tbl st <where> <"name!= null and name and name!= '" </if> <test = "sex!= null and sex!= ''"> and s.student_sex =#{sex} </if> <if> <if> "batirnd!= null"> and s.student_birthday =#{誕生日} </if> <if> <test = "classentity!= null!= null and null and null and null and classentidity.classidity =#{classentity.classid} </if> </where> </select>クエリを作成します:
List <StudentRentity> StudentList = StudentMapper.getStudEntListWhereParam( "、" "、Stringutil.parse(" 1985-05-28 ")、classmapper.getclassbyid(" 20000002 ")));
2.5.5文字列置換方法
デフォルトでは、#{} Syntaxを使用するとMyBatisが準備されたステートメントプロパティを生成し、準備パラメーター(=?)を使用して値を安全に設定します。速くて安全であるようにしてください。また、頻繁に使用されます。ただし、変更されていない文字列をSQLステートメントに直接置き換えることもあります。たとえば、注文の場合、これを使用する場合があります:$ {columnName}で注文しますが、MyBatisはこの文字列を変更して回避しません。
注:この方法で、ユーザー入力を変更しないステートメントにユーザー入力を受け取り、適用することは非常に安全ではありません。これにより、ユーザーは破損したコードを埋め込むことができるため、クライアントが入力できないようにフィールドに必要なか、正当性を直接確認します。
2.6キャッシュキャッシュ
MyBatisには、強力で構成可能なカスタマイズ可能なキャッシュメカニズムが含まれています。 MyBatis 3のキャッシュ実装は何度も改善されており、これは強力で構成が容易です。デフォルトでは、キャッシュは有効になりません。セッションキャッシュに加えて、パフォーマンスを改善し、グローバルな依存関係を解決できます。レベル2キャッシュをオンにすると、SQLマッピングファイルに簡単な行を追加する必要があります。<cache/>
この単純な文の機能は次のとおりです。
(1)。マッピングファイルのすべての選択されたステートメントはキャッシュされます。
(2)。マッピングファイルのステートメントをすべて挿入、更新、削除すると、キャッシュがクリアされます。
(3)。キャッシュは、「最近使用されていない」アルゴリズム(4)を使用してリサイクルされます。キャッシュは設定された時間によってクリアされません。
(5)。各キャッシュは、1024のリストまたはオブジェクトへの参照を保存できます(クエリの結果に関係なく)。
(6)。キャッシュは「読み取り/書き込み」キャッシュとして使用されます。つまり、取得したオブジェクトは共有されておらず、発信者にとって安全です。他の呼び出しはありません(7)。またはスレッドの潜在的な変更。
たとえば、FIFOキャッシュを作成して60秒に1回クリアし、512オブジェクトの結果を保存するか、参照をリストし、結果を返すことのみを返します。未使用のスレッドでそれらを変更すると、参照紛争が発生する可能性があるためです。
<cache eviction = "fifo" flushinterval = "60000" size = "512" readonly = "true"> </cache>
同じキャッシュ構成またはインスタンスを異なる名前空間で共有することもできます。この場合、Cache-Refを使用して別のキャッシュを参照できます。
<cache-ref namespace = "com.liming.manager.data.studentmapper"/>
キャッシュステートメント属性の構成の詳細:
| 財産 | 説明します | 値を取得します | デフォルト値 |
| 立ち退き | キャッシュポリシー: LRU-最近の使用法:最後の長期には使用されていないオブジェクトを削除します。 Fifi-First-in First-Out:キューの以前のオブジェクトを移動する ソフト - ソフトリファレンス:ソフト参照ルールに基づいて、ガベージコレクションメカニズムを使用してオブジェクトを削除します 弱い参照 - ごみ収集メカニズムを使用して、弱い参照ルールに基づいてオブジェクトを強制的に削除する | lru fifi 柔らかい 弱い | lru |
| フラッシュインターバル | 合理的なミリ秒の合計時間を表します。デフォルトが設定されていないため、介入型クリアリングを使用する場合は、ステートメントのみを呼び出してクリアできます。 | ポジティブ整数 | 設定されていません |
| サイズ | キャッシュされたオブジェクトのサイズ | ポジティブ整数 | 1024 |
| 読みます | 読み取り専用キャッシュは、すべての発信者に同じインスタンスを返します。したがって、それらのどれも変更できず、パフォーマンスを大幅に改善できます。書き込み可能なキャッシュはシーケンスを通過します キャッシュされたオブジェクトのコピーを返す。これは遅くなりますが、より安全です。したがって、デフォルト値はfalseです。 | true | false | 間違い |