一、后台管理系统表格分页形式的分类显示

先来看实现的效果。
这是所有商品的一级分类,选中一个一级分类后(如图中的“家电 数码 手机”)点击“下级分类管理”,即跳转至该分类的二级分类,如下图。
再选择二级分类中的“家电”后,点击“下级分类管理”,即跳转至该二级分类下的三级分类,如下图。

所有的分类都是记录在同一张表内,表内主要字段如下。

属性名 说明
category_id 自增id,用于记录每个分类的编号
category_level 表示该分类属于几级分类
parent_id 表示该分类的上级分类的id,如果是一级分类,则为0
category_name 分类名称
category_rank 分类排序值,值越高越靠前显示

另外在前后端传值的时候有三个关键的参数:

  • categoryLevel, 用来表格该分类的等级
  • parentId,用来表格该分类的上级分类的id,一级分类则为0
  • backParentId,用来表示三级分类的parentId所对应的二级分类的一级分类

现在开始上代码。
初试列表显示的是所有一级分类,因此这里三个参数分别为:categoryLevel=1,parentId=0,backParentId=0;url为:
admin/categories?parentId=0&categoryLevel=1&backParentId=0
二级列表和三级列表的参数由前端获取到后传给后端。

NewBeeMallGoodsCategoryController.java
@Resourceprivate NewBeeMallCategoryService newBeeMallCategoryService;/*** 列表显示*/@RequestMapping(value = "/categories/list" ,method = RequestMethod.GET)@ResponseBodypublic Result list(@RequestParam Map<String,Object> params){if (StringUtils.isEmpty(params.get("page")) || StringUtils.isEmpty(params.get("limit"))){return ResultGenerator.genFailResult("参数异常");}PageQueryUtil pageQueryUtil = new PageQueryUtil(params);return  ResultGenerator.genSuccessResult(newBeeMallCategoryService.getCategoriesPage(pageQueryUtil));}

(categoryLevel=1,parentId=0封装在params中)

NewBeeMallCategoryService.java
    /*** 管理后台分页显示* @param pageQueryUtil* @return*/PageResult getCategoriesPage(PageQueryUtil pageQueryUtil);
NewBeeMallCategoryServiceImpl.java
@Autowiredprivate GoodsCategoryMapper goodsCategoryMapper;@Overridepublic PageResult getCategoriesPage(PageQueryUtil pageQueryUtil) {List<GoodsCategory> goodsCategories = goodsCategoryMapper.findGoodsCategoryList(pageQueryUtil);int total = goodsCategoryMapper.getTotalGoodsCategories(pageQueryUtil);PageResult pageResult = new PageResult(goodsCategories,total,pageQueryUtil.getLimit(),pageQueryUtil.getPage());return pageResult;}
GoodsCategoryMapper.java
    /*** 后台获取分类列表* @param pageQueryUtil* @return*/List<GoodsCategory> findGoodsCategoryList(PageQueryUtil pageQueryUtil);/*** 后台获取分类总数* @param pageQueryUtil* @return*/int getTotalGoodsCategories(PageQueryUtil pageQueryUtil);
GoodsCategoryMapper.xml
<sql id="Base_Column_List">category_id, category_level, parent_id, category_name, category_rank, is_deleted,create_time, create_user, update_time, update_user</sql><select id="findGoodsCategoryList" parameterType="map" resultMap="BaseResultMap">select<include refid="Base_Column_List"></include>from tb_newbee_mall_goods_category<where><if test="categoryLevel!=null and categoryLevel!=''">and category_level = #{categoryLevel}</if><if test="parentId!=null and parentId!=''">and parent_id = #{parentId}</if>and is_deleted = 0</where>order by category_rank desc<if test="start!=null and limit!=null">limit #{start},#{limit}</if></select><select id="getTotalGoodsCategories" parameterType="Map" resultType="int">select count(*) from tb_newbee_mall_goods_category<where><if test="categoryLevel!=null and categoryLevel!=''">and category_level = #{categoryLevel}</if><if test="parentId!=null and parentId!=''">and parent_id = #{parentId}</if>and is_deleted = 0</where></select>

二、添加商品页面的下拉菜单式的三级联动

实际效果如图所示。

