功能号/接口配置说明

功能号接口配置在functions文件夹中,默认搜索当前文件夹下所有的子目录中的xml文件

[warning] 功能说明:

  1. 通过配置功能号暴露接口服务,外部接口可以调用
  2. 通过配置验证参数信息(包含非空验证、长度验证、格式验证等)
  3. 通过配置获取系统变量信息
  4. 通过配置设置参数绝对值或默认值
  5. 通过配置设置参数转换类型(例如:前端传入String格式日期参数,转换为日期对象)
  6. 可以对接口进行限流控制
  7. 可以在新增或修改前进行数据验证,重复数据错误提示
  8. 接口转发
  9. 复杂查询(模糊查询,区间查询等)
  10. 分布式锁(rediszookeeper
function
├── id -- 功能号
├── type -- 调用类型 s:执行service,m:执行mapper,f:执行接口转发
├── version -- 版本号
├── isPage -- 是否启用分页 1:是,(只有type为m时有效)
├── isLock -- 是否启用分布式锁 1:是,(默认0))
├── lockType -- 分布式锁类型,redis或zookeeper,默认redis
├── lockKey -- 分布式锁资源key
├── lockTimeout -- 分布式锁超时时间,默认不限,单位秒
├── idField -- id字段,配置后,新增接口返回id(只有type为m时有效),3.4.1新增
├── qps -- 限流(每秒qps最大数量)
├── resource -- 资源信息(实现类)
├── description -- 功能号描述
├── params -- 参数处理集合
|    ├── param -- 某个参数处理
|    |      ├── id -- 参数属性
|    |      ├── name -- 参数中文名称
|    |      ├── required -- 是否非空验证 1:验证,建议使用此项验证非空,2.3.0新增
|    |      ├── verifyType -- 验证类型
|    |      ├── verifyCustom -- 验证自定义值,3.7.2新增
|    |      ├── convertType -- 转换类型
|    |      ├── maxLength -- 最大长度限制
|    |      ├── minLength -- 最小长度限制
|    |      ├── value -- 参数赋值
|    |      ├── defaultValue -- 参数默认值,当前端值为空,获取默认值
|    |      ├── emptyMsg -- 自定义为空提示
|    |      ├── verifyMsg -- 定义格式验证错误提示
|    |      ├── maxValue -- 最大值
|    |      ├── minValue -- 最小值
|    |      ├── operateType -- 操作类型(通用mapper。selectByExample 方法使用),3.3.0新增
|    |      ├── orderSort -- 排序方式(通用mapper。selectByExample 方法使用),3.3.0新增
|    |      ├── dbField -- 数据库对应的字段(通用mapper。selectByExample 方法使用),3.3.0新增
|    |      ├── dateRangeSeparator -- 日期区间分隔符,默认` - `,2.3.1新增
|    |      ├── dateFormat -- 日期格式化,日期默认`yyyy-MM-dd`,日期时间默认`yyyy-MM-dd HH:mm:ss` ,2.3.1新增
|    |      ├── description -- 参数描述
├── checks -- 检查资源信息(一般在新增前验证数据库中是否存储)
|    ├── check -- 某个检查资源
|    |      ├── type -- 调用类型 s:执行service,m:执行mapper,默认m
|    |      ├── isEmpty -- 是否为空
|    |      ├── primaryKey -- 主键id
|    |      ├── msg -- 提示信息
|    |      ├── resource -- 资源信息

配置提示和验证

功能号配置文件新增了xml标签提示支持,可以通过定义DOCTYPE实现<!DOCTYPE functions PUBLIC "-//wueasy.com//DTD wueasy 1.0 Transitional//EN" "https://www.wueasy.com/dtd/wueasy.dtd">

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE functions PUBLIC "-//wueasy.com//DTD wueasy 1.0 Transitional//EN" "https://www.wueasy.com/dtd/wueasy.dtd">
<functions>

</functions>

配置说明

[warning] 调用类型说明:

  1. m:调用mapper接口(使用场景:对于简单的业务,例如:只有普通的增删改查功能,没有什么业务逻辑,可以直接调用Mybatis执行。),接口参数只能有一个DataMap
  2. s:调用service接口(使用场景:对于复杂的业务(简单业务满足不了),可以使用此模式,例如:新增需要判断某个字段在数据库中是否存在,如果存在则弹出提示;或者需要同时操作多个表等。),接口参数只能有一个DataMap
  3. f:转发接口(使用场景:调用当前业务bus的接口,直接转发给另外一个bus接口)

