mybatis递归 一对多的实现方法示例

网友投稿 180 2023-07-23

mybatis递归 一对多的实现方法示例

前言

今天需要做一个功能,根据专业,有不同的章节,章节下面有对应的习题,

由于只有这么两级,可以不用使用递归,直接查询父集,之后foreach查询子集放入对应的list集合。

虽然实现了,感觉毕竟,太low。

有同事跟我说可以使用mybatis的递归实现,就学习了下。

对应的bean里面需要有对应的list lists的引用。

直接上代码

对应的sql语句

CREATE TABLE `goods_category` (

`goodscateid` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(255) DEFAULT NULL,

`parentid` int(11) DEFAULT NULL,

`description` varchar(255) DEFAULT NULL,

`displayorder` inthttp://(11) DEFAULT NULL,

`commissionrate` double DEFAULT NULL,

`enabled` int(11) DEFAULT NULL,

PRIMARY KEY (`goodscateid`)

) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

/*Data for the table `goods_category` */

insert into `goods_category`(`goodscateid`,`name`,`parentid`,`description`,`displayorder`,`commissionrate`,`enabled`) values (1,'java',0,'111',NULL,NULL,NULL),(2,'spring',1,'222',NULL,NULL,NULL),(3,'springmvc',1,'333',NULL,NULL,NULL),(4,'struts',1,'444',NULL,NULL,NULL),(5,'jdbc',0,'555',NULL,NULL,NULL),(6,'hibernate',5,'666',NULL,NULL,NULL),(7,'mybatis',5,'777',NULL,NULL,NULL),(8,'jdbctemplate',5,'888',NULL,NULL,NULL),(9,'beanfactory',3,'999',NULL,NULL,NULL),(10,'factorybean',3,'000',NULL,NULL,NULL);

实体类

@jsonIgnoreProperties({"displayorder","commissionrate","enabled"})

public class GoodsCategoryVo {

private Integer goodscateid;

private String name;

private Integer parentid;

private String description;

private Integer displayorder;

private Double commissionrate;

private Integer enabled;

private List catelist;

get 。。。 set。。。 tostring。。。

dao层

public interface GoodsMapper {

List getCategory(Integer pid);

}

mapper.xml

column="goodscateid">

column="goodscateid">

select * from goods_category where parentid=#{pid}

ORDER BY displayorder,goodscateid

之后直接访问对应的方法,即可查询出来

@RequestMapping("/getGoodsList")

@ResponseBody

public List getGoodsList(){

// pid指定为0

List list = goodsMapper.getCategory(0);

return list;

}

结果,可以使用json在线工具 ,也可以使用这个工具

[

{

"goodscateid": 1,

"name": "java",

"parentid": 0,

"description": "111",

"catelist": [

{

"goodscateid": 2,

"name": "spring",

"parentid": 1,

"description": "222",

"catelist": []

},

{

"goodscateid": 3,

"name": "springmvc",

"parentid": 1,

"description": "333",

"catelist": [

{

"goodscateid": 9,

"name": "beanfactory",

"parentid": 3,

"description": "999",

"catelist": []

},

{

"goodscateid": 10,

"name": "factorybean",

"parentid": 3,

"description": "000",

"catelist": []

}

]

},

{

"goodscateid": 4,

"name": "struts",

"parentid": 1,

"description": "444",

"catelist": []

}

]

},

{

"goodscateid": 5,

"name": "jdbc",

"parentid": 0,

"description": "555",

"catelist": [

{

"goodscateid": 6,

"name": "hibernate",

"parentid": 5,

"description": "666",

"catelist": []

},

{

"goodscateid": 7,

"name": "mybatis",

"parentid": 5,

"description": "777",

"catelist": []

},

{

"goodscateid": 8,

"name": "jdbctemplate",

"parentid": 5,

"description": "888",

"catelist": []

}

]

}

]

mybatis递归就是这么的简单。

说下mybatis一对多实现

对应的bean

public class Dept {

private Integer id;

private String deptName;

private String locAdd;

private List emps

@JsonIgnoreProperties("dept")

public class Emp {

private Integer id;

private String name;

private Dept dept;

dao层

public interface DeptMapper {

public Dept getDeptById(Integer id);

}

public interface EmpMapper {

public Emp getEmpByDeptId(Integer deptId);

}

mapper.xml文件

select * from tbl_dept where id=#{id}

select * from tbl_emp where deptId=#{deptId}

对应的controller方法

@RequestMapping("/getDeptById")

@ResponseBody

public Dept getDeptById() {

Dept deptById = deptMapper.getDeptById(1);

return deptById;

}

无非就是比简单查询复杂一些罢了。

代码目录

OK!!!

对应的github地址

https://github.com/chywx/MavenProject6oneToMany (本地下载)

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:详解spring cloud分布式关于熔断器
下一篇:羊毛盾: 保护您的隐私和安全的必备工具
相关文章

 发表评论

暂时没有评论,来抢沙发吧~