Mybatis マッパーの使用法

Mybatis マッパーは主に Java とデータベース間のマッピングです。

マッピングは主に SQL 文とマッピング関係で構成され、SQL 文は追加、削除、変更、クエリに分けられ、マッピング関係は入力パラメータのマッピングと結果セットのマッピングに分けられます。

SqlMapper.xml ファイルのマッピング

手順と方法:

Bean レイヤーと Dao レイヤー環境をインストールした後、xml ファイルをインポートします。ファイル内の設定とマッパー レイヤーの名前付けは、次の 6 つの点に注意する必要があります。

1. SqlMapper.xml ファイル内の名前空間は、マッパー インターフェイスのクラスパスと同じです。

2. マッパー インターフェイスと SqlMapper.xml は同じパッケージ内にあります

3. マッパー インターフェイスの名前は SqlMapper.xml と同じです。

4. マッパー インターフェイスのメソッド名は SqlMapper.xml の ID と同じです。ID は一意であるため、インターフェイスのメソッド名はオーバーロードできません。

5. マッパー インターフェイスの入力パラメーターの型は、SqlMapper.xml のparameterType 型と一致しています。

6. マッパー インターフェイスの入力パラメーターの型は、SqlMapper.xml の ResultType 型の各要素の型と一致します。

まず簡単な追加、削除、変更、クエリ マッピングを作成します。

    //查找结果集是所有的login
    <select id="findAllLogin" resultType="login">
 	select * from login
 	</select>

 	//查找结果集是所有的name的string类型
 	<select id="findAllName" resultType="string" >
 	select lname from login 
 	</select>
 	
    //查找结果集是编号小于入参为int型的所有login
 	<select id="findNum" resultType="login" parameterType= "int">
 	select * from login where lid &lt; #{v}
 	</select>
 	
    //添加login对象 没有结果集
 	<insert id="addLogin" parameterType= "login">
		insert into login (lname,lsex,lpwd)
		values (#{lname},#{lsex},#{tpwd})
	</insert>
	
    //删除 根据编号删除入参为int的login对象 没有结果集
	<delete id="deleteLogin" parameterType= "int">
		delete from login where lid=#{lid}
	</delete>
	
    //修改入参类型为login型的login对象
	<update id="updateLogin" parameterType= "login">
		update login set lname = #{lname},lsex=#{lsex},lpwd = #{lpwd},
		where lid = #{lid}
	</update>

生徒とクラスの関係など、1 対 1 の関係では、生徒から見ると、1 人の生徒が 1 つのクラスに対応し、1 対 1 の関係になります。完全なチェックを行う場合は、最初にクラスを外部属性として学生エンティティ クラスに追加し、次に resultMap 結果セットを使用して XML ファイルにマップします。resultMap の型 type はメイン クラスに書き込まれ、結果はタグは、メインクラスにマッピングできない属性とフィールド (属性名とフィールド名が異なる) のみを記述できます。1 対 1 マッピングでは関連付けタグが使用され、プロパティ属性ではメンバーが書き込まれることに注意してください。メインクラスエンティティクラスの外部属性の変数名。

    <resultMap type="student" id="stu_class_Map">
	 	<result column="sid" property="sid"/>
	 	<result column="classid" property="classid"/>
	 	<association property="bj">
	 		<result column="classid" property="classid"/>
	 		<result column="classname" property="classname"/>
	 	</association>
	 </resultMap>
	 
	 
	 <select id="findStudentAndClass" resultMap="stu_class_Map">
	 	select * from student left join class on student.classid = class.classid
	 </select>

学生とクラスの関係など、1 対多の関係では、クラスの観点から見ると、クラスは複数の学生に対応し、1 対多の関係になります。完全なチェックを行うときは、最初に学生クラスを外部属性としてクラス エンティティ クラスに追加し、次に resultMap 結果セットを使用して XML ファイルにマップします。resultMap の型 type は引き続きメイン クラスに書き込まれます。ペア 複数の結果タグは各属性とフィールドを記述する必要があります。1 対多のマッピングはコレクション タグを使用し、プロパティ属性はメイン クラスのエンティティ クラスの外部属性のメンバー変数名を書き込むことに注意してください。 ofType 属性はプロパティ Entity クラスを書き込みます

    <resultMap type="banji" id="class_stu_Map">
	 	<result column="classid" property="classid"/>
	 	<result column="classname" property="classname"/>
	 	<collection property="slist" ofType="student">
	 	    <result column="sid" property="sid"/>
	 	    <result column="sname" property="sname"/>
	 	    <result column="ssex" property="ssex"/>
	 	    <result column="birthday" property="birthday"/>
	 	    <result column="classid" property="classid"/>
	 	</collection>
	 </resultMap>
	 
	 <select id="findClassAndStudent" resultMap="class_stu_Map">
	 	select * from class left join student on class.classid = student.classid
	 </select>

もちろん、多対多の関係をどうやって実現するかということも考えられると思いますが、実際の開発では、そのような関係をできるだけ避けるようにしており、中間のエンティティクラスを見つけて変換するという解決策が考えられます。分析する角度。上記は SqlMapper.xml ファイルを使用してマッピングを実装する方法ですが、もう 1 つはアノテーション タイプを実装する方法ですが、どちらの方法でも原理は同じであり、それぞれに独自の利点があります。

おすすめ

転載: blog.csdn.net/m0_48011056/article/details/126210447