验证类型列表

  1. Date(日期)
  2. DateTime(日期+时间)
  3. Time(时间)
  4. AlphaNumeric(字母数字)
  5. Email(电子邮箱)
  6. Numeric(数字)
  7. NumberFloat(浮点数)
  8. Mobile(手机)
  9. PostalCode(邮编)
  10. URL(url地址)
  11. CardID(身份证)
  12. BankCode(银行卡号)
  13. Custom(自定义验证类型,需要指定验证规则verifyCustom,可以配置正则表达式验证)

系统变量

  • $id():获取唯一主键id
  • $date():获取当前日期对象
  • $dateStr():获取当前日期字符串 yyyy-MM-dd,2.3.1开始支持dateFormat格式化
  • $datetimeStr()获取当前日期字符串,格式为yyyy-MM-dd HH:mm:ss,2.3.1开始支持dateFormat格式化
  • $timestamp():当时时间的毫秒数
  • $uuid():随机生成唯一的UUID
  • $funcNo():获取当前调用的功能号2.2.2开始支持
  • $language():获取语言

  • #id 直接取参数值,#+参数属性

[warning] #系统参数获取,配合前端使用

也可以在代码中使用UserHelper工具进行获取。

  • $userId() 用户id
  • $userName() 用户名称
  • $loginNo() 获取登录名
  • $ip() 获取ip

  • $authData() 数据权限字符串,多个逗号分隔,只有满足数据权限的时候,才能获取到内容

转换类型

目前支持以下几种方式转换

  1. Date(日期) 示例:2019-01-01转换为Data对象
  2. DateTime(日期+时间)示例:2019-01-01 11:11:11转换为Data对象
  3. Long
  4. Double
  5. Integer
  6. Float
  7. BigDecimal
  8. DateToDateTimeStart(把日期转换为当天日期时间的开始时间) 示例:2019-01-01转换为2019-01-01 00:00:00格式的Data对象
  9. DateToDateTimeEnd(把日期转换为当天日期时间的结束时间) 示例:2019-01-01转换为2019-01-01 23:59:59格式的Data对象
  10. DateRangeToDateTimeStart(把日期区间转换为日期时间的开始时间) 示例:2019-01-01 - 2019-01-30转换为2019-01-01 00:00:00格式的Data对象
  11. DateRangeToDateTimeEnd(把日期区间转换为日期时间的结束时间) 示例:2019-01-01 - 2019-01-30转换为2019-01-30 23:59:59格式的Data对象
  12. DateTimeRangeToDateTimeStart(把日期时间区间转换为日期时间的开始时间) 示例:2019-01-01 00:00:00 - 2019-01-30 00:00:00转换为2019-01-01 00:00:00格式的Data对象
  13. DateTimeRangeToDateTimeEnd(把日期时间区间转换为日期时间的结束时间) 示例:2019-01-01 00:00:00 - 2019-01-30 00:00:00转换为2019-01-30 00:00:00格式的Data对象
<function id="S1006" type="m">
    <params>
        <param id="date" name="时间" convertType="DateTime"/>
    </params>
</function>

操作类型

3.3.0开始支持

只能使用在通用mapper接口中的selectByExample方法。为了简化单表查询的复杂条件操作。

  1. EqualTo (匹配相等,默认)
  2. NotEqualTo(不相等)
  3. Like (模糊)
  4. NotLike (非模糊数据)
  5. GreaterThan (大于)
  6. GreaterThanOrEqualTo (大于等于)
  7. LessThan (小于)
  8. LessThanOrEqualTo (小于等于)
  9. In (in)
  10. NotIn (not in )

自定义验证规则

1.3.0开始支持

可以自定义正则验证规则,规则复用,统一修改等。

  1. functions文件夹中新增一个验证文件validate.xml,文件名称可以随意命名。
  2. 新增一个正则表达式的规则,如下代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validates PUBLIC "-//wueasy.com//DTD wueasy 1.0 Transitional//EN" "https://www.wueasy.com/dtd/wueasy.dtd">
<validates>
    <validate name="atype" regex="1" description="测试"/>
</validates>
validate
├── name -- 规则名称,唯一
├── regex -- 正则表达式
├── description -- 描述

功能号中配置

在参数配置中指定verifyType="Custom",然后在verifyCustom指定配置的规则名称name

<param id="name" name="名称" required="1" maxLength="50" verifyType="Custom" verifyCustom="atype"/>

配置demo

调用service接口demo

[warning] resource资源内容为:server名称+方法名,直接调用service接口。

<function id="S1001" type="s">
    <params>
        <param id="loginNo" name="用户名" required="1" verifyType="" maxLength="20" minLength="0" value="" defaultValue=""/>
        <param id="password" name="密码" required="1" verifyType="" maxLength="0" minLength="0"/>
        <param id="ip" name="ip" value="$ip()"/>
    </params>
    <resource>SysUserService.login</resource>
    <description>用户登录</description>