第一个下拉菜单默认显示排序值最高的一级分类。第二个下拉菜单显示的是该一级分类下的第一个二级分类。第三个下拉菜单显示的是该二级分类下的第一个三级分类。若没有内容则显示空白。这里有三种情况,分别是:

(1)打开页面后的默认显示

一打开这个页面默认显示的是第一个一级分类,和其所属的第一个二级分类以及该二级分类下的第一个三级分类,即:“家电 数码 手机” -->“家电” --> “生活电器”。

NewBeeMallGoodsController.java
@Resourceprivate NewBeeMallCategoryService newBeeMallCategoryService;@GetMapping("/goods/edit")public String edit(HttpServletRequest request){request.setAttribute("path", "edit");//查询所有的一级分类List<GoodsCategory> firstLevelCategories = newBeeMallCategoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(0L), NewBeeMallCategoryLevelEnum.LEVEL_ONE.getLevel());if (!CollectionUtils.isEmpty(firstLevelCategories)){//查询一级分类列表中第一个实体的所有二级分类List<GoodsCategory> secondLevelCategories = newBeeMallCategoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(firstLevelCategories.get(0).getCategoryId()), NewBeeMallCategoryLevelEnum.LEVEL_TWO.getLevel());if (!CollectionUtils.isEmpty(secondLevelCategories)){//查询二级分类列表中第一个实体的所有三级分类List<GoodsCategory> thirdLevelCategories = newBeeMallCategoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(secondLevelCategories.get(0).getCategoryId()),NewBeeMallCategoryLevelEnum.LEVEL_THREE.getLevel());request.setAttribute("firstLevelCategories",firstLevelCategories);request.setAttribute("secondLevelCategories",secondLevelCategories);request.setAttribute("thirdLevelCategories",thirdLevelCategories);request.setAttribute("path","goods-edit");return "admin/newbee_mall_goods_edit";}}return "error/error_5xx";}
NewBeeMallCategoryService.java
    /*** 根据parentId和level获取分类列表* @param parentIds* @param categoryLevel* @return*/List<GoodsCategory> selectByLevelAndParentIdsAndNumber(List<Long> parentIds, int categoryLevel);
NewBeeMallCategoryServiceImpl.java
@Autowiredprivate GoodsCategoryMapper goodsCategoryMapper;@Overridepublic List<GoodsCategory> selectByLevelAndParentIdsAndNumber(List<Long> parentIds, int categoryLevel){return goodsCategoryMapper.selectByLevelAndParentIdsAndNumber(parentIds,categoryLevel,0);//0代表查询所有}
GoodsCategoryMapper.java
    List<GoodsCategory> selectByLevelAndParentIdsAndNumber(@Param("parentIds") List<Long> parentIds,@Param("categoryLevel") int categoryLevel,@Param("number") int number);
GoodsCategoryMapper.xml
  <select id="selectByLevelAndParentIdsAndNumber" resultMap="BaseResultMap">select<include refid="Base_Column_List"/>from tb_newbee_mall_goods_categorywhere parent_id in<foreach item="parentId" collection="parentIds" open="(" separator="," close=")">#{parentId,jdbcType=BIGINT}</foreach>and category_level = #{categoryLevel,jdbcType=TINYINT}and is_deleted = 0order by category_rank desc<if test="number>0">limit #{number}</if></select>

(2)修改商品信息页,已知商品id

这种情况下是用户在商品列表选择了相应的商品后,点击编辑按钮,希望修改这个商品的基本信息(如,分类、库存、售价等),这个时候页面跳转到与前面的截图相同的页面,区别就是这个时候的三级菜单会自动显示当前该商品所在的三级分类,即数据回显。如下图所示,我选中了其中一个商品(如小米某型号手机),返回的页面是这样的。

NewBeeMallGoodsController.java
@Resourceprivate NewBeeMallGoodsService newBeeMallGoodsService;@GetMapping("/goods/edit/{goodsId}")public String edit(HttpServletRequest request,@PathVariable("goodsId") Long goodsId){request.setAttribute("path","edit");NewBeeMallGoods newBeeMallGoods = newBeeMallGoodsService.getNewBeeMallGoodsById(goodsId);if(newBeeMallGoods == null){return "error/error_400";}if(newBeeMallGoods.getGoodsCategoryId() > 0){if (newBeeMallGoods.getGoodsCategoryId() != null || newBeeMallGoods.getGoodsCategoryId() > 0){//有分类字段则查询相关分类数据返回给前端以供分类的三级联动显示GoodsCategory currentGoodsCategory = newBeeMallCategoryService.getGoodsCategoryById(newBeeMallGoods.getGoodsCategoryId());//商品表中存储的分类id字段为三级分类的id,不为三级分类则是错误数据if (currentGoodsCategory != null && currentGoodsCategory.getCategoryLevel() == NewBeeMallCategoryLevelEnum.LEVEL_THREE.getLevel()){//查询所有的一级分类List<GoodsCategory> firstLevelCategories = newBeeMallCategoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(0L),NewBeeMallCategoryLevelEnum.LEVEL_ONE.getLevel());//根据parentId查询当前parentId下所有的三级分类List<GoodsCategory> thirdLevelCategories = newBeeMallCategoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(currentGoodsCategory.getParentId()),NewBeeMallCategoryLevelEnum.LEVEL_THREE.getLevel());//查询当前三级分类的父级二级分类GoodsCategory secondCategory = newBeeMallCategoryService.getGoodsCategoryById(currentGoodsCategory.getParentId());if(secondCategory != null){//根据parentId查询当前parentId下所有的二级分类List<GoodsCategory> secondLevelCategories = newBeeMallCategoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(secondCategory.getParentId()),NewBeeMallCategoryLevelEnum.LEVEL_TWO.getLevel());//查询当前二级分类的父级一级分类GoodsCategory firstCategory = newBeeMallCategoryService.getGoodsCategoryById(secondCategory.getParentId());if (firstCategory != null){//所有分类数据都得到之后放到request对象中供前端读取request.setAttribute("firstLevelCategories", firstLevelCategories);request.setAttribute("secondLevelCategories", secondLevelCategories);request.setAttribute("thirdLevelCategories", thirdLevelCategories);request.setAttribute("firstLevelCategoryId", firstCategory.getCategoryId());request.setAttribute("secondLevelCategoryId", secondCategory.getCategoryId());request.setAttribute("thirdLevelCategoryId", currentGoodsCategory.getCategoryId());}}}}}if (newBeeMallGoods.getGoodsCategoryId() == 0) {//查询所有的一级分类List<GoodsCategory> firstLevelCategories = newBeeMallCategoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(0L), NewBeeMallCategoryLevelEnum.LEVEL_ONE.getLevel());if (!CollectionUtils.isEmpty(firstLevelCategories)) {//查询一级分类列表中第一个实体的所有二级分类List<GoodsCategory> secondLevelCategories = newBeeMallCategoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(firstLevelCategories.get(0).getCategoryId()), NewBeeMallCategoryLevelEnum.LEVEL_TWO.getLevel());if (!CollectionUtils.isEmpty(secondLevelCategories)) {//查询二级分类列表中第一个实体的所有三级分类List<GoodsCategory> thirdLevelCategories = newBeeMallCategoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(secondLevelCategories.get(0).getCategoryId()), NewBeeMallCategoryLevelEnum.LEVEL_THREE.getLevel());request.setAttribute("firstLevelCategories", firstLevelCategories);request.setAttribute("secondLevelCategories", secondLevelCategories);request.setAttribute("thirdLevelCategories", thirdLevelCategories);}}}request.setAttribute("goods", newBeeMallGoods);request.setAttribute("path", "goods-edit");return "admin/newbee_mall_goods_edit";}
NewBeeMallGoodsService.java
    /*** 根据id获取商品详情* @param id* @return*/NewBeeMallGoods getNewBeeMallGoodsById(Long id);
NewBeeMallGoodsServiceImpl.java
    @Autowiredprivate NewBeeMallGoodsMapper goodsMapper;@Overridepublic NewBeeMallGoods getNewBeeMallGoodsById(Long id) {return goodsMapper.selectByPrimaryKey(id);}
NewBeeMallGoodsMapper.java
    /*** 根据id获取商品* @param goodsId* @return*/NewBeeMallGoods selectByPrimaryKey(Long goodsId);
NewBeeMallGoodsMapper.xml
<sql id="Base_Column_List">goods_id, goods_name, goods_intro,goods_category_id, goods_cover_img, goods_carousel, original_price,selling_price, stock_num, tag, goods_sell_status, create_user, create_time, update_user,update_time</sql><sql id="Blob_Column_List">goods_detail_content</sql><select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="ResultMapWithBLOBs">select<include refid="Base_Column_List"/>,<include refid="Blob_Column_List"/>from tb_newbee_mall_goods_infowhere goods_id = #{goodsId,jdbcType=BIGINT}</select>

(3)手动选择更改分类

当我们手动选择了一个一级分类后,二级分类的下拉菜单会自动修改为当前选择的那个一级分类下的第一个二级分类,三级分类的下拉菜单会自动修改为当前第一个二级分类下的第一个三级分类,如果没有相应的下属分类则不显示。当自己手动选择了一个二级分类后,三级分类的下拉菜单会自动修改为当前选择的二级分类下的第一个三级分类。

NewBeeMallGoodsCategoryController.java
@Resourceprivate NewBeeMallCategoryService newBeeMallCategoryService;/*** 添加/修改商品信息页的列表显示*/@RequestMapping(value = "/categories/listForSelect",method = RequestMethod.GET)@ResponseBodypublic Result listForSelect(@RequestParam("categoryId") Long categoryId){if (categoryId == null || categoryId < 1){return ResultGenerator.genFailResult("缺少参数");}GoodsCategory category = newBeeMallCategoryService.getGoodsCategoryById(categoryId);//既不是一级分类也不是二级分类则不返回数据if (category == null || category.getCategoryLevel() == NewBeeMallCategoryLevelEnum.LEVEL_THREE.getLevel()){return ResultGenerator.genFailResult("参数异常");}Map categoryResult = new HashMap(2);if (category.getCategoryLevel() == NewBeeMallCategoryLevelEnum.LEVEL_ONE.getLevel()){//如果是一级分类则返回一级分类下的所有二级分类,以及二级分类列表中第一条数据下的所有三级分类//查询一级分类列表中第一个实体的所有二级分类List<GoodsCategory> secondLevelCategories = newBeeMallCategoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(categoryId),NewBeeMallCategoryLevelEnum.LEVEL_TWO.getLevel());if(!CollectionUtils.isEmpty(secondLevelCategories)){//查询二级分类列表中第一个实体的所有三级分类List<GoodsCategory> thirdLevelCategories = newBeeMallCategoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(secondLevelCategories.get(0).getCategoryId()),NewBeeMallCategoryLevelEnum.LEVEL_THREE.getLevel());categoryResult.put("secondLevelCategories",secondLevelCategories);categoryResult.put("thirdLevelCategories",thirdLevelCategories);}}if(category.getCategoryLevel() == NewBeeMallCategoryLevelEnum.LEVEL_TWO.getLevel()){//如果是二级分类则返回当前分类下的所有三级分类列表List<GoodsCategory> thirdLevelCategories = newBeeMallCategoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(categoryId),NewBeeMallCategoryLevelEnum.LEVEL_THREE.getLevel());categoryResult.put("thirdLevelCategories",thirdLevelCategories);}return ResultGenerator.genSuccessResult(categoryResult);}
NewBeeMallCategoryService.java
    /*** 根据id获取分类* @param id* @return*/GoodsCategory getGoodsCategoryById(Long id);/*** 根据parentId和level获取分类列表* @param parentIds* @param categoryLevel* @return*/List<GoodsCategory> selectByLevelAndParentIdsAndNumber(List<Long> parentIds, int categoryLevel);
NewBeeMallCategoryServiceImpl.java
    @Autowiredprivate GoodsCategoryMapper goodsCategoryMapper;@Overridepublic GoodsCategory getGoodsCategoryById(Long id){return goodsCategoryMapper.selectByPrimaryKey(id);}@Overridepublic List<GoodsCategory> selectByLevelAndParentIdsAndNumber(List<Long> parentIds, int categoryLevel){return goodsCategoryMapper.selectByLevelAndParentIdsAndNumber(parentIds,categoryLevel,0);//0代表查询所有}
GoodsCategoryMapper.java
    /*** 根据id查找分类* @param categoryId* @return*/GoodsCategory selectByPrimaryKey(Long categoryId);List<GoodsCategory> selectByLevelAndParentIdsAndNumber(@Param("parentIds") List<Long> parentIds,@Param("categoryLevel") int categoryLevel,@Param("number") int number);
GoodsCategoryMapper.xml
    <sql id="Base_Column_List">category_id, category_level, parent_id, category_name, category_rank, is_deleted,create_time, create_user, update_time, update_user</sql><select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">select<include refid="Base_Column_List"/>from tb_newbee_mall_goods_categorywhere category_id = #{categoryId,jdbcType=BIGINT} and is_deleted=0</select><select id="selectByLevelAndParentIdsAndNumber" resultMap="BaseResultMap">select<include refid="Base_Column_List"/>from tb_newbee_mall_goods_categorywhere parent_id in<foreach item="parentId" collection="parentIds" open="(" separator="," close=")">#{parentId,jdbcType=BIGINT}</foreach>and category_level = #{categoryLevel,jdbcType=TINYINT}and is_deleted = 0order by category_rank desc<if test="number>0">limit #{number}</if></select>

三、商城首页三级分类显示

后台管理系统配置好了分类之后,就是用来在前台商城首页显示。首页如图所示。

IndexController.java
    @Resourceprivate NewBeeMallCategoryService newBeeMallCategoryService;@GetMapping({"/index", "/", "/index.html"})public String indexPage(HttpServletRequest request){List<NewBeeMallIndexCategoryVO> categories = newBeeMallCategoryService.getCategoriesForIndex();if (CollectionUtils.isEmpty(categories)){return "error/error_5xx";}request.setAttribute("categories",categories);//分类数据return  "mall/index";}
NewBeeMallCategoryService.java
    /*** 商城首页返回分类数据* @return*/List<NewBeeMallIndexCategoryVO>  getCategoriesForIndex();
NewBeeMallCategoryServiceImpl.java
    @Autowiredprivate GoodsCategoryMapper goodsCategoryMapper;@Overridepublic List<NewBeeMallIndexCategoryVO> getCategoriesForIndex() {List<NewBeeMallIndexCategoryVO> newBeeMallIndexCategoryVOS = new ArrayList<>();//获取一级分类的固定数量的数据List<GoodsCategory> firstLevelCategories = goodsCategoryMapper.selectByLevelAndParentIdsAndNumber(Collections.singletonList(0L), NewBeeMallCategoryLevelEnum.LEVEL_ONE.getLevel(), Constants.INDEX_CATEGORY_NUMBER);if (!CollectionUtils.isEmpty(firstLevelCategories)){List<Long> firstLevelCategoryIds = firstLevelCategories.stream().map(GoodsCategory::getCategoryId).collect(Collectors.toList());//获取二级分类的数据List<GoodsCategory> secondLevelCategories = goodsCategoryMapper.selectByLevelAndParentIdsAndNumber(firstLevelCategoryIds,NewBeeMallCategoryLevelEnum.LEVEL_TWO.getLevel(), 0);if (!CollectionUtils.isEmpty(secondLevelCategories)){List<Long> secondLevelCategoryIds = secondLevelCategories.stream().map(GoodsCategory::getCategoryId).collect(Collectors.toList());//获取三级分类的数据List<GoodsCategory> thirdLevelCategories = goodsCategoryMapper.selectByLevelAndParentIdsAndNumber(secondLevelCategoryIds,NewBeeMallCategoryLevelEnum.LEVEL_THREE.getLevel(),0);if (!CollectionUtils.isEmpty(thirdLevelCategories)){//根据parentId 将 thirdLevelCategories分组Map<Long,List<GoodsCategory>> thirdLevelCategoryMap = thirdLevelCategories.stream().collect(groupingBy(GoodsCategory::getParentId));List<SecondLevelCategoryVO> secondLevelCategoryVOS = new ArrayList<>();//处理二级分类for (GoodsCategory secondLevelCategory : secondLevelCategories){SecondLevelCategoryVO secondLevelCategoryVO = new SecondLevelCategoryVO();BeanUtil.copyProperties(secondLevelCategory,secondLevelCategoryVO);//如果该二级分类下有数据则放入 secondLevelCategoryVOS 对象中if (thirdLevelCategoryMap.containsKey(secondLevelCategory.getCategoryId())){//根据二级分类的id取出thirdLevelCategoryMap分组中的三级分类listList<GoodsCategory> tempGoodsCategories = thirdLevelCategoryMap.get(secondLevelCategory.getCategoryId());secondLevelCategoryVO.setThirdLevelCategoryVOS((BeanUtil.copyList(tempGoodsCategories, ThirdLevelCategoryVO.class)));secondLevelCategoryVOS.add(secondLevelCategoryVO);}}//处理一级分类if (!CollectionUtils.isEmpty(secondLevelCategoryVOS)){//根据parentId将 thirdLevelCategories分组Map<Long,List<SecondLevelCategoryVO>> secondLevelCategoryVOMap = secondLevelCategoryVOS.stream().collect(groupingBy(SecondLevelCategoryVO::getParentId));for (GoodsCategory firstCategory : firstLevelCategories){NewBeeMallIndexCategoryVO newBeeMallIndexCategoryVO = new NewBeeMallIndexCategoryVO();BeanUtil.copyProperties(firstCategory,newBeeMallIndexCategoryVO);//如果该一级分类下有数据则放入 newBeeMallIndexCategoryVOS 对象中if (secondLevelCategoryVOMap.containsKey(firstCategory.getCategoryId())){//根据该一级分类的id取出secondLevelCategoryVOMap分组中的二级分类listList<SecondLevelCategoryVO> tempGoodsCategories = secondLevelCategoryVOMap.get(firstCategory.getCategoryId());newBeeMallIndexCategoryVO.setSecondLevelCategoryVOS(tempGoodsCategories);newBeeMallIndexCategoryVOS.add(newBeeMallIndexCategoryVO);}}}}}return newBeeMallIndexCategoryVOS;}else {return null;}}
GoodsCategoryMapper.java
    <sql id="Base_Column_List">category_id, category_level, parent_id, category_name, category_rank, is_deleted,create_time, create_user, update_time, update_user</sql>List<GoodsCategory> selectByLevelAndParentIdsAndNumber(@Param("parentIds") List<Long> parentIds,@Param("categoryLevel") int categoryLevel,@Param("number") int number);
GoodsCategoryMapper.xml
<select id="selectByLevelAndParentIdsAndNumber" resultMap="BaseResultMap">select<include refid="Base_Column_List"/>from tb_newbee_mall_goods_categorywhere parent_id in<foreach item="parentId" collection="parentIds" open="(" separator="," close=")">#{parentId,jdbcType=BIGINT}</foreach>and category_level = #{categoryLevel,jdbcType=TINYINT}and is_deleted = 0order by category_rank desc<if test="number>0">limit #{number}</if></select>

后端代码主要就是这些,前端表格插件使用jqgrid,数据交互主要使用thymeleaf模板引擎,因为主要想学习一下后端的知识,所以前端的代码就不贴上来了。(以上所有代码非本人原创,都是从“新蜂商城”这个开源项目上复制下来,仅做学习记录使用。)

SpringBoot+Mybatis实现三级分类联动相关推荐

  1. java实现三级联动查询_jeefast和Mybatis实现三级联动的示例代码

    在二级联动的基础上 html部分 学校 --请选择学校-- {{v.name}} js部分 getdayschool:function () { $.ajax({ type: "post&q ...

  2. 织梦联动添加三级分类后无法添加二级分类的解决方案

    织梦官方提供的联动类别不能添加二级联动.在dedecmsV5.7中添加一二级分类没有出现任何错误,但是,当添加三级分类后,再次添加一级二级分类就出现错误,一级二级分类分别变成二级三级了. 这个是一个小 ...

  3. SpringBoot 全国省市区三级联动 Ajax动态绑定select

    SpringBoot 全国省市区三级联动 Ajax动态绑定select 文章目录 前言 一.三级联动? 二.分析与编码 1.数据库 2.SQL 3.编写Controller 4.Ajax动态绑定sel ...

  4. SpringBoot+Mybatis+Maven+Mysql实现的校园论坛管理系统(功能包含前后台,登录、markdown发帖、留言、分类帖子查看、用户管理、帖子管理、回复管理、评论管理、留言管理等)

    博客目录 SpringBoot+Mybatis+Maven+Mysql实现的校园论坛管理系统 实现功能截图 系统功能 使用技术 代码 完整源码 SpringBoot+Mybatis+Maven+Mys ...

  5. 基于javaweb框架的springboot mybatis宠物商城源码含论文设计文档

    在互联网高速发展.信息技术步入人类生活的情况下,电子贸易也得到了空前发展.网购几乎成为了人人都会进行的活动.近几年来,养宠物更是成为人们生活中重要的娱乐内容之一, 人们越来越多的讲感情也寄托给了宠物, ...

  6. 谷粒商城六商品服务三级分类

    递归-树形结构数据获取 sql文件 sql文件太大了,这个博主写的非常厉害,看他的就ok了 CategoryController package com.atguigu.gulistore.produ ...

  7. Java项目:实现个人博客系统(java+springboot+mybatis+redis+vue+elementui+Mysql)

    源码获取:博客首页 "资源" 里下载! springboot+mybatis+前端vue,使用前后端分离架构实现的个人博客系统,共7个模块,首页,写博客,博客详情页,评论管理,文章 ...

  8. sql语句查询商品的一二三级分类都是一个字段怎么办_畅购商城(三):商品管理...

    好好学习,天天向上 本文已收录至我的Github仓库「DayDayUP」:github.com/RobodLee/DayDayUP,欢迎Star 小练手 这里有三个小练手的任务,内容比较简单,就是对一 ...

  9. 基于SpringBoot+Mybatis+Thymeleaf商品信息管理系统

    github地址:github.com/zaiyunduan1-,如果对你有帮助,欢迎Star 主要用到的技术: 使用maven进行项目构建 使用Springboot+Mybatis搭建整个系统 使用 ...

  10. 基于java(springboot+mybatis)汽车信息管理系统设计和实现以及文档

    java毕业设计项目<100套>推荐 主要实现技术:Java.springmvc.springboot.mysql.mybaits.jQuery.js.css等.使用eclipse/ide ...

最新文章

  1. 怎样将无线路由做成无线AP
  2. 网站实现个人支付宝即时到帐POST页面
  3. C++知识点37——拷贝构造函数
  4. java 单元测试inject_Mockito中@Mock与@InjectMock
  5. Objective C 中的nil,Nil,NULL和NSNull理解
  6. 链表反转2(Reverse Linked List II)
  7. servlet文件上传下载_Servlet上传文件和下载文件示例
  8. jQuery HTML操作
  9. 运用“异或”对原文加密,并解密
  10. 双击java安装包没有反应_雨林木风Win7下双击JER安装包没有反应的解决技巧
  11. 数据中心服务器巡检方案,IDC机房巡检方案
  12. cannot find -l****问题的解决办法
  13. [动态系统的建模与分析]15_伯德图,bode图,为什么是20logM?分贝又是什么?
  14. 准确定位表单中的元素
  15. photoshop cc2017全套视频课程 从基础到实战案例PS海报-王诚-专题视频课程
  16. java设置页码_Java 添加页码到Word文档
  17. MySQL 数据库之 MMM 高可用架构构建
  18. Java版漏斗计时器_教程/漏斗 - Minecraft Wiki,最详细的官方我的世界百科
  19. HI+AI|吾来助力惠氏CRM喜提「金耳唛杯」
  20. linux下统计log文件中某个字段的值,并计算出平均值

热门文章

  1. aptana eclipse linux,eclipse Aptana 插件介绍以及安装
  2. 气象基础知识matlab,气象类专业Matlab课程教学探索与思考
  3. 计算机访问小米摄像机,小米摄像头连接教程
  4. 如何通过数据分析进行活动效果评估
  5. python调用高德地图地理编码/逆地理编码
  6. c语言程序填空题库,c语言填空题题库
  7. 教你添加百度分享按钮
  8. Excel的N函数和VALUE函数的使用和区别
  9. 快递100显示查询错误?快递100快递查询类FAQ
  10. Android开发虚拟机测试没问题,真机调试就出现问题,总是闪退!10秒解决!!