AnylineService

最后更新:2024-08-27 17:26:58 | 状态:未完成

AnylineService用来完成大部分的数据库操作(包括关系型与非关系型),各种场景中如何使用AnylineService:
注意数据库操作中只有查询分区分一行还是多行,多行方法一般会带一个s后缀,返回的是一个集合,但SQL不限制是是否能返回多行,查询单行时如果有多行符合条件,只返回第一行,不会抛出异常
插入或更新时提供对象或集合都是用同样的方法

  1. 通常情况下WEB项目的BaseController可以继承AnylineController,
    AnylineController已经注入的AnylineService可以直接调用
    比较简单的业务就不需要单独创建一个service了
  2. 在其他位置也可以根据需要随时注入
    @Autowired
    @Qualifier("anyline.service")
    protected AnylineService service;
    注意在多数据源环境中,除主数据源外其他数据源相关的实例会在spring上下文加载完成后,才加载,
    所以如果需要@Lazy方式注入
  3. 项目的Service可以继承AnylineService
    如果有比较复杂的业务或需要事务控制的话需要单独的service
  4. 如果连注入都想省了,可以调用ServiceProxy中的静态方法
    参数与AnylineService一致,如:
    ServiceProxy.querys("CRM_USER")
  5. 在多数据源的情况下,推荐通过ServiceProxy获取相应的service
    AnylineService crmService = ServiceProxy.service("crm")
    参考【三种方式切换数据源


AnylineService提供了以下几种操作数据库的方式

  • service.metadata 

    可以用来查询数据库结构,包括表(主表、子表)、列、标签、索引、约束,如

    service.metadata().tables(); //查询当前数据库中所有的表

    service.metadata().ptables("crm_user") //查询指定表的所有子表

    service.metadata().columns("crm_user") //查询指定表中的所有列
    源码】【示例

  • service.ddl 

    可以用来创建删除修改 表、列、所引等, 如

    service.ddl.create(new Table())    ;//创建表

    service.ddl.alter(new Column())   ;//修改列属性

    详细参数请参考源码或示例

    源码】【示例

  • service.authorize
     授权相关
    service.authorize().users(); //查询用户
    service.authorize().create(new User()); //创建用户
    service.authorize().create(new Role()); //创建角色
    service.authorize().grant(new User(), new Role());//用户设置角色

  • service.dml

    这是项目中最常用的操作,用来操作数据(insert/update/query/delete/save),其中save就是根据主值来决定insert还是update相当于upsert
    因为是最常用的操作所以在调用不需要dml前缀,而是通过service直接调用,如:
    DataSet set = service.querys("CRM_USER");

    其中的查询部分也提供了以下几种方式

    • query/querys
      这是dml中最操作的方法,会返回DataRow/DataSet

    • cache/caches
      与query/querys类似,不同的是需要多提供一个缓存key的参数,service将根据情况决定查询数据库还是缓存

    • select/selects
      用来实现对实体类的操作, 会返回Entity/EntitySet,在调用时需要提供实体类的class,如:
      EntitySet<User> users = service.querys(User.class);

    • get/gets
      与select类似,也会返回Entity/EntitySet,但并不需要提供class,而是根据AnylineService<E>构造时的泛型来确定返回类型

    • map/maps
      在通过情况下querys可以完成大部分操作,但如果遇到数据量特别大的情况下,querys返回DataSet时会比较慢,因为DataSet需要处理各种情况,如大小定忽略,大小驼峰忽略,正则,模拟SQL等
      这时需要用到maps返回List<Map>结果,因为这个过程中只是创建了Map/List并没有对数据处理,所以速度会比较快

    源码】【示例

相关分类
首页 最近更新 搜索 提交 回复