数据库结构
所需依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--此处用mybatis-plus是为了简写setter和getter -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.1</version>
</dependency>
配置文件
注意:此处配置文件写在resources中,需要和src下mapper路径与名字保持一致,否则会报错
<?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.itsm.mapper.MenuMapper">
<cache
eviction="FIFO"
flushInterval="60000"
size="1024"
readOnly="true"/>
<resultMap id="findAllMenuResult" type="com.itsm.entity.Menu">
<id property="id" column="id"/>
<result property="url" column="url"/>
<result property="path" column="path"/>
<result property="component" column="component"/>
<result property="name" column="name"/>
<result property="iconCls" column="iconCls"/>
<result property="keepAlive" column="keepAlive"/>
<result property="requireAuth" column="requireAuth"/>
<result property="parentId" column="parentId"/>
<result property="enabled" column="enabled"/>
<result property="orderby" column="orderby"/>
</resultMap>
<resultMap id="childResult" type="com.itsm.entity.Menu" extends="findAllMenuResult">
<collection property="children" ofType="com.itsm.entity.Menu">
<id property="id" column="id1"/>
<result property="url" column="url1"/>
<result property="path" column="path1"/>
<result property="component" column="component1"/>
<result property="name" column="name1"/>
<result property="iconCls" column="iconCls1"/>
<result property="keepAlive" column="keepAlive1"/>
<result property="requireAuth" column="requireAuth1"/>
<result property="parentId" column="parentId1"/>
<result property="enabled" column="enabled1"/>
<result property="orderby" column="orderby1"/>
</collection>
</resultMap>
<sql id="select_id">
select m1.*,
m2.id id1,
m2.url url1,
m2.path path1,
m2.component component1,
m2.name name1,
m2.iconCls iconCls1,
m2.keepAlive keepAlive1,
m2.requireAuth requireAuth1,
m2.parentId parentId1,
m2.enabled enabled1,
m2.orderby orderby1
from
menu m1 , menu m2
</sql>
<select id="readAllResult" resultMap="childResult" useCache="true">
<include refid="select_id" />
where m1.id = m2.parentid and m1.id not in(1) order by m2.orderby
</select>
</mapper>
实体类
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Menu {
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
private String url;
private String path;
private String component;
private String name;
private String iconCls;
private Integer keepAlive;
private Integer requireAuth;
private Integer parentId;
private Integer enabled;
private Integer orderby;
@TableField(exist = false)
private List<Menu> children;
}
Services
import com.itsm.entity.Menu;
import java.util.List;
public interface MenuServices {
List<Menu> readAllMenu();
}
import com.itsm.entity.Menu;
import com.itsm.mapper.MenuMapper;
import com.itsm.services.MenuServices;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class MenuServicesImpl implements MenuServices {
@Autowired
MenuMapper menuMapper;
@Override
public List<Menu> readAllMenu() {
return menuMapper.readAllResult();
}
}
Controller
import com.itsm.entity.Menu;
import com.itsm.services.MenuServices;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/api/menu/")
public class MenuController {
@Autowired
MenuServices menuServices;
@GetMapping("findAllMenu")
public List<Menu> findAllMenu(){
return menuServices.readAllMenu();
}
}
结果展示: