mybatis实现读取树结构数据详细介绍如下所示:
表结构
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
CREATE TABLE `lscrm_function_privilege` ( `id` int ( 10 ) unsigned NOT NULL AUTO_INCREMENT COMMENT '编号' , `create_id` varchar( 30 ) NOT NULL DEFAULT 'sys' , `update_id` varchar( 30 ) NOT NULL DEFAULT 'sys' , `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间' , `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间' , `validity` tinyint( 3 ) unsigned NOT NULL DEFAULT '1' COMMENT '有效性 1.有效 0. 无效' , `code` varchar( 50 ) NOT NULL DEFAULT '' COMMENT '编码' , `function_name` varchar( 50 ) NOT NULL DEFAULT '' COMMENT '名称' , `parent_id` tinyint( 3 ) unsigned NOT NULL DEFAULT '0' COMMENT '父节点' , `is_leaf_node` tinyint( 3 ) unsigned NOT NULL DEFAULT '1' COMMENT '是否叶子节点(叶子结点 就是度为0的结点 就是没有子结点的结点),在添加子节点时,需要将parent_id is_leaf_node 设置成0' , `sub_system_id` int ( 10 ) unsigned NOT NULL DEFAULT '0' COMMENT '所属子系统' , `is_hidden` tinyint( 3 ) unsigned NOT NULL DEFAULT '0' COMMENT 'UI是否隐藏,ui上不展示' , PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT= 22 DEFAULT CHARSET=utf8 COMMENT= '子code 按照父code 来创建\r\n如: customer.add' ; |
构造数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
INSERT INTO `lscrm_function_privilege` VALUES ( '1' , 'sys' , 'sys' , '2016-09-07 15:20:40' , '2016-09-07 15:21:17' , '1' , 'WEB.PERMISSION' , '权限管理' , '0' , '0' , '1' , '0' ); INSERT INTO `lscrm_function_privilege` VALUES ( '2' , 'sys' , 'sys' , '2016-09-07 15:21:12' , '2016-09-07 15:21:40' , '1' , 'WEB.PERMISSION.USER-MGMT' , '用户管理' , '1' , '0' , '1' , '0' ); INSERT INTO `lscrm_function_privilege` VALUES ( '3' , 'sys' , 'sys' , '2016-09-07 15:22:16' , '2016-09-07 15:22:35' , '1' , 'WEB.PERMISSION.USER-MGMT.ADD' , '新增用户' , '2' , '1' , '1' , '0' ); INSERT INTO `lscrm_function_privilege` VALUES ( '4' , 'sys' , 'sys' , '2016-09-07 15:23:17' , '2016-09-07 15:23:17' , '1' , 'WEB.PERMISSION.USER-MGMT.MODIFY' , '修改用户' , '2' , '1' , '1' , '0' ); INSERT INTO `lscrm_function_privilege` VALUES ( '5' , 'sys' , 'sys' , '2016-09-07 16:10:37' , '2016-09-07 16:10:42' , '1' , 'APP.CUSTOMER' , '客户管理' , '0' , '0' , '2' , '0' ); INSERT INTO `lscrm_function_privilege` VALUES ( '6' , 'sys' , 'sys' , '2016-09-07 16:11:06' , '2016-09-07 16:11:20' , '1' , 'APP.CUSTOMER.ADD' , '添加客户' , '5' , '1' , '2' , '0' ); INSERT INTO `lscrm_function_privilege` VALUES ( '7' , 'sys' , 'sys' , '2016-09-07 16:11:06' , '2016-09-07 16:11:20' , '1' , 'APP.CUSTOMER.MODIFY' , '修改客户' , '5' , '1' , '2' , '0' ); INSERT INTO `lscrm_function_privilege` VALUES ( '8' , 'sys' , 'sys' , '2016-09-07 16:12:33' , '2016-09-07 16:14:10' , '1' , 'APP.CUSTOMER.VIEWDETAIL' , '查看客户详情' , '5' , '1' , '2' , '0' ); INSERT INTO `lscrm_function_privilege` VALUES ( '9' , 'sys' , 'sys' , '2016-09-07 16:12:33' , '2016-09-07 16:12:33' , '1' , 'APP.CUSTOMER.ADDVISIT' , '添加拜访' , '5' , '1' , '2' , '0' ); INSERT INTO `lscrm_function_privilege` VALUES ( '10' , 'sys' , 'sys' , '2016-09-07 16:13:59' , '2016-09-07 16:14:17' , '1' , 'APP.CUSTOMER.VIEWDEMAND' , '查看客户采购需求' , '5' , '1' , '2' , '0' ); INSERT INTO `lscrm_function_privilege` VALUES ( '11' , 'sys' , 'sys' , '2016-09-07 16:13:59' , '2016-09-07 16:14:17' , '1' , 'APP.CUSTOMER.VIEWORDER' , '查看客户订单' , '5' , '1' , '2' , '0' ); INSERT INTO `lscrm_function_privilege` VALUES ( '12' , 'sys' , 'sys' , '2016-09-07 16:13:59' , '2016-09-07 16:14:17' , '1' , 'APP.CUSTOMER.VIEWSHOP' , '查看客户订单' , '5' , '1' , '2' , '0' ); INSERT INTO `lscrm_function_privilege` VALUES ( '13' , 'sys' , 'sys' , '2016-09-07 16:17:28' , '2016-09-07 16:18:39' , '1' , 'APP.CUSTOMER.VIEWREPLY' , '查看抢单列表' , '5' , '1' , '2' , '0' ); INSERT INTO `lscrm_function_privilege` VALUES ( '14' , 'sys' , 'sys' , '2016-09-07 16:19:32' , '2016-09-07 16:23:51' , '1' , 'APP.CUSTOMER.FASTOPENSHOP' , '快捷开店' , '5' , '1' , '2' , '0' ); INSERT INTO `lscrm_function_privilege` VALUES ( '15' , 'sys' , 'sys' , '2016-09-07 16:22:33' , '2016-09-07 16:22:33' , '1' , 'APP.DEMAND' , '需求管理' , '0' , '0' , '2' , '0' ); INSERT INTO `lscrm_function_privilege` VALUES ( '17' , 'sys' , 'sys' , '2016-09-07 16:23:21' , '2016-09-07 16:23:21' , '1' , 'APP.DEMAND.PRIVATE' , '私海需求' , '15' , '1' , '2' , '0' ); INSERT INTO `lscrm_function_privilege` VALUES ( '18' , 'sys' , 'sys' , '2016-09-07 16:23:58' , '2016-09-07 16:23:58' , '1' , 'APP.DEMAND.FEEDBACK' , '找版反馈' , '15' , '1' , '2' , '0' ); INSERT INTO `lscrm_function_privilege` VALUES ( '19' , 'sys' , 'sys' , '2016-09-07 16:24:47' , '2016-09-07 16:24:47' , '1' , 'APP.DEMAND.PUSHSEARCH' , '推送卖家搜索' , '15' , '1' , '2' , '0' ); INSERT INTO `lscrm_function_privilege` VALUES ( '20' , 'sys' , 'sys' , '2016-09-07 16:25:56' , '2016-09-07 16:25:56' , '1' , 'APP.KPI' , '绩效管理' , '0' , '0' , '2' , '0' ); INSERT INTO `lscrm_function_privilege` VALUES ( '21' , 'sys' , 'sys' , '2016-09-07 16:27:02' , '2016-09-07 16:27:02' , '1' , 'APP.KPI.VIEWDATA' , '查看绩效数据' , '20' , '1' , '2' , '0' ); |
实体bean
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
|
package com.lianshang.crm.biz.entity; import com.google.common.base.MoreObjects; import java.util.ArrayList; import java.util.Date; import java.util.List; public class LscrmFunctionPrivilegeEntity { /**编号**/ private int id; private String createId; private String updateId; /**创建时间**/ private Date createTime; /**修改时间**/ private Date updateTime= new Date(); /**有效性 1.有效 0. 无效**/ private int validity= 1 ; /**编码**/ private String code; /**名称**/ private String functionName; /**父节点**/ private int parentId; /**是否叶子节点(叶子结点 就是度为0的结点 就是没有子结点的结点),在添加子节点时,需要将parent_id is_leaf_node 设置成0**/ private int isLeafNode; /**所属子系统**/ private int subSystemId; /**UI是否隐藏,ui上不展示**/ private int isHidden= 1 ; private List<LscrmFunctionPrivilegeEntity> privilegeList = new ArrayList<>(); //get()/set()省略。。。 } package com.lianshang.crm.biz.entity; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * Created by zhenyu on 2016/9/8. */ public class LscrmFunctionPrivilegeTree { /**编号**/ private int id; private String createId; private String updateId; /**创建时间**/ private Date createTime; /**修改时间**/ private Date updateTime= new Date(); /**有效性 1.有效 0. 无效**/ private int validity= 1 ; /**编码**/ private String code; /**名称**/ private String functionName; /**父节点**/ private int parentId; /**是否叶子节点(叶子结点 就是度为0的结点 就是没有子结点的结点),在添加子节点时,需要将parent_id is_leaf_node 设置成0**/ private int isLeafNode; /**所属子系统**/ private int subSystemId; /**UI是否隐藏,ui上不展示**/ private int isHidden= 1 ; private List<LscrmFunctionPrivilegeEntity> privilegeList = new ArrayList<>(); } |
mapper配置
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
|
<?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.lianshang.crm.biz.dao.LscrmFunctionPrivilegeDao" > <cache eviction= "FIFO" flushInterval= "60000" size= "1024" readOnly= "true" /> <resultMap id= "LscrmFunctionPrivilegeResult" type= "LscrmFunctionPrivilegeEntity" > <id property= "id" column= "id" /> <result property= "createId" column= "create_id" /> <result property= "updateId" column= "update_id" /> <result property= "createTime" column= "create_time" /> <result property= "updateTime" column= "update_time" /> <result property= "validity" column= "validity" /> <result property= "code" column= "code" /> <result property= "functionName" column= "function_name" /> <result property= "parentId" column= "parent_id" /> <result property= "isLeafNode" column= "is_leaf_node" /> <result property= "subSystemId" column= "sub_system_id" /> <result property= "isHidden" column= "is_hidden" /> </resultMap> <resultMap id= "SubPrivilegesResult" type= "LscrmFunctionPrivilegeEntity" extends = "LscrmFunctionPrivilegeResult" > <collection property= "privilegeList" javaType= "java.util.ArrayList" column= "id" ofType= "LscrmFunctionPrivilegeEntity" select= "selectSubPrivileges" ></collection> </resultMap> <resultMap id= "LscrmFunctionPrivilegeTreeResult" type= "LscrmFunctionPrivilegeTree" extends = "SubPrivilegesResult" > <!--<association property= "functionPrivilege" column= "id" javaType= "LscrmFunctionPrivilegeEntity" resultMap= "LscrmFunctionPrivilegeResult" />--> <collection property= "privilegeList" javaType= "java.util.ArrayList" column= "id" ofType= "LscrmFunctionPrivilegeEntity" select= "selectSubPrivileges" ></collection> </resultMap> <sql id= "tbl_name" > lscrm_function_privilege </sql> <sql id= "role_privilege_tbl_name" > lscrm_role_privilege </sql> <sql id= "select_sql" > select id, create_id, update_id, create_time, update_time, validity, code, function_name, parent_id, is_leaf_node, sub_system_id, is_hidden from <include refid= "tbl_name" /> </sql> <select id= "readAllPrivileges" resultMap= "LscrmFunctionPrivilegeTreeResult" useCache= "true" > <include refid= "select_sql" /> WHERE parent_id = 0 < if test= "subSystemId > 0 " > AND sub_system_id= #{subSystemId} </ if > </select> <select id= "selectSubPrivileges" resultMap= "SubPrivilegesResult" > <include refid= "select_sql" /> WHERE parent_id = #{id} </select> </mapper> package com.lianshang.crm.biz.dao; import com.lianshang.crm.api.dto.LscrmFunctionPrivilege; import com.lianshang.crm.biz.entity.LscrmFunctionPrivilegeEntity; import com.lianshang.crm.biz.entity.LscrmFunctionPrivilegeTree; import org.apache.ibatis.annotations.Param; import java.util.List; public interface LscrmFunctionPrivilegeDao { List<LscrmFunctionPrivilegeTree> readAllPrivileges( @Param ( "subSystemId" ) int subSystemId); } |
service
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
|
package com.lianshang.crm.biz.service.impl; import com.alibaba.fastjson.JSON; import com.google.common.base.Function; import com.lianshang.common.utils.general.GeneralResult; import com.lianshang.common.utils.general.GuavaUtil; import com.lianshang.common.utils.general.StringUtil; import com.lianshang.crm.api.dto.LscrmFunctionPrivilege; import com.lianshang.crm.api.service.LscrmFunctionPrivilegeService; import com.lianshang.crm.biz.dao.LscrmFunctionPrivilegeDao; import com.lianshang.crm.biz.entity.LscrmFunctionPrivilegeEntity; import com.lianshang.crm.biz.entity.LscrmFunctionPrivilegeTree; import org.springframework.beans.factory.annotation.Autowired; import java.util.ArrayList; import java.util.Date; import java.util.List; import static com.google.common.collect.FluentIterable.from; public class LscrmFunctionPrivilegeServiceImpl implements LscrmFunctionPrivilegeService { @Autowired private LscrmFunctionPrivilegeDao lscrmFunctionPrivilegeDao; @Override public GeneralResult<String> readAllPrivileges( int subSystemId) { List<LscrmFunctionPrivilegeTree> privilegeTrees = lscrmFunctionPrivilegeDao.readAllPrivileges(subSystemId); return new GeneralResult<>(JSON.toJSONString(privilegeTrees)); } } |
返回结果
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
|
[ { "code" : "WEB.PERMISSION" , "createId" : "sys" , "createTime" : 1473232840000 , "functionName" : "权限管理" , "hidden" : 0 , "id" : 1 , "leafNode" : 0 , "parentId" : 0 , "privilegeList" : [ { "code" : "WEB.PERMISSION.USER-MGMT" , "createId" : "sys" , "createTime" : 1473232872000 , "functionName" : "用户管理" , "hidden" : 0 , "id" : 2 , "leafNode" : 0 , "parentId" : 1 , "privilegeList" : [ { "code" : "WEB.PERMISSION.USER-MGMT.ADD" , "createId" : "sys" , "createTime" : 1473232936000 , "functionName" : "新增用户" , "hidden" : 0 , "id" : 3 , "leafNode" : 1 , "parentId" : 2 , "privilegeList" : [], "subSystemId" : 1 , "updateId" : "sys" , "updateTime" : 1473232955000 , "validity" : 1 }, { "code" : "WEB.PERMISSION.USER-MGMT.MODIFY" , "createId" : "sys" , "createTime" : 1473232997000 , "functionName" : "修改用户" , "hidden" : 0 , "id" : 4 , "leafNode" : 1 , "parentId" : 2 , "privilegeList" : [], "subSystemId" : 1 , "updateId" : "sys" , "updateTime" : 1473232997000 , "validity" : 1 } ], "subSystemId" : 1 , "updateId" : "sys" , "updateTime" : 1473232900000 , "validity" : 1 } ], "subSystemId" : 1 , "updateId" : "sys" , "updateTime" : 1473232877000 , "validity" : 1 } ] |
以上所述是小编给大家介绍的mybatis实现读取树结构数据实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!
原文链接:http://blog.csdn.net/u012587693/article/details/52474282