開発中に一回で複数のレコードを挿入する場面があいました。もちろん、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で掲載した情報を参照してください。)
♪ 当記事がお役に立ちましたらシェアして頂ければ嬉しいです。
★ 当記事を閲覧の方は下記の【関連記事】も閲覧していました。
zanmai @2016年03月31日
» ①②③④の順で設定できるはず。…