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