正在做一个商城项目,被商品分类的分级查询给难住了,sql语句我倒是写出来了,可是不知道怎么保存在Java对象里,我使用的是SpringBoot,mybatis,freemarker,mysql。
数据表结构:
CREATE TABLE goods_type
(
typeId INT PRIMARY KEY AUTO_INCREMENT,
typeName VARCHAR(255) NOT NULL ,
typeDesc LONGTEXT NOT NULL,
typeParent int REFERENCES goods_type(typeId) //上一级分类 ,最顶层为0
)CHARSET utf8
查询语句:
select l1.typeId as 一级菜单编号,l1.typeName as 一级菜单名称, l1.typeDesc as 1描述,
l2.typeId as 二级菜单编号,l2.typeName as 二级菜单名称,l2.typeDesc as 2描述,
l3.typeId as 三级菜单编号,l3.typeName as 三级菜单名称,l3.typeDesc as 3描述
from goods_type l1
inner JOIN goods_type l2 ON l1.typeId = l2.typeParent
inner JOIN goods_type l3 on l3.typeParent = l2.typeId;
请问怎么保存在Java对象中,从而显示到页面。
mybatis 的话这个可以实现的, 我之前是写过一个类似的
表结构:
其中parentId 跟你的typeParent类似, 记录上一级的id
AdminMenu (Model):
Model的属性跟表结构一一对应, 最下面多了一个subMenu, 里面就是AdminMenu
下面是admin_menu.xml中的内容
查询SQL:
这里返回的就是adminMenuResult结果集:
其中这一行是最重要的
这里用selectSubMenus来进行了另一个查询, 查询的参数为id, 把查询出来的结果放在Model中的subMenus属性中.
selectSubMenus查询SQL:
这里就是用第一层的id来查询有没有子菜单. 这里的#{id}就是上面那个结果集的column参数.
因为我只有两层菜单, 所以这里用了一个新的结果集,跟上面的区别就是没有subMenus字段.
adminSubMenuResult:
如果你有三,四级的话你可以一个结果集. (第一层查询的时候用id去查询第二层, 第二层查询的时候用第二层的id去查询第三层...)
下面我贴一下整个的admin_menu.xml