# auto-inject-resource **Repository Path**: huwenwen/auto-inject-resource ## Basic Information - **Project Name**: auto-inject-resource - **Description**: 自动注入资源(后台权限系统中的资源or菜单)。自动扫描方法头上的注解,可以将资源信息插入数据库中。 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 13 - **Forks**: 6 - **Created**: 2017-01-17 - **Last Updated**: 2022-02-21 ## Categories & Tags **Categories**: authority-management **Tags**: None ## README # 自动加载权限系统中的资源到数据库 * 适用的javaWeb后台系统: 资源表的设计必须可以用 资源名称 + 你定义的字段 来唯一区分 * 用唯一区别的字段来寻找父节点 * 如果你的系统使用springMvc, 你可以使用[spring版本](https://github.com/huwenwen/auto_inject_resource/tree/spring) ## Getting Start 1. maven 配置 wenwen https://wenwen.bintray.com/mvn-repo/ com.github.huwenwen auto-inject-resource 0.0.3 2. 加入配置 3. 需要自动保存到数据库的资源,在方法上加 @InjectResource(name="resourceName", url="/test/123" parentName="resourceParentName") 4. 保存资源到数据库 // 注入 @Inject private AutoInjectResource autoInjectResource; // 调用方法 autoInjectResource.saveResource(); ## 使用文档 1. 配置自己数据库的资源表的表名称以及字段名称 >第一种方式:在classpath路径下加入 auto_inject_resource.properties 文件。如下该文件示例 # 资源表名 resource.table.name=m_resource # 资源表对应url的列名 table.column.url=RESOURCE_STRING # 资源表对应名称的列名 table.column.name=RESOURCE_NAME # 资源表对应排序列名 table.column.power=SORT_INDEX # 资源表对应级别列名 table.column.grade=GRADE # 对应父节点字段列名 table.column.parent=PARENT_ID # 父节点字段的取值来源字段列名 table.column.parent.source=RESOURCE_ID >第二种方式:spring属性注入 2. 可以在@InjectResource customProps中 加入一些自定义的数据库字段和对应的值。 customProps 为数组, 数组中的值的格式为key:value, key为资源表中的字段名,value为这个字段的值 @InjectResource(name = "resourceName", url="abc/123", parentName = "resourceParentName", customProps = {"key1:value1", "key2:value2"}) 3. 资源名称 + 自定义的可以唯一区别的字段使用 自定义确认父节点的字段(默认加上资源名称)。如上则是用 (资源名称 + column1 + column2) 来唯一确认父节点 和 唯一确定这条资源。 可以是一个或者多个。也可以不注入,不注入则默认用[资源名称]来唯一区分并确认父节点 和 这条资源。 一旦注入 otherConfirmUniqueColumns 字段, 你的@InjectResource 中的 parentOtherProps(没有父节点可以不要) 和 customProps 属性必须也要有这些字段。 如上注入则 @InjectResource中必须包含 parentOtherProps={"column1:value1, column2:value2"} (没有父节点可以不要) customProps={"column1:value1, column2:value2"}。 4. customProps和parentOtherProps默认值 注入(key:资源表字段, value:该字段值) 如上注入全局生效。如果你想某个注入的资源不生效, 你可以这么使用@InjectResource(enableDefaultCustomProps = false, enableDefaultParentOtherProps = false) 5. 就近原则 全局的customProps和parentOtherProps的注入 和 局部@InjectResource(customProps={}, parentOtherProps={})有相同的key, 局部的优先级高。 ## 缺陷 * 通过注入的资源, 资源名称不能修改。资源名称如果修改,下次这个资源还会再次保存在数据库。 ## DEMO 我的数据库资源表结构如下 CREATE TABLE `M_RESOURCE` ( `RESOURCE_ID` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '资源id', `RESOURCE_NAME` varchar(128) DEFAULT NULL COMMENT '资源名称', `RESOURCE_DESC` varchar(128) DEFAULT NULL COMMENT '资源描述', `RESOURCE_TYPE` char(4) DEFAULT '0' COMMENT '资源类型', `IS_ENABLED` char(4) DEFAULT '1' COMMENT '是否可用', `SHOW_NAV` char(4) DEFAULT '0' COMMENT '是否显示', `GRADE` char(4) DEFAULT '0' COMMENT '菜单级别', `PRJ_TYPE` char(4) DEFAULT '0', `SORT_INDEX` int(11) DEFAULT '0' COMMENT '排序', `PARENT_ID` int(11) DEFAULT '0', `RESOURCE_STRING` varchar(128) NOT NULL DEFAULT '' COMMENT '资源url', `CREATE_USER` varchar(128) DEFAULT NULL, `CREATED_AT` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `UPDATED_AT` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间', PRIMARY KEY (`RESOURCE_ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='资源表'; controller层 @Controller @RequestMapping(value = "/test") public class TestController { /** * 一级菜单, 没有父节点 */ @RequestMapping(value = "/abc1", method = RequestMethod.GET) @InjectResource(name = "ResourceName1", url = "/parent", power = 10, grade = 1, customProps = {"RESOURCE_TYPE:1", "SHOW_NAV:1"}) public ModelAndView list() { // dosomthing } /** * 二级菜单, 父节点为上面 */ @RequestMapping(value = "/abc2", method = RequestMethod.GET) @InjectResource(name = "ResourceName2", parentName="ResourceName1", url = "/children", power = 10, grade = 2, customProps = {"RESOURCE_TYPE:2", "SHOW_NAV:0"}) public ModelAndView listDetail() { // dosomthing } 向数据库插入以上资源: List successInsertResourceList = autoInjectResource.saveResource(); 返回的list为成功向数据库插入的数据