mybatis 递归查询以及权限控制

本文介绍了一个使用MyBatis实现的菜单权限查询系统,包括菜单实体类定义、Mapper接口及XML配置,展示了如何通过参数获取不同用户可见的菜单列表。

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

@Data
public class Menu {
    private Integer id;
    private String name;
    private String code;
    private String url;
    private String grade;
    private Integer parentID;
    private List<Menu> childMenus;
}
@Repository
public interface MenuMapper {

   List<Menu> findAllMenus(Integer pid);

   List<Menu> findAllMenusbyUser(Integer empID, Integer menuID);

   List<Menu> findAllMenusbyUser(Map<String,Integer> params);

}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mybatis01.mapper.MenuMapper">
    <resultMap id="menu" type="com.example.mybatis01.entity.Menu">
        <id column="id" property="id"></id>
        <result column="name" property="name"></result>
        <result column="code" property="code"></result>
        <result column="url" property="url"></result>
        <result column="grade" property="grade"></result>
        <result column="parentid" property="parentID"></result>
        <collection property="childMenus" ofType="com.example.mybatis01.entity.Menu"
                    select="findAllMenus" column="id"></collection>
    </resultMap>

    <select id="findAllMenus" resultMap="menu">
       select id,name,code,url,grade,parentid from t_menu where parentid = #{pid}
    </select>

    <resultMap id="menuExt" type="com.example.mybatis01.entity.Menu">
        <id column="id" property="id" javaType="java.lang.Integer"></id>
        <result column="name" property="name"></result>
        <result column="code" property="code"></result>
        <result column="url" property="url"></result>
        <result column="grade" property="grade"></result>
        <result column="parentid" property="parentID"></result>
        <collection property="childMenus" ofType="com.example.mybatis01.entity.Menu"
                    select="findAllMenusbyUser" column="{menuID=menuID,empID=empID}"></collection>
    </resultMap>

    <select id="findAllMenusbyUser" resultMap="menuExt" parameterType="java.util.Map">
        select m.id menuID,m.name,m.code,m.url,m.grade,m.parentid,#{empID} as empID
        from  t_employee e
        inner join t_employee_menu em on e.id = em.employee_id
        inner join t_menu m on em.menu_id = m.id
        where e.id = #{empID}
         <choose>
             <when test="menuID!=null">
                and  m.parentid = #{menuID}
             </when>
             <otherwise>
                 and  m.parentid = 0
             </otherwise>
         </choose>
    </select>
</mapper>

import com.example.mybatis01.entity.Employee;
import com.example.mybatis01.entity.Menu;
import com.example.mybatis01.mapper.EmployeeMapper;
import com.example.mybatis01.mapper.MenuMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@SpringBootTest
class Mybatis01ApplicationTests {

    @Autowired
    private EmployeeMapper employeeMapper;

    @Autowired
    private MenuMapper menuMapper;

    @Test
    void contextLoads() {

        //数据里一级菜单parentID为0
        List<Menu> menus =  menuMapper.findAllMenus(0);
        System.out.println(menus);

        List<Menu> menus1  = menuMapper.findAllMenusbyUser(1,0);
        System.out.println(menus1);
        
        Map<String,Integer> params = new HashMap<>();
        params.put("empID",1);
        //params.put("menuID",0);
        List<Menu> menus2  = menuMapper.findAllMenusbyUser(params);
        System.out.println(menus);

    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值