批量插入有后台java代码通过for循环来实现,另外也可以通过mybits中的动态sql<foreach></foreach>实现;
不过各自对应一个id的问题,即用索引还是不用,各自该怎么用?
其实用了索引,只要在原来sql基础上将#{id}改为null就好了,不用索引,就更好办了,不用考虑,只要考虑要添加的字段
动态sql实现:
1:springMVC接收数组参数:
@RequestMapping(value="/setPrivilege") @ResponseBody public void setPrivilege(@RequestParam(value = "privIds[]") Integer[] privIds, Integer userId, PrintWriter writer){ } }
我们看到使用了:@RequestParam(value = "privIds[]") Integer[] privIds 来获取前台传来的数组参数。
controller层不能接收list或者是二维的数组,一维数组可以接收,但是必须用@requestParam(value="")来命名;
beacuse jquery传递数组会做一个序列化的操作,属性是traditional,默认为false,我们可以设置成true就可以直接接收了;
springMVC接收参数时,最好不要使用 int, long等原始类型,而应该使用它们对应的包装类型,不然当传入的参数为空时,会报错,而包装类型可以使用null表示传入的空值。
2. service层的处理,很简单,直接使用map向mybatis传递参数:
@Service("privilegeService") @Transactional public class PrivilegeServiceImpl implements PrivilegeService { @Autowired private PrivilegeMapper privilegeMapper; @Override @Transactional(readOnly=true) public List<Privilege> getAllPrivilege() { return privilegeMapper.getAllPrivilege(); } @Override public int setPrivilegeForUser(Integer[] privIds, Integer userId) { Map<String, Object> map = new HashMap<>(); map.put("privIds", privIds); map.put("userId", userId); return this.privilegeMapper.setPrivilegeForUser(map); } }
3. 最后看 mybatis 的 xml 中的sql如何写:
<insert id="setPrivilegeForUser" parameterType="map"> insert into user_privilege(user_id, privilege_id) values <foreach collection="privIds" index="index" item="item" separator=","> ( #{userId}, #{item} ) </foreach> </insert>
我们看到使用了 foreach 来循环传递进来的数组 privIds,最后组成的sql语句如下所示:
insert into user_privilege(user_id, privilege_id) values (3, 1),(3,2),(3,3),(3,4)
user_id 不变,而privilege_id 是数组 privIds 中的循环出来的 id 值。其实就是数据库的批量插入。
4、批量插入list
<insert id="batchInsertStudent" parameterType="java.util.List"> insert into student (id,name,sex,tel,address) values <foreach collection="list" item="item" index="index" separator="," > (#{item.id},#{item.name},#{item.sex},#{item.tel},#{item.address}) </foreach> </insert>
后台java代码实现:
5:map类型
String[] roleidArray = roleid.split(",");
for (int i = 0; i < roleidArray.length; i++) {
String user_role_id = UUID.randomUUID().toString();
Map<String, String> map = new HashMap<String, String>();
map.put("user_role_id", user_role_id);
map.put("userId", user.getId());
map.put("roleId", roleidArray[i]);
userMapper.userAddRole(map);
}
6.list类型:
String[] hids = hobbys.split(",");
List<HotelDict> list = new ArrayList<HotelDict>();
for (int i = 0; i < hids.length; i++) {
HotelDict hotelDict = new HotelDict();
hotelDict.setUid(hotel.getId());
hotelDict.setHid(hids[i]);
list.add(hotelDict);
hoteldictService.insertBatch(list);
}