</function>

调用mapper接口demo

[warning] resource资源内容为:Mapper实现类路径+方法名,直接调用mybatis接口。

<function id="S1006" type="m">
    <params>
        <param id="userId" name="userId" required="1"/>
    </params>
    <resource>com.wueasy.admin.mapper.SysUserMapper.findByUserId</resource>
    <description>查询用户详细信息</description>
</function>

调用接口转发接口demo

3.2.1新增

[warning] resource资源内容为:客户端id+接口编号,直接转发接口请求,可以用于不同的功能号服务调用。

客户端id:默认为base,参考bus客户端的配置

<function id="DEMO002" type="f">
    <resource>DEMO002</resource>
    <description>测试</description>
</function>
<function id="DEMO002" type="f">
    <resource>clientId.DEMO002</resource>
    <description>测试</description>
</function>

新增前检测是否存在

名称唯一,新增前,检测名称是否存在,存在则提示。

使用方式:在原有的基础上配置checkschecks里面可以配置多个验证。

属性说明

  • isEmpty:是否为空,默认为1。1是,0否,配置后,当为调用resource后,返回的对象为空或者不为空的时候提示信息。
  • msg:错误提示内容
  • resource:资源信息

如下demo,检测名称存在的时候,提示名称已存在

<function id="D1002" type="m">
    <params>
        <param id="name" name="名称" required="1" maxLength="50"/>
    </params>
    <checks><!-- 检查资源信息 -->
        <check isEmpty="0">
            <msg>名称已存在</msg>
            <resource>com.wueasy.demo.mapper.DemoMapper.selectByName</resource>
        </check>
    </checks>
    <resource>com.wueasy.demo.mapper.DemoMapper.insert</resource>
    <description>新增</description>
</function>

修改前检测是否存在

名称唯一,新增前,检测名称是否存在,存在则提示。

修改和新增类型,只不过修改比较特殊,需要判断主键记录是否相等。

属性说明

  • primaryKey:主键id,需要和实体bean名称一致(判断查询出的数据记录,主键内容和传入的参数是否相等,不相等提示)。
  • msg:错误提示内容
  • resource:资源信息

如下demo,检测名称存在的时候,提示名称已存在

<function id="D1003" type="m">
    <params>
        <param id="id" name="id" required="1"/>
        <param id="name" name="名称" required="1" maxLength="50" />
    </params>
    <checks><!-- 检查资源信息 -->
        <check primaryKey="id">
            <msg>名称已存在</msg>
            <resource>com.wueasy.demo.mapper.DemoMapper.selectByName</resource>
        </check>
    </checks>
    <resource>com.wueasy.demo.mapper.DemoMapper.update</resource>
    <description>修改</description>
</function>

调用service接口检测

对于复杂或者通用的验证,可以定义一个通用的service接口,进行验证处理。

使用方式:在原有的基础上配置checkschecks里面可以配置多个验证。

属性说明

  • type:默认为ms调用service接口,n调用mapper接口
  • resource:资源信息

如下demo,所有的业务逻辑都在service接口中处理,如果判断不满足,直接抛出异常InvokeException即可。

<function id="D1002" type="m">
    <params>
        <param id="name" name="名称" required="1" maxLength="50"/>
    </params>
    <checks><!-- 检查资源信息 -->
        <check type="s">
            <resource>DemoService.check</resource>
        </check>
    </checks>
    <resource>com.wueasy.demo.mapper.DemoMapper.insert</resource>
    <description>新增</description>
</function>
@Override
public void check(DataMap paramMap) {
    // TODO Auto-generated method stub
    throw new InvokeException(-1,"名称已存在");
}

分页查询

如果需要实现分页功能,mapper只需要实现查询全部数据的接口,然后配置isPage="1"即可(框架会自动实现物理分页),此种实现方式只支持调用mapper接口。

<function id="D1001" type="m" isPage="1">
    <resource>com.wueasy.demo.mapper.DemoMapper.query</resource>
    <description>查询分页</description>
</function>

列表查询

直接配置mapper的实现。

<function id="D1001" type="m">
    <resource>com.wueasy.demo.mapper.DemoMapper.query</resource>
    <description>查询分页</description>
</function>

非空验证或格式验证

如果需要对参数进行验证可以通过配置参数来实现。

  • 非空验证:可以通过配置required="1"来验证参数必输,默认会提示[name]不能为空
  • 格式验证:可以通过配置verifyType=""来验证参数格式,系统支持常见的验证;也可以通过配置verifyType="Custom" verifyCustom=""自定义正则表达式验证,也可以支持正则表达式验证。

