mybatis 遞歸查詢以及權限控制

@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);

    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章