mybatis實作讀取樹結構資料詳細說明如下圖所示:
表結構
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';
建構資料
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');
service
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<>(); }
回傳結果
<?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); }
以上所述是小編給大家介紹的mybatis實現讀取樹結構資料實例代碼,希望對大家有所幫助,如果有任何疑問請給我留言,小編會及時回覆大家的。在此也非常感謝大家對PHP中文網的支持!
更多mybatis實作讀取樹結構資料實例代碼相關文章請關注PHP中文網!

phpIdentifiesauser'ssessionSessionSessionCookiesAndSessionId.1)whiwsession_start()被稱為,phpgeneratesainiquesesesessionIdStoredInacookInAcookInAcienamedInAcienamedphpsessIdontheuser'sbrowser'sbrowser.2)thisIdallowSphptpptpptpptpptpptpptpptoretoreteretrieetrieetrieetrieetrieetrieetreetrieetrieetrieetrieetremthafromtheserver。

PHP會話的安全可以通過以下措施實現:1.使用session_regenerate_id()在用戶登錄或重要操作時重新生成會話ID。 2.通過HTTPS協議加密傳輸會話ID。 3.使用session_save_path()指定安全目錄存儲會話數據,並正確設置權限。

phpsessionFilesArestoredIntheDirectorySpecifiedBysession.save_path,通常是/tmponunix-likesystemsorc:\ windows \ windows \ temponwindows.tocustomizethis:tocustomizEthis:1)useession_save_save_save_path_path()

ToretrievedatafromaPHPsession,startthesessionwithsession_start()andaccessvariablesinthe$_SESSIONarray.Forexample:1)Startthesession:session_start().2)Retrievedata:$username=$_SESSION['username'];echo"Welcome,".$username;.Sessionsareserver-si

利用會話構建高效購物車系統的步驟包括:1)理解會話的定義與作用,會話是服務器端的存儲機制,用於跨請求維護用戶狀態;2)實現基本的會話管理,如添加商品到購物車;3)擴展到高級用法,支持商品數量管理和刪除;4)優化性能和安全性,通過持久化會話數據和使用安全的會話標識符。

本文討論了PHP中的crypt()和password_hash()的差異,以進行密碼哈希,重點介紹其實施,安全性和對現代Web應用程序的適用性。

文章討論了通過輸入驗證,輸出編碼以及使用OWASP ESAPI和HTML淨化器之類的工具來防止PHP中的跨站點腳本(XSS)。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

Atom編輯器mac版下載
最受歡迎的的開源編輯器

Dreamweaver CS6
視覺化網頁開發工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。