Mybatis Oracleを使用してデータを一括追加、更新する方法

3178 ワード

最近私はMybatisを使ってデータを挿入して更新して小さい面倒に出会って、ネット上で大量を検索して、感じはとても意のままではありませんて、最后に高い人の指导を経て、出して、具体的に以下のコードを见てください
エンティティ:
public class Author implements Serializable {
	private String author_id;
	
	private String userName;
	
	private String password;
	
	private String email;
	
	private String bio;

mapper.xmlファイルは次のとおりです.
<update id="updateAuthorBatch" parameterType="com.deppon.cms.mybatis.domain.Author">
	begin
		<foreach collection="list" item="item" index="index"  separator=";">
		update t_zxw_author 
		<set>
			<if test="item.userName != null">
				username=#{userName,jdbcType=VARCHAR},
			</if>
			<if test="item.password != null">
				password = #{password,jdbcType=VARCHAR}
			</if>
		</set>
		where author_id in 
		#{item.author_id,jdbcType=VARCHAR}
		</foreach>
		;end;
		
	</update>

これは死んで、どれだけのデータがあって、どれだけのupdate文があって、まだ何か良い方法があることを知らないで、私は少なくとも今探し当てていません
データを挿入するには、次のように書きます.
	<insert id="batchInsert" parameterType="java.util.List">
<!-- 		<selectKey resultType="java.lang.String" order="BEFORE" keyProperty="author_id">  -->
<!--        		SELECT SYS_GUID() FROM DUAL -->
<!-- 		</selectKey> -->
		insert into t_zxw_author(author_id,username,password,email,bio)
		<foreach collection="list" item="item" index="index" separator="union all">
			select SYS_GUID(),#{item.userName,jdbcType=VARCHAR},#{item.password,jdbcType=VARCHAR},#{item.email,jdbcType=VARCHAR},#{item.bio,jdbcType=VARCHAR} from dual
		</foreach>

これらを完了すると、テストコードは次のようになります.
	@Test
	public void testAddAuthorBatch(){
		List<Author> list = new ArrayList<Author>();
		Author author = null;
		for(int i=0;i<100;i++){
			author = new Author();
			author.setBio("gaga");
			author.setEmail("ggg");
			author.setPassword("gggg");
			author.setUserName("uyyyyy");
			list.add(author);
		}
		
		authorDao.addAuthorBatch(list);
	}
	
	@Test
	public void testUpdateAuthorBatch(){
		List<Author> list = new ArrayList<Author>();
		Author author = new Author();
		Author author1 = new Author();
		author.setUserName("  ");
		author.setPassword("gggg");
		author.setAuthor_id("DDC5B92630ADF245E040A8C091111E6B");
		author1.setAuthor_id("DDE78A0195BAC662E040A8C09111737F");
		author1.setUserName("hhh");
		author.setPassword("kjasdjf");
		list.add(author);
		list.add(author1);
		
		authorDao.updateAuthorBatch(list);
	}

テスト成功