SQL マッピング ファイル
MyBatis の真の力はマッピング ステートメントにあります。同等の機能を備えた jdbc と価格を比較すると、マッピング ファイルにより多くのコードが節約されます。 MyBatis は SQL に重点を置いて構築されています。
SQL マッピング ファイルには、次のトップレベル要素があります: (順番に)
cache は、指定された名前空間のキャッシュを構成します。
cache-ref は、他の名前空間からのキャッシュ設定を参照します。
resultMap は最も複雑かつ強力な要素であり、データベースの結果セットからオブジェクトをロードする方法を記述するために使用されます。
parameterMap は非推奨になりました。昔ながらのスタイルのパラメーター マッピング。インラインパラメータが優先されますが、この要素は将来削除される可能性があります。
SQL ブロックは再利用でき、他のステートメントからも参照できます。
insert マップの挿入ステートメント。
マッピング更新ステートメントを更新します。
delete マップの削除ステートメント。
マッピングクエリステートメントを選択します。
MyBatis は SQL に重点を置いて構築されており、通常のメソッドとは大きく異なります。
SQL マッピング ファイルには、いくつかのトップレベル要素があります (定義される順序で):
>mapper: マッピング ファイルのルート要素ノード。属性名前空間が 1 つだけあり、異なるマッパーを区別するために使用されます。グローバルに一意、名前空間にバインドされた DAO インターフェイスの完全な名前、つまりインターフェイス指向プログラミング。ここでのマッパーはインターフェースの実装クラスに相当します。
キャッシュ - 指定された名前空間のキャッシュを構成します。
cache-ref – 他の名前空間からのキャッシュ設定を参照します。
resultMap – データベースの結果セットからオブジェクトをロードする方法を記述するために使用される、最も複雑かつ強力な要素。
parameterMap – 非推奨になりました!昔ながらのスタイルのパラメーター マッピング。インラインパラメータが優先されますが、この要素は将来削除される可能性があります。ここには記録されません。
sql – 他のステートメントによって再利用および参照できる SQL ブロック。
insert - マッピング挿入ステートメント
update - マッピング更新ステートメント
delete - マッピング削除ステートメント
select - マッピングクエリステートメント
1: select を使用して条件付きクエリを完了します
ツールアイデアと mysql データベースを使用します
エンティティクラスを作成します
public class student {private int stuId;private String stuName;private grade getGrade;private int stuAge;public grade getGetGrade() {return getGrade; }public void setGetGrade(grade getGrade) {this.getGrade = getGrade; }public int getStuAge() {return stuAge; } public student(int id,String name){ } public student(){}public void setStuAge(int stuAge) {this.stuAge = stuAge; }public int getStuId() {return stuId; }public void setStuId(int stuId) {this.stuId = stuId; }public String getStuName() {return stuName; }public void setStuName(String stuName) {this.stuName = stuName; } }
select を使用して条件付きクエリを完了します
1: まず、resultType を使用するようにマッパーを設定します
<!--模糊查询 使用resultType返回结果集--> <select id="getAllStudentByLike" parameterType="String" resultType="stu">* from student where stuName like CONCAT('%',#{stuName},'%'</select>
テストクラス
public void Test() throws IOException { studentDao dao = MyBatis.getSessionTwo().getMapper(studentDao.class); List<student> list = dao.getAllStudentByLike("z");for (student item:list) { System.out.println("----------"+item.getStuName()); } }
さらに、parameterType は、 javaBean 型
は、Mapper
<!--模糊查询--> <select id="getAllStudentByLike" parameterType="Map" resultType="stu">select * from student where stuName like CONCAT('%',#{stuName},'%')</select>
を変更し、メソッドパラメータとしてテストクラスに直接HashMapコレクションを作成します
studentDao dao = MyBatis.getSessionTwo().getMapper(studentDao.class); Map<String,String> userMap = new HashMap<String, String>(); userMap.put("stuName","z"); List<student> list = dao.getAllStudentByLike(userMap);for (student item:list) { System.out.println("----------"+item.getStuName()); }
ただし、マップコレクションのキー値はクラス内のフィールド名と同じです。
2: resultMap を使用して 2 つのテーブル クエリを完了します
たとえば、student テーブルの主キー ID がクラス テーブルに関連付けられている場合、resultType を使用すると、その ID を表示することしかできませんが、実際には、クラス名に注目することが多いため、resultMap マッピングのカスタマイズ結果を使用する必要があります。
<resultMap id="studentMap" type="entity.student"> <id property="stuId" column="stuId"></id> <result property="stuName" column="stuName"></result> <result property="gradeName" column="gradeName"> </resultMap> //sql语句
select * from student,grade
resultType は、基本型と複雑なデータ型を含む戻り値の型を直接表します。
resultMap は、外部の resultMap への参照であり、resultMap に対応する ID は、戻り結果がどの resultMap にマップされるかを示します。 : 彼のアプリケーション シナリオは次のとおりです。データベース フィールド情報がオブジェクト属性と一致しない、またはマッピング結果を自由に制御するには複雑な結合クエリを実行する必要があります。
さらに、MyBatis の select 要素では、resultType と resultMap は本質的に同じであり、両方とも Map データ構造です。しかし、両方が同時に存在することはできません。
Three: resultMap の自動マッピング レベルを使用します
MyBatis は 3 つのマッピング レベルに分かれています
コレクション)
& gt; を除く: すべてに自動的に一致します
Set AutomAppingBehavior
<settings> <!--设置resultMap的自动映射级别为Full(自动匹配所有)--><setting name="autoMappingBehavior" value="FULL" /> <!--FULL要大写··--> </settings>
c c c c c c はします値が設定されている場合、ResultMap でノードを構成する必要はありません。
4 属性の関連付け 前の結果は、JavaBean、基本データ型、およびパッケージ化クラスの特定の「単純型」属性にのみマッピングできます。 , etc./しかし、複合型の属性をマッピングしたい場合は、複雑なクラス xing を使用する必要があります。つまり、javaBean には別の javaBean がありますが、関連付けは 1 対 1 の関連付けのみを処理します测试类里直接调用即可
六:前面说到association仅处理一对一的管理关系
如果要处理一对多的关系,则需要使用collection,它与 association元素差不多,但它映射的属性是一个集合列表,即javaBean内部嵌套一个复杂数据类型属性。
javaBean
private int gradeId;private String gradeName;private List<student> gatStudent;
<resultMap id="gradeMap" type="grade"> <!--<id property="gradeId" column="gradeId"></id> <result property="gradeName" column="gradeName"></result>--> <collection property="gatStudent" ofType="stu"> <!-- <id property="stuId" column="stuId"></id> <result property="stuName" column="stuName"></result>--> </collection> </resultMap>
<!--查询对应年级的student--> <select id="getAll" resultMap="gradeMap"> select * from student,grade where stuGrade = gradeId and gradeId=1 </select>
以上がSQLマッピングファイルのサンプルチュートリアルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。