mybatis批量insert

Posted bozhengheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis批量insert相关的知识,希望对你有一定的参考价值。

场景是用户表,角色表,权限表做权限管理;

users表             

 

 role表                

 

 permission表   

 

 中间表users-role

 

中间表role-permission 

 

查询用户没有的角色

在controller中

@RequestMapping("/findUserByIdAndAllRole.do")
    public ModelAndView findUserByIdAndAllRole(@RequestParam(name = "id",required = true) int userid){
        ModelAndView mv = new ModelAndView();
        //查询userid对应的对象
        Users user = usersService.findById(userid);
        //根据userid查询当前用户没有的角色信息
        List<Role> otherRoles = usersService.findOtherRoles(userid);
        mv.addObject("user",user);
        mv.addObject("roleList",otherRoles);
        mv.setViewName("user-role-add");
        return mv;
    }

在 dao的配置文件中mybatis配置文件

<select id="findById" resultMap="userRolePermissionMap">
        select u.*,r.id as rid,r.rolename,r.roleDesc,p.permissionName,p.url from users u
         LEFT OUTER JOIN users_role ur on u.id = ur.userId
         LEFT OUTER JOIN role r on r.id = ur.roleId
         LEFT OUTER JOIN role_permission rp on rp.roleId = r.id
         LEFT OUTER JOIN permission p  on p.id = rp.permissionId
        where u.id = #{id}
    </select>
    <select id="findOtherRoles" parameterType="int" resultType="com.hengheng.domain.Role">
        select * from role where id not in (select roleid from users_role where userId = #{userid})
    </select>

给用户添加角色,前端传过来的数据要包含当前添加用户的  id  和 要添加的角色的id

 

 

 在controller中,因为  ids   是一个数组,所以在在执行SQL时要批量操作,

@RequestMapping("/addRoleToUser.do")
    public String addRoleToUser(@RequestParam(name = "userId")int userid,@RequestParam(name = "ids")int[] ids){

        usersService.addRoleToUser(userid,ids);


        return "redirect:findAll.do";
    }

在dao的接口文件中要绑定参数,防止一些错误的发生

public interface IUsersDao {
    public Users findByUserName(String username);

    public List<Users> findAll();

    public void save(Users user);
    public Users findById(int id);
    public List<Role> findOtherRoles(int userid);

    void addRoleToUser(@Param("map") Map<Integer, Integer> map);
    void addRoleToUser(@Param("userid") int userid,@Param("ids")int[] ids);
}

 

在mapper文件中

 <insert id="addRoleToUser" >
        insert into users_role(userId, roleId) VALUES
        <foreach collection="ids" index="index" item="item" separator=",">
            (#{userid},#{item})
        </foreach>
    </insert>
foreach :是循环,批量操作

collection:是传过来的集合的属性,List默认是list,Map默认是map
index:循环的数据的索引
item:当前循环到的数据
separator:数据间的分隔符

以上是关于mybatis批量insert的主要内容,如果未能解决你的问题,请参考以下文章

mybatis batch insert

数据库--MyBatis的(insert,update,delete)三种批量操作

mybatis批量insert mysql多少条效率最高

mybatis批量插入insert时报错

Mybatis批量Insert及水平分表

Mybatis之MySql批量insert后返回主键