MyBatis一括操作、追加ログ表示、MyBatisとiBatisの違い



         MyBatisのロット操作は主にfeacherタグによって循環的に完成されています。主に大量削除、大量更新、大量挿入などがあります。
一括削除
	<!--         -->
	<delete id="deleteEquipmentList" parameterType="java.lang.Integer" >
	    delete from dbo.teg_equipment
	    where id in
	 	<foreach item="idItem" index="index" collection="list" open="(" separator="," close=")"> 
	 		#{idItem}
	 	</foreach>   
	 </delete>
 
ここでは、foreachタグの使用について参照できます。MyBatisダイナミックSQL
Mapperインターフェースで定義する方法:
	/**
	 * @descrption      
	 * @author xdwang
	 * @create 2012-11-21  2:32:52
	 * @param ids      id  
	 */
	void deleteEquipmentList(List<Integer> ids);
 
 
一括更新
	<update id="delByUpdateEquipmentList">
		update dbo.teg_equipment 
		 <set >
	      	 isdeleted = 1
	     </set>
	    where id in
	 	<foreach item="idItem" index="index" collection="list" open="(" separator="," close=")"> 
	 		#{idItem}
	 	</foreach>   
	 </update>
 
一括挿入
<insert id="addBatchStudent" useGeneratedKeys="true" parameterType="java.util.List">
	<selectKey resultType="long" keyProperty="id" order="AFTER">
		SELECT
		LAST_INSERT_ID()
	</selectKey>
	insert into tbl_student (name,birth,birth) 
	values
	<foreach collection="list" item="item" index="index" separator="," >
		(#{item.name},#{item.birth},#{item.birth})
	</foreach>
</insert>
 
ここで注意したい時は、foreachを入れます。[CDATA[]]では、実行時にエラーが発生します。comp.mysql.jdbc.exceptions.jdbc.jdbc 4 MySQLSyntxErroExceptionは、エラーメッセージを確認すると、入力されたパラメータはすべてnullです。からです[CDATA[]>xmlのラベルをまとめてラベルを文字列としてそのまま処理しました。後ろに外のをください。[CDATA[]]を外したら正常に実行できます。
 
ログを追加してSQLを表示します。
MyBatisはログを追加する必要があります。MyBatisはダイナミックSQLを採用することができますので、SQL文を一度にスペルするのは難しいです。この場合はログがSQLを表示して、エラー時に分析します。Ok、余谈しないでください。前回のプロジェクトに追加したログを持ってきます。
log 4 j.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
	<appender name="console" class="org.apache.log4j.ConsoleAppender">
		<param name="Target" value="System.out" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%d{MMM dd yyyy HH:mm:ss,SSS} %-5p %c - %m%n" />
		</layout>
	</appender>
	<category name="net.carefx" additivity="false">
		<priority value="DEBUG" />
		<appender-ref ref="console" />
	</category>
	<category name="org.springframework" additivity="false">
		<priority value="DEBUG" />
		<appender-ref ref="console" />
	</category>
	<category name="org.springframework.orm.ibatis3" additivity="false">
		<priority value="DEBUG" />
		<appender-ref ref="console" />
	</category>
	<category name="org.apache.ibatis" additivity="false">
		<priority value="DEBUG" />
		<appender-ref ref="console" />
	</category>
	<category name="java.sql" additivity="false">
		<priority value="DEBUG" />
		<appender-ref ref="console" />
	</category>
	<logger name="org.apache.ibatis.common.jdbc.SimpleDataSource">
		<level value="DEBUG" />
	</logger>
	<logger name="org.apache.ibatis.common.jdbc.SimpleDataSource">
		<level value="DEBUG" />
	</logger>
	<logger name="org.apache.ibatis.common.jdbc.ScriptRunner">
		<level value="DEBUG" />
	</logger>
	<logger name="org.apache.ibatis.common.jdbc.SqlMapClientDelegate">
		<level value="DEBUG" />
	</logger>
	<logger name="java.sql.Connection">
		<level value="DEBUG" />
	</logger>
	<logger name="java.sql.Statement">
		<level value="DEBUG" />
	</logger>
	<logger name="java.sql.PreparedStatement">
		<level value="DEBUG" />
	</logger>
	<logger name="java.sql.ResultSet">
		<level value="DEBUG" />
	</logger>
	<root>
		<priority value="DEBUG" />
		<appender-ref ref="console" />
	</root>
</log4j:configuration>
 
 
これで、MyBatisも基本的にまとめました。MyBatisとiBatisの違いを簡単にまとめてみましょう。
1、Mybatisはインターフェースのバインディングを実現しました。より便利に使えます。
         ·iBatis 2.xでは、DAOで具体的にどのXMLファイルに対応するかを指定する必要があります。この点はiBatisから入門できます。http://xdwangiflytek.iteye.com/blog/1332520 )で発見できます。MyBatisはDAOインターフェースとXMLマッピングファイルのバインディングを実現しました。自動的にインターフェースの具体的な実現を生成してくれます。
         説明:MyBatisはインタフェースで直接annotationの配置方式を使用して構成を簡略化することをサポートしていますが、XML構成の方式を依然として使用することを強く提案しています。結局annotationの構成方式は機能が有限で、コードの侵入性が強すぎて、XML構成方式を使用してMyBatisの優位性を表現できます。
 
2、オブジェクト関係マップの改善、効率が高い
         ·ibatis 2.xを使っている多くの友達はibatisのxmlマッピングファイルを通してオブジェクト間の関係マップを実現していないと信じています。実際にはその必要はないです。ibatis 2.xは「入れ子クエリ」という方式で対象との関係を照会文の直接綴りによって実現します。その効果はDAOやServiceで自分でカプセル化するのと同じです。しかし、この方法には「N+1クエリ問題」がある。概括的には、N+1クエリ問題は、このように引き起こすことができる。
・結果リストを取得するために単独のSQL文を実行しました。
・戻ってきたレコードごとに、クエリー文を実行して、各詳細(N)をロードします。
この問題は100以上のSQL文が実行されます。これは通常期待されていません。
Mybatisでは、ibatis 2.xの「入れ子照会」に対応するほか、直接に「入れ子結果」という方法が提供されており、その効果は、Sql 1文で検索したdtoオブジェクトを自動的に対象にカプセル化するのに相当する。しかし、実際にこの改善がもたらすメリットは限られています。この方法は、改ページを使用する際には機能しないため、またはネストオブジェクトの結果集は改ページが許可されていません。この点はMybatisフレームの中で明確な制限がなされています。
 
3、MyBatisは強力なONLベースの表現を採用し、他の要素を除去します。
・struts 2に詳しい人はONL表現に慣れていないはずです。MyBatisはONL表現を採用して配置ファイルの複雑さを簡略化しています。もっと簡潔に使います。