mybatis递归查询

最近在写一个小程序,需要实现业务无限极分类,就是业务下有无限下拉子菜单,需要后台返回包括子节点的所有的数据

数据库表结构如下:

business表

项目代码:

1、编写business实体类

import java.util.Date;
import java.util.List;

//业务类实体类
public class Business  {
    private Integer id;
    //业务名
    private String businessName;
    //父id
    private Integer parentId;
    //部门ID
    private Integer departmentId;
    //类别(个人或者企业)
    private Integer isPresonal;
    //标题
    private String title;
    //需要携带的资料
    private String data;
    //资料文档地址
    private String fileUrl;
    //逻辑删除,1表示删除,0表示不删除,默认为0
    private Integer isDelete;
    //创建时间
    private Date createTime;
    //更新时间
    private Date updateTime;

    List<Business> businesses;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Integer getParentId() {
        return parentId;
    }

    public void setParentId(Integer parentId) {
        this.parentId = parentId;
    }

    public Integer getDepartmentId() {
        return departmentId;
    }

    public void setDepartmentId(Integer departmentId) {
        this.departmentId = departmentId;
    }

    public Integer getIsPresonal() {
        return isPresonal;
    }

    public void setIsPresonal(Integer isPresonal) {
        this.isPresonal = isPresonal;
    }

    public String getBusinessName() {
        return businessName;
    }

    public void setBusinessName(String businessName) {
        this.businessName = businessName;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }

    public String getFileUrl() {
        return fileUrl;
    }

    public void setFileUrl(String fileUrl) {
        this.fileUrl = fileUrl;
    }
    public Integer getIsDelete() {
        return isDelete;
    }

    public void setIsDelete(Integer isDelete) {
        this.isDelete = isDelete;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public Date getUpdateTime() {
        return updateTime;
    }

    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }

    public List<Business> getBusinesses() {
        return businesses;
    }

    public void setBusinesses(List<Business> businesses) {
        this.businesses = businesses;
    }
}

2、businessMapper

@Mapper
@Repository
public interface BusinessMapper {
    List<Business> getBusiness();

    List<Business> getBusinessById(@Param("pid") Integer pid);
}

3、controller

@RestController
public class BusinessController {
    @Autowired
    BusinessMapper businessMapper;
   
   //根据部门id返回属于该部门的所有业务
   @RequestMapping("/getBusinessById")
   public R getBusinessById(Integer id)
   {
       List<Business> list=businessMapper.getBusinessById(0);
       ArrayList<Business> businessesArrayList = new ArrayList<>();
       for (int i=0;i<list.size();i++)
       {
           if(list.get(i).getDepartmentId()==id)
           {
               businessesArrayList.add(list.get(i));
           }
       }
       return R.ok().put("business",businessesArrayList);
   }

4、businessMapper.xml

<?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.boseidong.cfzxzspzx.mapper.BusinessMapper">
    <resultMap id="getSelf" type="com.boseidong.cfzxzspzx.entity.Business">
        <id column="id" property="id"/>
        <result column="parent_id" property="parentId"/>
        <result column="department_id" property="departmentId"/>
        <result column="is_presonal" property="isPresonal"/>
        <result column="business_name" property="businessName"/>
        <result column="title" property="title"/>
        <result column="data" property="data"/>
        <result column="is_print" property="isPrint"/>
        <result column="is_delete" property="isDelete"/>
        <result column="create_time" property="createTime"/>
        <result column="update_time" property="updateTime"/>
        <collection property="businesses" select="getBusinessById"
                    column="id">
        </collection>
        <!--查到的cid作为下次的pid -->
    </resultMap>
    <select id="getBusinessById" resultMap="getSelf">
        select * from business b1
        where b1.parent_id=#{pid}
    </select>
</mapper>

注意:

1.collection 的column与id的column相同,property为实体类中子集合的名字,select与查询方法名字相同

2.查询时一定要将id和parentId都查出来,否则mybaits无法完成递归,我用*查就更没问题了。实体类中也要有父id那个属性

3、以上实现至针对传入参数为一个值的时候,parentId传进去的值要是最顶级的,这里就是0
————————————————
 

原文链接:https://blog.csdn.net/lianzhang861/article/details/86243532 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值