设计概览

最后更新:2023-10-18 19:22:18 | 状态:未完成
文档中有错误或没说明白的请到【】里说一下,多谢指正
使用之前先看一下大纲,大概明白AnyLine能提供什么再进行下一步
至少需要掌握AnylineService用来完成大部分的数据库操作;以及DataSet/DataRow用来操作查询结果集,如各种数学计算、数据过渡、格式化等。
  • AnylineService(AnylineService.dml)
    这是最核心的类,可以完成所有的数据库DML操作,使用时一般是这样注入
    @Autowired
    @Qualifier("anyline.service")
    private AnylineService service;
    参考【示例源码

  • AnylineService.ddl
    主要用来创建表(主表/子表)、索引以及修改表结构等
    参考【示例源码

  • AnylineService.metadata
    主要用来查询数据库结构、表(主表/子表)结构、列属性、索引等
    参考【示例源码

  • ServiceProxy
    这是一个静态方法类,提供了AnylineService/ddl/metadata的所有功能, 使用时直接调用静态方法,不需要注入。
    在静态方法中经常会用到,如Spring启动类中可以直接使用ServiceProxy操作数据库,而不需要注入(注意要在SpringApplication启动之后调用,也就是需要spring上下文环境加载完成)
    另外并不是每个人都执着于面向对象、设计模式、MVC等,还有许多人就是想简单明了的操作个数据库而已,那就用ServiceProxy

  • AnylineController
    如果是web项目中,经常会用到AnylineController,主要提供了一键封装查询参数(包括分页)的方法condition(),有了condition封装查询参数就不需要各种判断各种遍历了,更不需要计算分页了
    参考【示例源码

  • PageNavi
    分页查询参数封装在PageNavi中,但编码中一般不需要显示的调用,经常是这样实现分页service.querys("表名",condition(true,"TYPE:type","NM:nm%","DEPT:[dept]"))
    condition由AnylineController提供,true表示需要分页,会根据request中提供的参数值计算分页
    生成SQL:SELECT * FROM 表 WHERE TYPE = ? AND NM LIKE '?%' AND DEPT IN(?,?,?) LIMIT 0,9
    参考【分页

  • ConfigStore
    AnylineController.condition封装的查询参数通过ConfigStore返回,ConfigStore一般也不需要显式调用
    但是在一些非web环境下或者参数不是从request中获取的情况下会用到
    new DefaultConfigStore() 或DefaultConfigStore.init()
    ConfigStore中可以实现更复杂的查询条件
    参考【ConfigStore说明

AnylineService可以返回三种格式的数据
  • DataSet/DataRow
    这是service.querys/query默认返回的数据结构
    其中提供了几乎所有的数据计算函数,如排序、合计、平均值、维度转换、截取、去重、方差、偏差、交集合集差集、分组、忽略大小写对比、行列转换、类SQL过滤筛选(like,eq,in,less,between...)、JSON、XML格式转换等
    DataRow说明】【DataSet说明】这里就不提供示例代码的连接了,有示例的地方就有DataSet/DataRow

  • EntitySet/Entity(自定义的实体类如User)
    如果习惯于实体类操作可以在querys时指定class,如 EntitySet<User> users = service.selects(User.class,参数格式与query一样);
    参考【示例源码】【EntitySet说明

  • List/Map
    在大量数据处理的场景中,经常需要一次性处理几十上百万行数据,这时应该用List<Map> maps = service.maps(),
    因为会DataSet/DataRow在实例化和模拟查询数据时,需要处理大小写忽略、正则表达式、动态属性、模拟SQL、检测数据库字段类型、JSON/XML/BLOB格式化、加密解密、各种类型间的转换兼容等问题会非常耗时
    而maps()只是简单的把数据库中的数据封装到List<Map>中没有任务额外的处理,所以会比较快

关于多数据源切换


最近更新 搜索 提交