专注高级查询的只读 ORM,天生支持联表,免 DTO/VO 转换,使一行代码实现复杂列表检索成为可能!
很多系统都有列表检索(如:订单管理,用户管理)这样的需求,而每一个列表页所需展示的数据往往会横跨多张数据库表(比如订单管理页表格里的订单号列来自订单表,用户名列来自用户表),此时我们的后端所建的 域类(或实体类,与数据库表想关联的那个类)与页面所需展示的数据并不能形成一一对应关系。
因此,VO(View Object) 产生了。它介于页面数据与域类之间,页面展示的数据不再需要与后端的域类一一对应,而只需要与 VO 一一对应就可以了,而 VO 也不再需要与数据表做映射,业务代码里拼装就可以了。但此时,后端的逻辑又复杂了一点,因为我们不仅需要解析前端传来的参数,还要处理 域类(或者复杂的 SQL 查询语句)与 VO 之间的转换关系。而 Bean Searcher 认为,VO 不再需要与域类扯上关系,一个 VO 既可以与页面数据一一对应,又可以直接映射到数据库里的多张数据表(域类不同,它只映射到一张表),而这种新的 VO 称为 Search Bean。
在 Search Bean 出现之前,前端传来的检索条件都是需要业务代码解析处理的(因为普通的 VO 无法与数据库直接映射),并且查询结果也需要再做一次 VO 转换。而 Search Bean 出现之后,条件可以用 Search Bean 里的字段和参数直接表达,并且直接映射成数据库的查询语句。
所以,后端检索接口里的代码只需要收集页面的检索参数即可,余下的就全部交给 Bean Searcher 处理了,并且它返回的 SearchBean 就是前端所需的 VO 对象,也不需要再多做转换了。
而这,就是 Bean Searcher 之所以能极大提高研发生产力的原因!
Bean Searcher v3.7.0 更新内容
Features
Bean Searcher
新增 SqlServerDialect 方言实现,支持 SqlServer 2012+
新增 OrLike 运算符,参见:https://github.com/ejlchina/bean-searcher/issues/38
增强 SqlExecutor:新增 SlowListener 接口,可让用户在代码中监听慢 SQL
增强 DefaultDbMapping:新增 underlineCase 属性,可配置自动映射时是否开启 驼峰->下划线
的风格转换增强 Dialect:新增 hasILike( 方法,当忽略大小写查询时,可利用数据库的 ilike 关键字提升查询性能
增强 EnumFieldConvertor:支持 整型 转换为枚举(按枚举序号转换)
增强 EnumFieldConvertor:新增 failOnError 属性,可配置在遇到非法值无法转换时是否报错,默认 true
增强 EnumFieldConvertor:新增 ignoreCase 属性,可配置字符串值匹配枚举时是否忽略大小写,默认 false
优化 SQL 日志:普通 SQL 显示执行耗时,慢 SQL 日志级别调整为 WARN 并输出关联的实体类
优化 DefaultSqlExecutor,当执行 count sql 且查询结果为 0 时,则不再执行 list sql
优化 参数构建器 的 page(.. 与 limit(.. 方法,它们起始页码也受页码配置约束(破坏性更新)
优化 Dialect:为 toUpperCase(.. 添加默认实现,用户自定义方言时,只有一个 forPaginate(..
方法必须实现优化 DefaultParamResolver:默认使用 page 分页参数提取器
优化 检索器 的 count 与 sum 检索,当无记录统计时,返回 0 而非 null, 并再次优化检索性能
重构 FetchType#ALL 重命名为 FetchType#DEFAULT
Bean Searcher Boot Starter
新增 bean-searcher.sql.slow-sql-threshold 配置键,可配置慢 SQL 阈值(单位毫秒),默认为 500
新增 bean-searcher.sql.default-mapping.underline-case 配置键,可配置自动映射时是否开始 驼峰 -> 下划线 的风格转换,默认为 true
新增 bean-searcher.field-convertor.enum-fail-on-error 配置键,可配置在遇到非法值无法转换时是否报错,默认 true
新增 bean-searcher.field-convertor.enum-ignore-case 配置键,可配置字符串值匹配枚举时是否忽略大小写,默认 false
支持 用户配置一个 SqlExecutor.SlowListener 的 Spring Bean 来监听慢 SQL
支持 用户配置 bean-searcher.sql.dialect 为 SqlServer 来使用 Sql Server 方言
升级 spring-boot -> v2.6.8