最近做项目有个需求是根据传入参数的不同,向不同的数据表中批量插入数据。所以传入参数有两个,一个是String类型,指定要插入的某个具体数据表的名称;另一个是List类型,是需要被存入数据库的数据列表。需要将这两个数据封装为一个map类型的数据。以User实体为例进行代码说明。
UserMapper.xml的方法
<insert id="insertUser" parameterType="java.util.Map">
insert into ${tablename}
(building, room, name, phone, email)
values
<foreach collection="userPOS" item="UserPO" index= "index" separator =",">
(
#{UserPO.building},
#{UserPO.room},
#{UserPO.name},
#{UserPO.phone},
#{UserPO.email}
)
</foreach>
</insert>
UserMapper中对应的接口
/**
* 批量新增用户数据
* @param params
* @return
* @throws Exception
*/
public int insertUser(Map<String,Object> params);
本例为简化流程,直接在Dao层进行测试了,实际应用中需要再封装Service等。
UserDao中对应的操作
public static int insertUser(Map<String,Object> params) {
SqlSession session = DBTools.getSession();
BuildingOneMapper mapper = session.getMapper(UserMapper.class);
try {
mapper.insertUser(params);
session.commit();
} catch (Exception e) {
e.printStackTrace();
session.rollback();
return 400;
}
return 200;
}
public static void main(String[] args){
List userPOS = new ArrayList<UserPO>();
UserPO userPO = new UserPO();
userPO.setBuilding("01");
userPO.setRoom("102");
userPO.setName("queen");
userPO.setPhone("18823452333");
userPO.setEmail("123456@163.com");
for(int i =0;i<10;i++){
userPOS.add(userPO);
}
Map<String,Object> params = new HashMap<String, Object>();
params.put("tablename","firstgroup");
params.put("userPOS",userPOS);
UserDao.insertUser(params);
}