前言
今天需要做一个功能,根据专业,有不同的章节,章节下面有对应的习题,
由于只有这么两级,可以不用使用递归,直接查询父集,之后foreach查询子集放入对应的list集合。
虽然实现了,感觉毕竟,太low。
有同事跟我说可以使用mybatis的递归实现,就学习了下。
对应的bean里面需要有对应的list<bean> lists的引用。
直接上代码
对应的sql语句
1
2
3
4
5
6
7
8
9
10
11
12
13
|
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` int ( 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 ); |
实体类
1
2
3
4
5
6
7
8
9
10
11
|
@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<goodscategoryvo> catelist; get 。。。 set。。。 tostring。。。 |
dao层
1
2
3
|
public interface goodsmapper { list<goodscategoryvo> getcategory(integer pid); } |
mapper.xml
1
2
3
4
5
6
7
8
9
10
11
12
|
<resultmap id= "getself" type= "com.bscc.beans.goodscategoryvo" > <id column= "goodscateid" property= "goodscateid" ></id> <result column= "name" property= "name" ></result> <collection property= "catelist" select= "getcategory" column= "goodscateid" ></collection> <!--查到的cid作为下次的pid --> </resultmap> <select id= "getcategory" resultmap= "getself" > select * from goods_category where parentid=#{pid} order by displayorder,goodscateid </select> |
之后直接访问对应的方法,即可查询出来
1
2
3
4
5
6
7
|
@requestmapping ( "/getgoodslist" ) @responsebody public list<goodscategoryvo> getgoodslist(){ // pid指定为0 list<goodscategoryvo> list = goodsmapper.getcategory( 0 ); return list; } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
[ { "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
1
2
3
4
5
|
public class dept { private integer id; private string deptname; private string locadd; private list<emp> emps |
1
2
3
4
5
|
@jsonignoreproperties ( "dept" ) public class emp { private integer id; private string name; private dept dept; |
dao层
1
2
3
|
public interface deptmapper { public dept getdeptbyid(integer id); } |
1
2
3
|
public interface empmapper { public emp getempbydeptid(integer deptid); } |
mapper.xml文件
1
2
3
4
5
6
7
8
9
10
11
12
|
<mapper namespace= "com.bscc.mapper.deptmapper" > <resultmap id= "deptresultmap" type= "com.bscc.beans.dept" > <id property= "id" column= "id" /> <result property= "deptname" column= "deptname" /> <result property= "locadd" column= "locadd" /> <!-- private list<emp> emps; column= "id" 写被集合对象主键,select按照外键键查询,通过deptid查出emp给dept--> <collection property= "emps" column= "id" oftype= "emp" select= "com.bscc.mapper.empmapper.getempbydeptid" /> </resultmap> <select id= "getdeptbyid" parametertype= "integer" resultmap= "deptresultmap" > select * from tbl_dept where id=#{id} </select> </mapper> |
1
2
3
4
5
6
7
8
9
|
<mapper namespace= "com.bscc.mapper.empmapper" > <resultmap id= "empresultmap" type= "com.bscc.beans.emp" > <id property= "id" column= "id" /> <result property= "name" column= "name" /> </resultmap> <select id= "getempbydeptid" parametertype= "integer" resultmap= "empresultmap" > select * from tbl_emp where deptid=#{deptid} </select> </mapper> |
对应的controller方法
1
2
3
4
5
6
|
@requestmapping ( "/getdeptbyid" ) @responsebody public dept getdeptbyid() { dept deptbyid = deptmapper.getdeptbyid( 1 ); return deptbyid; } |
无非就是比简单查询复杂一些罢了。
代码目录
ok!!!
对应的github地址
https://github.com/chywx/mavenproject6onetomany
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对服务器之家的支持。
原文链接:https://www.cnblogs.com/c-h-y/p/9434126.html