美文网首页从零开发电商网站
1.3 新增后台菜单表(有源码)

1.3 新增后台菜单表(有源码)

作者: 小肥爬爬 | 来源:发表于2020-02-17 22:49 被阅读0次

接下来要做以下两件事情:

  1. 新增菜单表
  2. 用上一节的通用方法测试插入数据

菜单表的设计

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目录,用来放一些测试代码, 如下:


image.png

图里的 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条数据顺利插入了.


image.png

源码下载

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

相关文章

  • 1.3 新增后台菜单表(有源码)

    接下来要做以下两件事情: 新增菜单表 用上一节的通用方法测试插入数据 菜单表的设计 任何树形结构的数据, 根据pa...

  • 1.1研习:微信后台与微信运营基本规范

    part Ⅰ 微信后台 登录进入微信公众平台,会显示今日新消息,新增人数和总用户数 左边是后台的菜单,利用这些菜单...

  • 实战:如何做好网页后台的表单和表格设计?

    一个完整的后台,由菜单/导航、数据/图形展示、表格、表单、控件/组件以及弹窗等构成,下面跟大家分享后台中的表格和表...

  • 7.(若依项目-vue)自动生成代码功能

    1.在表里面增加一个表 注意id 添加的时候要自增 2.在菜单管理里面新增一个菜单名称 3.将第一步添加的表放进去...

  • 币须达摩周报2018.7.9

    马超 周报开发类: 1.规划后台数据库设计,新增标签表/收益表/用户资产表; 2.调整收益代码; 3.优化接口AP...

  • java:权限系统数据库设计

    1、按钮管理表 2、菜单管理表 3、菜单按钮管理表,用于分配菜单页面具有的按钮 4、角色管理表 5、角色菜单按钮管...

  • mycncart操作使用教程 - 商品分类

    分类的管理,后台管理路径为:【商品目录】->【商品分类】 新增或编辑分类时: 1. 如果选择了【顶部菜单显示】,则...

  • 权限方面数据库的设计

    权限设计 管理员表_admin 角色表_admin_role 菜单表_menu 菜单权限表_admin_role_...

  • 代码生成器

    一、为什么需要代码生成器 在后台管理系统中,我们有大量的单表简单查询、新增和修改之类的业务场景,对于这样的业务往往...

  • django项目--菜单管理

    后台菜单管理功能 一、业务功能分析 1. 业务需求分析 后台首页菜单根据用户权限动态生成,不同菜单对应不同的功能视...

网友评论

    本文标题:1.3 新增后台菜单表(有源码)

    本文链接:https://www.haomeiwen.com/subject/ddlhfhtx.html