如下配置,verifyType="Mobile"验证必须是手机号码格式。

<function id="D1006" type="s">
    <params>
        <param id="name" name="名称" required="1"/>
        <param id="mobile" name="手机号码" required="1" verifyType="Mobile"/>
    </params>
    <resource>DemoService.add</resource>
    <description>新增测试</description>
</function>

长度验证

如果需要对参数的长度大小进行验证,可以参考此配置,支持最大/最小长度验证。

  • 最小长度:可以通过配置minLength="5"来验证参数最小长度(字节)
  • 最大长度:可以通过配置maxLength="50"来验证参数最大长度(字节)
<function id="D1006" type="s">
    <params>
        <param id="name" name="名称" required="1" minLength="5" maxLength="50"/>
    </params>
    <resource>DemoService.add</resource>
    <description>新增测试</description>
</function>

转换类型

前端传入的参数都是String类型的,但是在我们数据库中,通常是其他的类型,这种就需要用到此功能,通过此功能可以实现参数转换。

例如:前端传入日期,需要转换为Date类型。

  • 转换类型:可以通过配置convertType来转换类型,支持时间和日期的转换。
<function id="D1006" type="s">
    <params>
        <param id="time" name="日期" convertType="DATETIME" />
    </params>
    <resource>DemoService.add</resource>
    <description>新增测试</description>
</function>

指定值或默认值设置

如果需要在参数中指定某个参数值,或者默认值(为空时默认值),那么可以通过此项配置。

  • 默认值:可以通过配置defaultValue="0"设置当前属性默认值为0
  • 指定值:可以通过配置value="$date()"设置当前属性值为当前系统时间$date()为系统参数,调用接口不管是否传入,都会覆盖参数。
<function id="D1006" type="s">
    <params>
        <param id="type" name="类型" defaultValue="0" />
        <param id="time" name="日期" value="$date()" />
    </params>
    <resource>DemoService.add</resource>
    <description>新增测试</description>
</function>

自定义错误提示内容

当默认提示消息不满足需要时(或者提示不友好),可以通过此规则配置。

  • 自定义为空提示:可以通过配置emptyMsg=""设置参数为空时的提示消息。
  • 自定义格式验证错误提示:可以通过配置verifyMsg=""设置当前参数验证失败后的提示。
<function id="D1006" type="s">
    <params>
        <param id="type" name="类型" defaultValue="0" emptyMsg="" verifyMsg=""/>
    </params>
    <resource>DemoService.add</resource>
    <description>新增测试</description>
</function>

接口限流控制

如果相对某个接口进行限流控制,可以通过此方式进行配置。

例如:某个接口最大每秒处理量为10个,那么只需要配置qps="10"即可。

特殊说明:接口限流是单机的,目前不支持分布式限流。

<function id="D1006" type="s" qps="10">
    <params>
        <param id="type" name="类型"/>
    </params>
    <resource>DemoService.add</resource>
    <description>新增测试</description>
</function>

通用复杂查询

3.3.0版本支持,为了解决复杂查询操作(模糊查询,区间查询等)

  1. 必须使用通用mapper,继承tk.mybatis.mapper.common.Mapper
  2. 必须使用selectByExample方式,只有此方法才能支持复杂查询
  3. 定义操作类型operateType,如果不配置默认EqualTo匹配查询
  4. 排序方式orderSort,可以指定某些字段排序方式
  5. dbField:指定数据库属性,对应实体bean的属性,为了解决前端传入参数和数据库不匹配的问题
public interface DemoMapper extends tk.mybatis.mapper.common.Mapper<Demo> {
}
<function id="DEMO0013" type="m" >
    <params>
        <param name="名称" id="name" operateType="LIKE"/>
        <param name="名称" id="id" operateType="GREATERTHAN" orderSort="desc"/>
        <param name="名称" id="id2" operateType="LessThan" dbField="id"/>
    </params>
    <resource>com.wueasy.demo.mapper.DemoMapper.selectByExample</resource>
    <description>查询测试</description>
</function>

新增返回主键值

默认新增返回sql执行成功数量,当需要返回主键信息,可以通过以下方式解决。

使用规范:

  • 只有type="m"时有效,也就是调用通过mapper接口
  • 需要指定id字段信息idField="id"
<function id="DEMO10003" type="m" idField="id">
    <params>
        <param id="name" name="名称" required="1" maxLength="50"/>
    </params>
    <resource>com.wueasy.demo.mapper.DemoMapper.insertSelective</resource>
    <description>新增</description>
</function>
Copyright © wueasy.com 2017-2022 all right reserved,powered by Gitbook未经允许,禁止以任何形式传播 修订时间: 2021-12-01

results matching ""

    No results matching ""