1.3 新增后台菜单表(有源码)
2020-02-17 本文已影响0人
小肥爬爬
接下来要做以下两件事情:
- 新增菜单表
- 用上一节的通用方法测试插入数据
菜单表的设计
package org.diego.mall.pojo;
import java.util.Comparator;
/**
* 后台菜单类, 二级树形节点.
* @author cys
*
*/
public class BackMenu implements Comparator<BackMenu>{
// 分类层级, 如1,2级
public static final int MENU_PARENT = 1;
public static final int MENU_CHILD = 2;
protected Long id;
protected String name;
protected Long parentId; // 上级分类id
protected Integer level; // 几级分类
protected Integer order; // 同一个上级时候的排序
protected String link; // 链接
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Long getParentId() {
return parentId;
}
public void setParentId(Long parentId) {
this.parentId = parentId;
}
public Integer getLevel() {
return level;
}
public void setLevel(Integer level) {
this.level = level;
}
public Integer getOrder() {
return order;
}
public void setOrder(Integer order) {
this.order = order;
}
public String getLink() {
return link;
}
public void setLink(String link) {
this.link = link;
}
@Override
public int compare(BackMenu o1, BackMenu o2) {
return o1.getOrder() - o2.getOrder();
}
}
任何树形结构的数据, 根据parentId, level(树节点中的层级) 和 order(排序), 就可以唯一地确定树节点的位置.
菜单表的服务类
分别是 IBackMenuService 和 BackMenuServiceImpl, 分别如下:
IBackMenuService
package org.diego.mall.service;
import org.diego.mall.pojo.BackMenu;
public interface IBackMenuService extends ISingleTableService<BackMenu>{
}
BackMenuServiceImpl
package org.diego.mall.service.impl;
import org.diego.mall.pojo.BackMenu;
import org.diego.mall.service.IBackMenuService;
import org.springframework.stereotype.Component;
@Component
public class BackMenuService extends AbstractSingleTableService<BackMenu>
implements IBackMenuService{
}
测试插入数据
我一般会在工程专门开一个dev目录,用来放一些测试代码, 如下:

图里的 DevStart.java 的代码如下:
package org.diego.dev;
import org.mybatis.spring.annotation.MapperScan;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
/**
* 用于启动开发功能.
* @author cys
*
*/
@SpringBootApplication
@EnableWebMvc
@ComponentScan("org.diego")
@MapperScan("org.diego.mall.dao")
public class DevStart implements CommandLineRunner {
static final Logger logger = LoggerFactory.getLogger(DevStart.class);
@Autowired
InitAdmin initAdmin;
@Override
public void run(String... args) throws Exception {
initAdmin.doAll();
}
public static void main(String[] args) {
SpringApplication.run(DevStart.class, args);
logger.info("==== 启动开发功能");
}
}
InitAdmin的代码如下:
package org.diego.dev;
import org.diego.mall.pojo.BackMenu;
import org.diego.mall.service.IBackMenuService;
import org.diego.mall.utils.DSqlUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class InitAdmin {
static final Logger logger = LoggerFactory.getLogger(InitAdmin.class);
@Autowired
private IBackMenuService backMenuService;
// 增加系统管理父菜单
public void doAll() throws Exception {
Long sytemParentId = this.checkAddSystemParent();
// 创建角色管理子菜单
Long id1 = this.checkAddSystemChild(sytemParentId, 1, "用户管理", "/system/BackUserIndex");
Long id2 = this.checkAddSystemChild(sytemParentId, 2, "角色管理", "/system/RoleIndex");
Long id3 = this.checkAddSystemChild(sytemParentId, 3, "菜单管理", "/system/BackMenuIndex");
}
// 增加系统管理父菜单
public Long checkAddSystemParent() throws Exception {
BackMenu menu = backMenuService.getFirst("name", "系统管理");
if(menu != null) {
logger.info("=== 系统管理父菜单已存在");
return menu.getId();
}
menu = new BackMenu();
menu.setLevel(BackMenu.MENU_PARENT);
menu.setName("系统管理");
menu.setOrder(1);
Long id = backMenuService.insertOne(null, menu, null);
logger.info("=== 已增加系统管理父菜单");
return id;
}
// 增加系统管理下的子菜单
private Long checkAddSystemChild(Long parentId, int order, String name, String link) throws Exception {
String sql = DSqlUtils.andEqNumber("parentId", parentId, true);
sql += DSqlUtils.andEqString("name", name, true);
BackMenu menu = backMenuService.getFirstBySql(sql);
if(menu != null) {
logger.info("=== 子菜单: " + name + "已经存在");
return menu.getId();
}
menu = new BackMenu();
menu.setLevel(BackMenu.MENU_CHILD);
menu.setName(name);
menu.setOrder(order);
menu.setParentId(parentId);
menu.setLink(link);
Long id = backMenuService.insertOne(null, menu, null);
logger.info("=== 已增加子菜单: " + name);
return id;
}
}
配置mysql数据库信息
根据 application.properties 配置数据库信息, 如下:
spring.datasource.url= jdbc:mysql://localhost:3306/diegomall?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
spring.datasource.username=test
spring.datasource.password=test
spring.datasource.driverClassName: com.mysql.cj.jdbc.Driver
现在运行DevStart, 可以看到数据库有4条数据顺利插入了.

源码下载
源码在这: https://github.com/xiaofeipapa/dmall/tree/master/diegomall-1