mybits批量添加的个人对于索引的见解

本文介绍了如何使用mybits的动态SQL实现批量添加,特别是利用<foreach>标签处理数组参数。讨论了在使用索引与不使用索引时的策略,并给出后台Java代码示例,包括map和list类型的批量插入方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

吐舌头批量插入有后台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),(33),(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);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值