ホーム » ブログ » struts2+ibatisで一回に複数のレコードをテーブルに挿入する
このエントリーをはてなブックマークに追加
@2014/05/08

スポンサーリンク
開発中に一回で複数のレコードを挿入する場面があいました。もちろん、forループで複数回insert文をかけてDBに挿入できるけど、効率が悪いから、一回で複数レコードが挿入できる仕組みを作りました。
事例:一回で複数のユーザ情報をuserテーブルに挿入する。
先ず、ユーザモデルコードの抜粋:
public class User implements Serializable {
	int id;
	String userName;
	int age;
	/**
	 * @return the id
	 */
	public int getId() {
		return id;
	}
	/**
	 * @param id the id to set
	 */
	public void setId(int id) {
		this.id = id;
	}
	/**
	 * @return the userName
	 */
	public String getUserName() {
		return userName;
	}
	/**
	 * @param userName the userName to set
	 */
	public void setUserName(String userName) {
		this.userName = userName;
	}
	/**
	 * @return the age
	 */
	public int getAge() {
		return age;
	}
	/**
	 * @param age the age to set
	 */
	public void setAge(int age) {
		this.age = age;
	}	
}

続いて、ユーザbusinessクラスのコード:
UserBusiness.class
	public void insertMultiUsers (List<User> users,) 
			throws ZanmaiException {

		try {
			// 複数のユーザをDBに挿入
			userDao.insertMultiUsers(users);
		} catch (Exception e) {
			throw new ZanmaiException("ユーザを挿入に失敗しました。", e);
		} 
	}

続いて、UserDao.class コードの抜粋:
	public void insertMultiUsers(List<User> users) {
		
		insert("insertMultiUsers", users);
	}


最後、最も重要なところ、ibatisを利用したuser.xmlのSQLコードの抜粋:
<insert id="insertMultiUsers" parameterClass="java.util.List">
  	<![CDATA[
		INSERT INTO  user_table(id,name,age) VALUES 
	]]>
	<iterate conjunction=" , ">
		<![CDATA[
			(
			#[].id:INTEGER#
			,#[].userName:VARCHAR#
			,#[].age:INTEGER#
			) 
		]]>
	</iterate>
  </insert>
こうすると、insert into user_table(id,user_name,age) values (1,'matao','1'),(2,'zanmai',2)……のようなinsert文を作成し、一回で複数のレコードを挿入できました。
【※】sqlServerの場合、バージョン2008以後はうまくできますが、これより古いバージョンだったら、エラーが発生しまう。(前記事http://www.zanmai.net/blog/data/194.htmlで掲載した情報を参照してください。)

♪ 当記事がお役に立ちましたらシェアして頂ければ嬉しいです。
2人
このエントリーをはてなブックマークに追加


★ 当記事を閲覧の方は下記の【関連記事】も閲覧していました。

お名前:

 

EMAIL:

 

URL:

 

認証コード:

zanmai.net-safecode

 


※会員の方は認証コードを要らないから、新規登録をオススメ!

check