Bläddra i källkod

删除quick-start

zhouhao 6 år sedan
förälder
incheckning
dd2d48aabd

+ 0 - 152
quick-start/AUTZ.md

@@ -1,152 +0,0 @@
-# 权限控制
-
-hsweb提供了一个灵活的权限控制,设置方式,实现了多维度,可自定义的RBAC和数据权限控制.
-
-## 使用
-
-以下例子在[快速入门](README.md)的基础上建立
-
-1. 引入依赖
-```xml
-    <!--权限控制-->
-    <dependency>
-        <groupId>org.hswebframework.web</groupId>
-        <artifactId>hsweb-authorization-basic</artifactId>
-        <version>${hsweb.framework.version}</version>
-    </dependency>
-```
-
-2. 在启动类上注解:`@EnableAopAuthorize`
-```java
-@SpringBootApplication
-@MapperScan(basePackages = "com.mycompany.dao", markerInterface = Dao.class)
-@EnableAopAuthorize //开启AOP权限控制
-public class MyProjectApplication {
-
-    public static void main(String[] args) {
-        SpringApplication.run(MyProjectApplication.class, args);
-    }
-}
-```
-
-3. 在`application.yml`中加入配置
-```yaml
-hsweb:
-    users:
-        admin:
-          name: 超级管理员
-          username: admin
-          password: admin
-          roles: #用户的角色
-            - id: admin
-              name: 管理员
-            - id: user
-              name: 用户
-          permissions:  # 用户的权限
-            - id: test #权限标识,可以理解为资源
-              actions: query,get,update,delete #用户持有对该资源的操作
-              dataAccesses:   # 数据权限配置,此配置表示在对test进行query操作的时候,不能查询password和salt字段
-                - action: query
-                  type: DENY_FIELDS
-                  fields:     
-                    - password
-                    - salt
-```
-
-4. 在`TestController`中加入权限控制,在类上注解`@Authorize(permission = "test")`
-
-```java
-@RestController
-@RequestMapping("/test")
-@Authorize(permission = "test")
-public class TestController implements SimpleGenericEntityController<TestEntity, String, QueryParamEntity> {
-
-    @Autowired
-    TestService testService;
-
-    @Override
-    public CrudService<TestEntity, String> getService() {
-        return testService;
-    }
-}
-```
-
-5. 启动服务,使用postman访问:`GET http://localhost:8080/test`.返回
-```json
-{
-    "message": "用户未登录",
-    "result": {
-        "index": 3,
-        "text": "用户未登录",
-        "value": "expired",
-        "mask": 8
-    },
-    "status": 401,
-    "timestamp": 1537342065201
-}
-```
-
-6. 调用登录接口登录`POST http://localhost:8080/authorize/login`
-
-username=admin&password=admin
-
-返回:
-```json
-{
-    "result": {
-        "userId": "admin"
-    },
-    "status": 200,
-    "timestamp": 1537342179265
-}
-```
-
-7.再次访问`GET http://localhost:8080/test`.返回正常数据.
-
-通过接口`GET http://localhost:8080/authorize/me`可查看当前登录用户的权限信息.
-
-通过接口`GET http://localhost:8080/authorize/exit`可退出登录.
-
-![test-auth](./img/test-auth.gif "test-auth")
-
-
-# 编程式
-
-可通过在Controller方法参数中直接注入`org.hswebframework.web.authorization.Authentication`接口获取当前登录用户权限信息.
-也可以通过静态方法方式获取:
-
-```java
-Authentication authentication= Authentication.current().orElseThrow(UnAuthorizedException::new);
-```
-
-可调用此接口的方法进行用户权限获取以及判断:
-```java
-//用户是否可以进行test的query操作
-authentication.hasPermission("test", "query");
-
-//用户是否拥有admin角色
-authentication.hasRole("admin");
-
-//获取用户在进行test的query操作时,不能操作的字段列表
-Set<String> denyFiledList= authentication.getPermission("test")
-            .map(permission->permission.findDenyFields("query"))
-            .orElseThrow(AccessDenyException::new);
-
-//获取用户在进行test的query操作时,能访问部门(department)(含子部门(children))数据的范围
-Set<Object> canQueryDepartment= authentication.getPermission("test")
-            .map(permission->permission.findScope("query","department","children"))
-            .orElseThrow(AccessDenyException::new);
-
-```
-
-# 使用数据库来维护用户以及权限信息
-
-在上述说明中是通过配置文件来进行用户以及权限配置的,在hsweb-system模块中还提供了使用数据库来来进行更灵活的权限信息配置
-
-[请看这里](../hsweb-system/hsweb-system-authorization)
-
-# 会话状态
-
-默认使用`sessionId`来作为用户的`token`,你也可以通过拓展来实现自定义的`token`策略:
-
-[请看这里](https://github.com/hs-web/hsweb-framework/wiki/autz#%E8%87%AA%E5%AE%9A%E4%B9%89token%E7%AD%96%E7%95%A5%E5%AE%9E%E7%8E%B0%E5%89%8D%E5%90%8E%E5%88%86%E7%A6%BB)

+ 0 - 220
quick-start/CUSTOM-PROP.md

@@ -1,220 +0,0 @@
-# 拓展自定义字段
-
-在`hsweb-system`中提供了一些业务功能,但是有的功能只提供了基本的字段信息.`hsweb`提供了拓展字段而无需修改框架源码的方法.
-
-## 拓展实体类
-
-以拓展组织架构中的组织字段为例
-
-1. 编写实体类,继承需要拓展的实体:
-```java
-package com.myproject.entity;
-
-import org.hswebframework.web.entity.organizational.SimpleOrganizationalEntity;
-
-public class CustomOrganizationalEntity extends SimpleOrganizationalEntity {
-    
-    /**********拓展字段**********/
-    private String leader;
-
-    private String nameEn;
-
-    private String otherProperty;
-
-    public String getLeader() {
-        return leader;
-    }
-
-    public void setLeader(String leader) {
-        this.leader = leader;
-    }
-
-    public String getNameEn() {
-        return nameEn;
-    }
-
-    public void setNameEn(String nameEn) {
-        this.nameEn = nameEn;
-    }
-
-    public String getOtherProperty() {
-        return otherProperty;
-    }
-
-    public void setOtherProperty(String otherProperty) {
-        this.otherProperty = otherProperty;
-    }
-}
-```
-
-2. 告诉`hsweb`使用新的实体类
-
-将新的实体类提供给hsweb有3种方式.
-
-    第一种:java自带的serviceLoader;
-    第二种:application.yml配置;
-    第三种:java类方式配置.
-    注意: 选择其中任意一种即可.
-
-#### serviceLoader方式
-
-创建文件:`META-INF/services/org.hswebframework.web.entity.organizational.OrganizationalEntity`内容:
-
-```text
-com.myproject.entity.CustomOrganizationalEntity
-```
-
-#### application.yml方式
-
-```yaml
-hsweb: 
-   entity:
-     mappings:
-         -  source-base-package: org.hswebframework.web.entity.organizational
-            target-base-package: com.myproject.entity
-            mapping:
-                OrganizationalEntity: CustomOrganizationalEntity
-```
-
-#### java类方式
-```java
-    @Component
-    public class CustomEntityMappingCustomizer implements EntityMappingCustomizer {
-        @Override
-        public void customize(MapperEntityFactory entityFactory) {
-            //OrganizationalEntity使用CustomOrganizationalEntity实现
-            entityFactory.addMapping(OrganizationalEntity.class,
-                    MapperEntityFactory.defaultMapper(CustomOrganizationalEntity.class));
-        }
-    }
-
-```
-
-##  修改Dao字段映射
-
-使用mybatis作为dao实现时,如果实体类上没有使用jpa注解则需要修改`mapper.xml`的配置来拓展字段.
-
-jpa注解和mapper配置各有优势(jpa更简单,但只支持简单的字段.mybatis配置稍微复杂,灵活性更高),请根据实际情况选择合适的方式.
-
-#### 修改mapper配置文件方式
-
-1. 创建mapper.xml,可直接复制旧的xml进行修改.旧的xml可在`hsweb-system`中对应的模块进行查找.
-
-`com/myproject/mappers/OrganizationalMapper.xml`
-
-```xml
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-        "http://www.mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.hswebframework.web.dao.organizational.OrganizationalDao">
-    <resultMap id="OrganizationalResultMap" type="org.hswebframework.web.entity.organizational.OrganizationalEntity">
-        <!--默认的属性-->
-        <id property="id" column="u_id" javaType="string" jdbcType="VARCHAR"/>
-        <result property="name" column="name" javaType="String" jdbcType="VARCHAR"/>
-        <result property="fullName" column="full_name" javaType="String" jdbcType="VARCHAR"/>
-        <result property="code" column="code" javaType="String" jdbcType="VARCHAR"/>
-        <result property="optionalRoles" column="optional_roles" javaType="java.util.List" jdbcType="CLOB"/>
-        <result property="parentId" column="parent_id" javaType="String" jdbcType="VARCHAR"/>
-        <result property="path" column="path" javaType="String" jdbcType="VARCHAR"/>
-        <result property="sortIndex" column="sort_index" javaType="Long" jdbcType="DECIMAL"/>
-        <result property="status" column="status" javaType="Byte" jdbcType="DECIMAL"/>
-        <result property="level" column="level" javaType="Integer" jdbcType="DECIMAL"/>
-        <!--重点: 拓展的属性-->
-        <result property="nameEn" column="name_en" javaType="String" jdbcType="VARCHAR"/>
-        <result property="leader" column="leader" javaType="String" jdbcType="VARCHAR"/>
-        <result property="otherProperty" column="other_property" javaType="String" jdbcType="VARCHAR"/>
-
-    </resultMap>
-
-    <!--用于动态生成sql所需的配置-->
-    <sql id="config">
-        <bind name="resultMapId" value="'OrganizationalResultMap'"/>
-        <bind name="tableName" value="'s_organization'"/>
-    </sql>
-    <!--修改parameterType为新的实体类型-->
-    <insert id="insert" parameterType="com.myproject.entity.CustomOrganizationalEntity">
-        <include refid="config"/>
-        <include refid="BasicMapper.buildInsertSql"/>
-    </insert>
-
-    <delete id="deleteByPk" parameterType="String">
-        delete from s_organization where u_id =#{id}
-    </delete>
-
-    <delete id="delete" parameterType="org.hswebframework.web.commons.entity.Entity">
-        <include refid="config"/>
-        <include refid="BasicMapper.buildDeleteSql"/>
-    </delete>
-
-    <update id="update" parameterType="org.hswebframework.web.commons.entity.Entity">
-        <include refid="config"/>
-        <include refid="BasicMapper.buildUpdateSql"/>
-    </update>
-
-    <select id="query" parameterType="org.hswebframework.web.commons.entity.Entity" resultMap="OrganizationalResultMap">
-        <include refid="config"/>
-        <include refid="BasicMapper.buildSelectSql"/>
-    </select>
-
-    <select id="count" parameterType="org.hswebframework.web.commons.entity.Entity" resultType="int">
-        <include refid="config"/>
-        <include refid="BasicMapper.buildTotalSql"/>
-    </select>
-</mapper>
-```
-
-2. 覆盖`mapper.xml`配置,将`hsweb`自带的配置替换为新的配置.
-
-        覆盖方式有2种: application.yml或者java类配置.选择其一即可.
-
-application.yml方式:
-
-```yaml
-mybatis:
-  mapper-location-excludes: classpath*:org/hswebframework/**/OrganizationalMapper.xml #不加载的xml
-  mapper-locations: classpath*:com/myproject/mappers/OrganizationalMapper.xml
-```
-
-java类配置方式:
-```java
-@Component //提供给spring才会生效
-public class CustomMybatisMapperCustomizer implements MybatisMapperCustomizer {
-    @Override
-    public String[] getExcludes() {
-        return new String[]{
-                "classpath*:org/hswebframework/**/OrganizationalMapper.xml"
-        };
-    }
-
-    @Override
-    public String[] getIncludes() {
-        return new String[]{
-                "classpath*:com/myproject/mappers/OrganizationalMapper.xml"
-        };
-    }
-}
-```
-
-#### 使用jpa注解方式
-
-依赖jpa-api:
-```xml
-<dependency>
-    <groupId>org.hibernate.javax.persistence</groupId>
-    <artifactId>hibernate-jpa-2.0-api</artifactId>
-    <version>1.0.1.Final</version>
-</dependency>
-```
-
-在拓展的实体类中使用jpa注解:
-```java
-    @Data
-    @Table //此处设置表名是无效的,仅作为一个解析标识
-    public class CustomUserEntity extends SimpleBindRoleUserEntity {
-        @Column(name = "nick_name")
-        private String nickName;
-    }
-```
-注意: 暂时只支持简单的属性。不支持表关联
-

+ 0 - 566
quick-start/README.md

@@ -1,566 +0,0 @@
-# 快速入门
-
-本文提供了最基本的hsweb使用方式,只要认真阅读本文,创建一个项目不成问题.
-
-## 目录
-1. [前言](#前言)
-2. [创建项目](#创建项目)
-3. [增删改查](#增删改查)
-4. [更多教程](#更多教程)
-
-## 前言
-`hsweb`是基于`java8`,`spring-boot`,`mybatis`开发.所以在开始使用`hsweb`的前,你至少应该掌握以下技术:`java`,`maven`.
-最好掌握以下技术:`spring-boot`,`mybatis`. 如果对以上技术一无所知,请先去各大搜索引擎学习之. 
-
-`hsweb`是一个模块化的项目,对各个功能进行了细分,这是为了更好的拓展性,但是在实际业务项目中,并不需要这样的细分,因此,强烈不建议自己直接将hsweb-framework clone下来在上面添加业务代码,正确的姿势是使用maven,根据自己的需求依赖hsweb的各个模块. 
-
-hsweb 目前未提供前端支持,仅有一个[demo](https://github.com/hs-web/hsweb3-demo)可供参考.
-
-本入门教程以一个最传统的单模块项目为例子. IDE为:`Intellij IDEA`(需安装lombok插件)
-
-## 创建项目
-1. 新建maven项目:
-
-![新建项目](./img/create-project.gif "新建项目")
-
-编辑`pom.xml`,然后`reimport`.如果对maven不够熟悉,maven的设置请使用默认设置,不要在settings.xml里自己添加私服.
-否则可能出现依赖无法下载的问题.
-
-```xml
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <groupId>com.mycompany</groupId>
-    <artifactId>myproject</artifactId>
-    <version>1.0-SNAPSHOT</version>
-    <properties>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <project.build.locales>zh_CN</project.build.locales>
-        <spring.boot.version>1.5.13.RELEASE</spring.boot.version>
-
-        <java.version>1.8</java.version>
-        <project.build.jdk>${java.version}</project.build.jdk>
-
-        <hsweb.framework.version>3.0.0</hsweb.framework.version>
-
-        <hsweb.expands.version>3.0.1</hsweb.expands.version>
-
-
-    </properties>
-
-    <build>
-        <finalName>${project.artifactId}</finalName>
-        <resources>
-            <resource>
-                <directory>src/main/resources</directory>
-                <filtering>true</filtering>
-            </resource>
-        </resources>
-        <plugins>
-            <!--编译插件-->
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <version>3.1</version>
-                <!--指定编译器版本和字符集-->
-                <configuration>
-                    <source>${project.build.jdk}</source>
-                    <target>${project.build.jdk}</target>
-                    <encoding>${project.build.sourceEncoding}</encoding>
-                </configuration>
-            </plugin>
-
-            <!--
-            spring-boot插件
-            1. 可以使用命令 mvn spring-boot:run 直接运行项目
-            2. 使用mvn package命令打包为可执行jar,通过jar -jar 运行项目
-            -->
-            <plugin>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-maven-plugin</artifactId>
-                <version>${spring.boot.version}</version>
-                <configuration>
-                    <!--启动类-->
-                    <mainClass>com.mycompany.MyProjectApplication</mainClass>
-                    <layout>ZIP</layout>
-                </configuration>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>repackage</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-
-        </plugins>
-    </build>
-
-    <dependencies>
-
-        <!--test-->
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-test</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.hswebframework.web</groupId>
-            <artifactId>hsweb-tests</artifactId>
-            <version>${hsweb.framework.version}</version>
-            <scope>test</scope>
-        </dependency>
-        <!--必须要引入的依赖-->
-        
-        <!--对spring-cache一些问题的修复-->
-        <dependency>
-            <groupId>org.hswebframework.web</groupId>
-            <artifactId>hsweb-concurrent-cache</artifactId>
-            <version>${hsweb.framework.version}</version>
-        </dependency>
-        
-        <!--spring-boot-starter-->
-        <dependency>
-            <groupId>org.hswebframework.web</groupId>
-            <artifactId>hsweb-spring-boot-starter</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-logging</artifactId>
-        </dependency>
-        
-        <dependency>
-            <groupId>org.codehaus.groovy</groupId>
-            <artifactId>groovy-all</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>mysql</groupId>
-            <artifactId>mysql-connector-java</artifactId>
-            <version>5.1.40</version>
-        </dependency>
-
-        <dependency>
-            <groupId>com.alibaba</groupId>
-            <artifactId>druid</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>ch.qos.logback</groupId>
-            <artifactId>logback-classic</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-        </dependency>
-        
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-configuration-processor</artifactId>
-            <optional>true</optional>
-        </dependency>
-        
-        <dependency>
-            <groupId>org.projectlombok</groupId>
-            <artifactId>lombok</artifactId>
-        </dependency>
-
-        <!--以下为可选依赖-->
-        
-        
-    </dependencies>
-
-    <!--统一依赖管理-->
-    <dependencyManagement>
-        <dependencies>
-            <dependency>
-                <groupId>org.hswebframework.web</groupId>
-                <artifactId>hsweb-framework</artifactId>
-                <version>${hsweb.framework.version}</version>
-                <type>pom</type>
-                <scope>import</scope>
-            </dependency>
-            
-            <dependency>
-                <groupId>com.alibaba</groupId>
-                <artifactId>druid</artifactId>
-                <version>1.0.26</version>
-            </dependency>
-
-            <dependency>
-                <groupId>org.hswebframework.web</groupId>
-                <artifactId>hsweb-spring-boot-starter</artifactId>
-                <version>${hsweb.framework.version}</version>
-            </dependency>
-
-        </dependencies>
-
-    </dependencyManagement>
-    <!--pom里引入私服,无需再到 settings.xml中配置-->
-    <repositories>
-        <repository>
-            <id>hsweb-nexus</id>
-            <name>Nexus Release Repository</name>
-            <url>http://nexus.hsweb.me/content/groups/public/</url>
-            <snapshots>
-                <enabled>true</enabled>
-                 <updatePolicy>always</updatePolicy>
-            </snapshots>
-        </repository>
-        <repository>
-            <id>aliyun-nexus</id>
-            <name>aliyun</name>
-            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
-        </repository>
-    </repositories>
-
-    <pluginRepositories>
-        <pluginRepository>
-            <id>aliyun-nexus</id>
-            <name>aliyun</name>
-            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
-        </pluginRepository>
-    </pluginRepositories>
-    
-</project>
-```
-
-2. 在`resources`中创建`application.yml`配置
-![application.yml](./img/create-application-yml.gif "application.yml")
-
-
-```yaml
-server:
-  port: 8080
-
-spring:
-  aop:
-      auto: true
-  datasource:
-     type: com.alibaba.druid.pool.DruidDataSource
-     driver-class-name : com.mysql.jdbc.Driver
-     url : jdbc:mysql://localhost:3306/myproject?useSSL=false&useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false
-     username : root
-     password : root
-
-hsweb:
-  app:
-    name: my-project
-    version: 1.0.0
-
-logging:
-  level:
-     org.hswebframework.web: DEBUG
-     org.hswebframework.web.cache: WARN
-     org.apache.ibatis: DEBUG
-     org.mybatis: DEBUG
-```
-
-3. 创建启动类
-![MyProjectApplication.java](./img/create-application-java.gif "MyProjectApplication.java")
-
-```java
-package com.mycompany;
-
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-
-/**
- * @author zhouhao
- * @since 1.0
- */
-@SpringBootApplication
-public class MyProjectApplication {
-
-    public static void main(String[] args) {
-        SpringApplication.run(MyProjectApplication.class,args);
-    }
-}
-```
-
-4. 创建数据库
-```sql
-    CREATE DATABASE IF NOT EXISTS myproject default charset utf8 COLLATE utf8_general_ci; 
-```
-
-5. 执行`MyProjectApplication.main`启动应用
-![MyProjectApplication.java](./img/start-application.gif "MyProjectApplication.java")
-
-打开浏览器访问 http://localhost:8080. 提示`Whitelabel Error Page`则说明服务启动成功.
-因为现在还没有任何功能,所有提示错误信息.
-
-到此,项目建立完成,和普通的spring-boot项目没有区别.
-
-
-## 增删改查
-
-使用通用CURD,添加一个增删改查功能:
- 
-在`pom.xml`中引入模块:
-```xml
-<!--通用CRUD-->
-<dependency>
-    <groupId>org.hswebframework.web</groupId>
-    <artifactId>hsweb-commons-dao-mybatis</artifactId>
-    <version>${hsweb.framework.version}</version>
-</dependency>
-<dependency>
-    <groupId>org.hswebframework.web</groupId>
-    <artifactId>hsweb-commons-service-simple</artifactId>
-    <version>${hsweb.framework.version}</version>
-</dependency>
-<dependency>
-    <groupId>org.hswebframework.web</groupId>
-    <artifactId>hsweb-commons-controller</artifactId>
-    <version>${hsweb.framework.version}</version>
-</dependency>
-```
-
-![引入curd依赖](./img/import-commons-module.gif "引入curd依赖")
-
-
-
-1. 创建数据库表:
-
-```sql
-    create table tb_test(
-        id varchar(32) primary key,
-        name varchar(32) not null,
-        status tinyint,
-        comment text
-    )
-```
-
-2. 创建实体类 `com.mycompany.entity.TestEntity`
-
-实体类可通过继承:`org.hswebframework.web.commons.entity.SimpleGenericEntity<主键类型>`.来使用通用的crud功能.
-
-```java
-@Getter
-@Setter
-public class TestEntity extends SimpleGenericEntity<String> {
-    private String name;
-
-    private Byte status;
-
-    private String comment;
-}
-
-```
-
-![创建实体](./img/create-entity.gif "创建实体")
-
-3. 创建Dao 
-
-dao接口可通过继承:`org.hswebframework.web.dao.CrudDao<实体类,主键类型>`.来使用通用的crud功能.
-
-创建Dao接口 `com.mycompany.dao.TestDao`
-
-```java
-public interface TestDao extends CrudDao<TestEntity,String> {
-
-}
-```
-![创建Dao](./img/create-dao.gif "创建实体Dao")
-
-
-创建myabtis mapper,在`resources`目录上创建:`com/mycompany/dao/mybatis/TestMapper.xml`,注意: 目录分割使用`/`而不是`.`
-
-```xml
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-        "http://www.mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.mycompany.dao.TestDao">
-    <resultMap id="TestEntityResultMap" type="com.mycompany.entity.TestEntity">
-        <!--必须列出映射关系-->
-        <id property="id" column="id" javaType="String" jdbcType="VARCHAR"/>
-        <result property="name" column="name" javaType="String" jdbcType="VARCHAR"/>
-        <result property="status" column="status" javaType="Byte" jdbcType="TINYINT"/>
-        <result property="comment" column="comment" javaType="String" jdbcType="CLOB"/>
-    </resultMap>
-
-    <!--用于动态生成sql所需的配置-->
-    <sql id="config">
-        <bind name="resultMapId" value="'TestEntityResultMap'"/>
-        <bind name="tableName" value="'tb_test'"/>
-    </sql>
-
-    <insert id="insert" parameterType="com.mycompany.entity.TestEntity" >
-        <include refid="config"/>
-        <include refid="BasicMapper.buildInsertSql"/>
-    </insert>
-
-    <delete id="deleteByPk" parameterType="String">
-        delete from tb_test where id =#{id}
-    </delete>
-
-    <delete id="delete" parameterType="org.hswebframework.web.commons.entity.Entity">
-        <include refid="config"/>
-        <include refid="BasicMapper.buildDeleteSql"/>
-    </delete>
-
-    <update id="update" parameterType="org.hswebframework.web.commons.entity.Entity">
-        <include refid="config"/>
-        <include refid="BasicMapper.buildUpdateSql"/>
-    </update>
-
-    <select id="query" parameterType="org.hswebframework.web.commons.entity.Entity" resultMap="TestEntityResultMap">
-        <include refid="config"/>
-        <include refid="BasicMapper.buildSelectSql"/>
-    </select>
-
-    <select id="count" parameterType="org.hswebframework.web.commons.entity.Entity" resultType="int">
-        <include refid="config"/>
-        <include refid="BasicMapper.buildTotalSql"/>
-    </select>
-</mapper>
-
-```
-![创建Mybatis](./img/create-mybaits-mapper.gif "创建实体Mybatis")
-
-
-
-在`application.yml`中添加配置:
-
-```yaml
-mybatis:
-  mapper-locations: classpath:com/mycompany/dao/mybatis/**/*.xml
-```
-
-在`MyProjectApplication`上添加注解:`@MapperScan(basePackages = "com.mycompany.dao", markerInterface = org.hswebframework.web.dao.Dao.class)`
-
-
-
-4. 创建Service
-
-service接口可通过继承:`org.hswebframework.web.service.CrudService<实体类,主键类型>`.来使用通用的crud功能.
-
-创建接口类: `com.mycompany.service.TestService`
-
-```java
-public interface TestService extends CrudService<TestEntity,String> {
-}
-
-```
-
-实现类可通过继承: ` org.hswebframework.web.service.GenericEntityService<实体类,主键类型>`.来使用通用crud功能.
-
-创建实现类 `com.mycompany.service.impl.TestServiceImpl` 
- 
-```java
-@Service
-public class TestServiceImpl extends GenericEntityService<TestEntity,String>
-        implements TestService {
-
-    @Autowired
-    private TestDao testDao;
-
-    @Override
-    protected IDGenerator<String> getIDGenerator() {
-        return IDGenerator.MD5;
-    }
-
-    @Override
-    public TestDao getDao() {
-        return testDao;
-    }
-}
-```
-
-![创建Service](./img/create-service.gif "创建Serivce")
-
-
-5. 创建Controller
-
-controller 可通过实现接口: `org.hswebframework.web.controller.SimpleGenericEntityController<实体类,主键类型,org.hswebframework.web.commons.entity.param.QueryParamEntity>`
-
-创建controller类: `com.mycompany.controller.TestController`
-
-```java
-
-@RestController
-@RequestMapping("/test")
-public class TestController implements SimpleGenericEntityController<TestEntity, String, QueryParamEntity> {
-
-    @Autowired
-    TestService testService;
-
-    @Override
-    public CrudService<TestEntity, String> getService() {
-        return testService;
-    }
-}
-
-```
-
-6. 测试
-
-方式一:编写单元测试
-
-在src/test/groovy目录下创建`com.mycompany.TestApplication.java`和`com.mycompany.controller.TestControllerTest.groovy`
-
-```java
-@SpringBootApplication
-@WebAppConfiguration
-public class TestApplication {
-
-}
-```
-
-```groovy
-@WebAppConfiguration
-@ContextConfiguration
-@SpringBootTest(classes = [TestApplication.class], properties = ["classpath:application.yml"])
-class TestControllerTest extends Specification {
-    @Autowired
-    private ConfigurableApplicationContext context;
-
-    @Shared
-    private MockMvc mockMvc;
-
-    void setup() {
-        mockMvc = MockMvcBuilders.webAppContextSetup(context).build();
-    }
-
-    def "Test Create Data"() {
-        setup:
-        def testData = """
-            {"name":"测试数据","status":1,"comment":"说明"}
-            """
-        and:
-        mockMvc.perform(
-                post("/test")
-                        .contentType(MediaType.APPLICATION_JSON)
-                        .content(testData)
-        ).andExpect(status().is(201))
-
-    }
-}
-```
-执行单元测试,通过则说明新增功能测试通过.
-
-方式二: `postman` 或者idea的`Test Restful Web Servcice`,以Idea工具为例:
-
-执行启动类:`com.mycompany.MyProjectApplication`启动服务,然后调用`/test`服务
-
-![测试](./img/idea-test.gif "测试")
-
-一个最简单的通用crud例子完成了!! 
-
-## 获取例子的完整源代码
-[myproject](https://github.com/hs-web/hsweb-examples/tree/master/myproject)
-
-## 更多教程
-
-[通用增删改查使用](USE-CRUD.md) ,[拓展系统自带功能的字段](CUSTOM-PROP.md) [权限控制](AUTZ.md) ,[业务功能](SYSTEM.md) , [实用工具包](UTILS.md)
-
-[常见问题及解决方式](https://github.com/hs-web/hsweb-framework/issues/97)
-
- 
-

+ 0 - 98
quick-start/USE-CRUD.md

@@ -1,98 +0,0 @@
-# 通用CRUD使用手册
-
-hsweb提供了通用增删改查功能,并实现使用mybatis和easyorm实现了动态条件,支持dsl方式构造查询条件,
-前端可直接传递动态参数到后端,实现灵活的条件查询,并且全部条件使用预编译,不存在sql注入问题.
-
-
-## 使用
-在[入门教程](README.md#增删改查)中已经创建好了一个增删改查的功能.
-
-1. 通用Dao
-
-通用Dao实现了动态增删改查,是整个通用增删改查的基础,现阶段只提供了Mybatis实现,为了灵活性,Mybatis仍然使用xml配置方式.
-[查看完整的Dao说明](../hsweb-commons/hsweb-commons-dao)
-
-2. 通用Service
-通用Service提供了基于通用Dao的Service功能,对常用的方法进行了封装,并且提供了dsl方式的删改查方法.
-
-继承了`GenericEntityService`接口即可使用.
-
-```java
-   public List<TestEntity> queryByNameAndStatus(String name,byte status){
-        // 等同于 where name =? and status =?
-        return createQuery()
-                .where("name",name)
-                .and("status",status)
-                .listNoPaging();
-   }
-```
-
-更多用法:
-```java
-    /*  查询  */
-    //where name=? or name = ?
-    createQuery()
-        .where("name",name1).or("name",name2)
-        .listNoPaging();
-
-    //where name like ? limit 0,10
-    createQuery().where().like("name",?).list(0,10);
-    
-    //where name like ? and (age<? or age>?)
-    createQuery().where()
-            .like("name",name)
-            .nest()
-                .lt("age",ageLt).or().gt("age",ageGt)
-            .end()
-            .list(); //默认等同于list(0,20)
-  
-    //where name=? or name=?
-    createQuery().where()
-            .sql("name=?",name)
-            .or()
-            .sql("name=#{name}",paramObject)
-            .single();//limit 0,1
-            
-   // where status in(1,2,3) and ( name like ? or name like ? or name like ?)
-    createQuery()
-            .when(status==1,query->query.in("status",1,2,3))
-            .nest()
-            .each("name",nameList,query->query.or()::$like$)
-            .end()
-            .list();
-    
-   /* 修改 条件支持与查询一致*/
-   //set status=? where id = ?
-   //注意最后的exec()方法.
-   createUpdate().set("status",1).where("id",id).exec();
-   //修改实体类中不为null的属性
-   createUpdate(entity).where("id",id).exec();
-      
-   /* 删除 条件支持与查询一致*/
-   //注意最后的exec()方法.
-   createDelete().where("id",id).exec();
-```
-
-如果想调用其他dao进行dsl操作,可使用`DefaultDSLQueryService.createQuery(dao)`
-,`DefaultDSLUpdateService.createUpdate(dap)`
-,`DefaultDSLDeleteService.createDelete(dao)` 进行操作
-
-
-默认支持的条件类型方法:is(eq),not,in,notIn,isNull,notNull,like,notLike,lt,gte,lte,等等.
-
-还可以[自定义的通用的查询条件](../hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/README.md#拓展动态条件): 
-
-以在组织架构模块[中自定义的查询条件](../hsweb-system/hsweb-system-organizational/README.md#SQL条件)为例:
-
-```java
-//user-in-org为自定义的查询条件类型
-//userId字段为指定机构中的用户的数据
-createQuery()
-    .where("userId","user-in-org",orgId)
-    .list();
-```
-这样就无需在需要用到相关查询的地方重复的编写mybatis mapper xml.
-
-3. 通用Controller
-
-参照[这里](../hsweb-commons/hsweb-commons-controller/README.md)

+ 0 - 18
quick-start/UTILS.md

@@ -1,18 +0,0 @@
-# 实用工具包
-
-hsweb提供了一些实用的工具类
-
-1. 实体类属性拷贝
-
-```java
-//拷贝source的属性到target
-FastBeanCopier.copy(source,target);
-//id和createTime属性不拷贝
-FastBeanCopier.copy(source,target,"id","createTime");
-//只拷贝name和age属性
-FastBeanCopier.copy(source,target,FastBeanCopier.include("name","age"));
-
-```
-
-2. 枚举数据字典,[点击查看](../hsweb-core/README.md#数据字典])
-

BIN
quick-start/img/create-application-java.gif


BIN
quick-start/img/create-application-yml.gif


BIN
quick-start/img/create-controller.gif


BIN
quick-start/img/create-dao.gif


BIN
quick-start/img/create-entity.gif


BIN
quick-start/img/create-mybatis-mapper.gif


BIN
quick-start/img/create-project.gif


BIN
quick-start/img/create-service.gif


BIN
quick-start/img/idea-test.gif


BIN
quick-start/img/import-authorization-module.gif


BIN
quick-start/img/import-commons-module.gif


BIN
quick-start/img/start-application.gif


BIN
quick-start/img/test-auth.gif