文档 首页

AnylineService

发布日期:2019-06-18
最后更新:2025-07-02 22:45:23
阅读:33,655

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并没有对数据处理,所以速度会比较快

    源码】【示例

数据库操作 · 2023-11-03

关于跨库操作与数据源自动复制

数据库操作 · 2023-10-31

JDBC操作clickhouse示例

数据库操作 · 2023-10-26

根据SQL获取元数据信息

数据库操作 · 2023-10-20

关于Orcle的MERGE INTO 如果存在重复数据 覆盖或忽略

数据库操作 · 2023-10-16

关于分页参数

数据库操作 · 2023-10-16

MySQL LIMIT OFFSET不支持表达式的问题

数据库操作 · 2023-10-12

关于PostgreSQL的ON CONFLICT,如果存在重复数据 覆盖或忽略

数据库操作 · 2023-10-02

mysql表结构导入postgres

数据库操作 · 2023-09-19

关于MySQL的insert ignore into和replace into

数据库操作 · 2023-09-02

insert/update过程中列的控制

分页 · 2023-08-15

ConfigStore分页相关的参数

常用示例 · 2023-11-27

获取列信息的几种方式

常用示例 · 2023-10-24

异构数据源迁移核心部分代码Mysql到Apache Ignite|VoltDB

常用示例 · 2023-08-09

自定义是查询条件

常见问题 · 2023-09-25

druid连接SQL Server异常

常见问题 · 2023-09-17

不具备更新条件

常见问题 · 2024-07-24

关于分页(不)查询总行数

实战对比 · 2023-07-16

先准备基础环境

实战对比 · 2023-07-12

从最简单的查询开始

实战对比 · 2023-07-15

查询部分列(属性)

实战对比 · 2023-07-16

根据情况生成不同的查询条件(FIND_IN_SET)

实战对比 · 2023-07-16

不提供参数值的两种特殊情况

实战对比 · 2023-07-17

为所有的查询sql统一添加查询条件

实战对比 · 2023-07-18

查询条件默认值

实战对比 · 2023-07-18

分页查询

实战对比 · 2023-07-20

查询排序

DriverAdapter · 2023-12-19

关于默认的jdbc adapter

性能与稳定 · 2023-08-24

流式查询

重要的更新 · 2023-10-21

关于ands

常见问题 · 2022-12-15

关于默认主键

update · 2023-02-04

service.update(DataRow)只更新值有变化的列

DataRow · 2023-08-05

getColumns与getMetadatas区别

EntitySet · 2023-05-16

Entity中的集合(数组)属性保存到数据库中

Entity · 2023-08-04

Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'

Entity · 2023-08-04

属性关联表主键生成器注解

数据集操作 · 2023-10-21

upsert(已存在则更新或跳过,中不存在则插入)

数据集操作 · 2023-10-16

关于Apache ignite的MERGE 如果存在重复数据 覆盖或忽略

数据集操作 · 2023-10-10

insert/update Map时大小写的问题

元数据 · 2024-07-28

关于元数据(表结构、索引等)缓存

query/querys · 2023-04-19

sequence

delete · 2023-03-06

删除数据的几种场景

insert · 2023-02-25

插入数据后返回主键值

AnylineService · 2025-06-27

数据脱敏

AnylineService · 2025-05-30

查询、更新、插入时 自动屏蔽不存在的字段

AnylineService · 2024-03-29

设置SQL执行的超时时间

AnylineService · 2023-09-14

如果主键不统一怎么办

AnylineService · 2023-09-07

关于查询结果集单行与多行的问题

AnylineService · 2023-08-16

简易方式指定数据源和主键

AnylineService · 2023-07-17

多数据源场景中service注入失败

service.dml · 2023-06-25

查询条件中空值的处理方式

insert · 2023-08-23

插入数组

insert · 2024-07-23

插入记录时自动建表

query/querys · 2023-06-28

关于几个 空值 的查询示例

query/querys · 2023-06-28

查询返回指定列

query/querys · 2024-01-11

根据所有String类型模糊查询

service.metadata · 2024-02-01

遇到anyline没解析或极特殊类型怎么处理

service.metadata · 2023-07-29

获取表或视图的DDL

service.metadata · 2023-04-19

查询表上的索引

service.ddl · 2023-12-21

关于列的排序

service.ddl · 2023-08-07

DDL保存表结构时,删除列和添加列

ConfigStore · 2023-09-13

多个ConfigStore合成一个ConfigStore

ConfigStore · 2023-09-21

复杂条件的合成

查询条件 · 2023-10-23

关于函数操作

condition() · 2023-06-16

condition参数与query参数的混淆

condition() · 2023-02-03

OR查询条件

condition() · 2023-07-26

关于数组参数值

自定义SQL · 2022-11-12

关于自定义SQL中的变量赋值

自定义SQL · 2022-11-12

XML中自定义复杂SQL

事务控制 · 2023-07-27

多数据源事务管理器bean.name

数据类型 · 2023-08-29

插入数组类型

非关系型数据库 · 2024-03-28

插入或修改数据时如何判断插入边还是点

Neo4j · 2023-08-27

Neo4j基础操作

MongoDB · 2023-08-27

MongoDB基础操作

数据库操作 · 2019-06-13

AnylineService

AnylineService · 2020-01-13

为什么有时update sql不执行

AnylineService · 2020-01-13

需要清空内容的列没有更新

condition() · 2019-12-27

关于必须条件

condition() · 2020-02-25

关于IN条件

condition() · 2019-12-27

关于默认值

condition() · 2020-03-26

关于or

condition() · 2019-12-27

关于like

AnylineService · 2020-03-26

save与insert区别

AnylineService · 2020-11-25

查询时设置主键

AnylineService · 2021-12-28

前端未提交数据情况下清空一列值

常见问题 · 2022-02-12

AnylineService注入失败

condition() · 2022-02-15

关于几种OR条件查询的情况

condition() · 2022-07-31

IN条件下多种参数格式的接收

分页 · 2022-08-24

关于分页参数

数据类型 · 2022-08-31

关于自动检测表结构

AnylineService · 2022-09-02

关于更新部分属性(列)、忽略部分属性(列)

常见问题 · 2022-09-22

关于insert或update时确定哪些列参与到insert或update中

DataRow · 2023-07-05

查询数据库返回的数据字段全是大写,字段怎么设置返回小写

condition() · 2023-06-28

几个分页查询的示例

自定义SQL · 2022-11-12

SQL中的变量及占位符格式

Listener/Interceptor · 2023-06-22

统一添加查询条件