当前位置: 首页 > article >正文

【无标题】测试

bean-searcher 是一款比 MyBatis 效率快 100 倍的条件检索引擎,专注高级查询的只读 ORM,天生支持联表,免 DTO/VO 转换,使一行代码实现复杂列表检索成为可能!开源协议使用Apache-2.0开源协议界面展示图片你的产品给你画了以上一张图,还附带了一些要求:检索结果分页展示可以按任意字段排序按检索条件统计某些字段值这时候,后台接口该怎么写???使用 Mybatis 或 Hibernate 写 100 行代码是不是还打不住?而使用 Bean Searcher,只需 一行代码 便可实现上述要求!!!功能概述特性支持 实体多表映射支持 动态字段运算符支持 分组聚合 查询支持 Select | Where | From 子查询支持 实体类嵌入参数支持 字段转换器支持 Sql 拦截器支持 数据库 Dialect 扩展支持 多数据源 与 动态数据源支持 注解缺省 与 自定义支持 字段运算符 扩展等等快速开发使用 Bean Searcher 可以极大节省后端的复杂列表检索接口的开发时间集成简单可以和任意 Java Web 框架集成,如:SpringBoot、Grails、Jfinal 等扩展性强面向接口设计,用户可自定义扩展 Bean Searcher 中的任何组件支持 注解缺省约定优于配置,可省略注解,可复用原有域类,同时支持自定义注解支持 多数据源分库分表?在这里特别简单,告别分库分表带来的代码熵值增高问题支持 Select 指定字段同一个实体类,可指定只 Select 其中的某些字段,或排除某些字段支持 参数过滤器支持添加多个参数过滤器,可自定义参数过滤规则支持 字段转换器支持添加多个字段转换器,可自定义数据库字段到实体类字段的转换规则支持 SQL 拦截器支持添加多个 SQL 拦截器,可自定义 SQL 生成规则技术选型框架目的只一行代码实现:多表联查分页搜索任意字段组合过滤任意字段排序多字段统计架构图图片为什么用这绝不是一个重复的轮子虽然 增删改 是 hibernate 和 mybatis、data-jdbc 等等 ORM 的强项,但查询,特别是有 多条件、联表、分页、排序 的复杂的列表查询,却一直是它们的弱项。传统的 ORM 很难用较少的代码实现一个复杂的列表检索,但 Bean Searcher 却在这方面下足了功夫,这些复杂的查询,几乎只用一行代码便可以解决。例如,这样的一个典型的需求:图片后端需要写一个检索接口,而如果用传统的 ORM 来写,代码之复杂是可以想象的。而 Bean Searcher 却可以:只一行代码实现以上功能首先,你有一个实体类:@SearchBean(tables=“user u, role r”, joinCond=“u.role_id = r.id”, autoMapTo=“u”)
public class User {
  private long id;
  private String username;
  private int status;
  private int age;
  private String gender;
  private Date joinDate;
  private int roleId;
  @DbField(“r.name”)
  private String roleName;
  // Getters and setters…
}
然后你就可以用一行代码实现这个用户检索接口:@RestController
@RequestMapping(“/user”)
public class UserController {

@Autowired
    private BeanSearcher beanSearcher; // 注入 BeanSearcher 的检索器

@GetMapping(“/index”)
    public SearchResult index(HttpServletRequest request) {
        // 这里只写一行代码
        return beanSearcher.search(User.class, MapUtils.flat(request.getParameterMap()), new String[]{ “age” });
    }
  
}
这一行代码实现了以下功能:多表联查分页搜索组合过滤任意字段排序字段统计例如,该接口支持如下请求:GET: /user/index无参请求(默认分页):{
  “dataList”: [
    {
      “id”: 1,
      “username”: “Jack”,
      “status”: 1,
      “level”: 1,
      “age”: 25,
      “gender”: “Male”,
      “joinDate”: “2021-10-01”
    },
    …     // 默认返回 15 条数据
  ],
  “totalCount”: 100,
  “summaries”: [
    2500    // age 字段统计
  ]
}
GET: /user/index? page=1 & size=10指定分页参数GET: /user/index? status=1返回 status = 1 的用户GET: /user/index? name=Jac & name-op=sw返回 name 已 Jac 开头的用户GET: /user/index? name=Jack & name-ic=true返回 name = Jack(忽略大小写)的用户GET: /user/index? sort=age & order=desc按字段 age 降序查询GET: /user/index? onlySelect=username,age只检索 username 与 age 两个字段:{
  “dataList”: [
    {
      “username”: “Jack”,
      “age”: 25
    },
    …
  ],
  “totalCount”: 100,
  “summaries”: [
    2500
  ]
}
GET: /user/index? selectExclude=joinDate检索时排除 joinDate 字段参数构建器Map<String, Object> params = MapUtils.builder()
        .selectExclude(User::getJoinDate) // 排除 joinDate 字段
        .field(User::getStatus, 1) // 过滤:status = 1
        .field(User::getName, “Jack”).ic() // 过滤:name = ‘Jack’ (case ignored)
        .field(User::getAge, 20, 30).op(Opetator.Between) // 过滤:age between 20 and 30
        .orderBy(User::getAge, “asc”) // 排序:年龄,从小到大
        .page(0, 15) // 分页:第 0 页, 每页 15 条
        .build();
List users = beanSearcher.searchList(User.class, params);
快速开发使用 Bean Searcher 可以极大地节省后端的复杂列表检索接口的开发时间!普通的复杂列表查询只需一行代码单表检索可复用原有 Domain,无需定义 SearchBean集成简单可以和任意 Java Web 框架集成,如:SpringBoot、Spring MVC、Grails、Jfinal 等等。Spring Boot 项目,添加依赖即集成完毕:implementation ‘com.ejlchina:bean-searcher-boot-stater:3.6.0’
接着便可在 Controller 或 Service 里注入检索器:/**
 * 注入 Map 检索器,它检索出来的数据以 Map 对象呈现
 */
@Autowired
private MapSearcher mapSearcher;

/**
 * 注入 Bean 检索器,它检索出来的数据以 泛型 对象呈现
 */
@Autowired
private BeanSearcher beanSearcher;
其它框架,使用如下依赖:implementation ‘com.ejlchina:bean-searcher:3.6.0’
然后可以使用 SearcherBuilder 构建一个检索器:DataSource dataSource = … // 拿到应用的数据源

// DefaultSqlExecutor 也支持多数据源
SqlExecutor sqlExecutor = new DefaultSqlExecutor(dataSource);

// 构建 Map 检索器
MapSearcher mapSearcher = SearcherBuilder.mapSearcher()
        .sqlExecutor(sqlExecutor)
        .build();

// 构建 Bean 检索器
BeanSearcher beanSearcher = SearcherBuilder.beanSearcher()
        .sqlExecutor(sqlExecutor)
        .build();
扩展性强面向接口设计,用户可自定义扩展 Bean Searcher 中的任何组件!比如你可以:自定义 FieldOp 来支持更多的字段运算符自定义 FieldConvertor 来支持任意的 特殊字段类型自定义 DbMapping 来实现自定义注解,或让 Bean Searcher 识别其它 ORM 的注解自定义 ParamResolver 来支持其它形式的检索参数自定义 Dialect 来支持更多的数据库等等…


http://www.kler.cn/news/363200.html

相关文章:

  • docker harbor
  • class 9: vue.js 3 组件化基础(2)父子组件间通信
  • docker sameersbn/bind dns服务器
  • AnaTraf | 网络流量分析仪:网络故障排除的利器
  • 漏洞挖掘 | 通过域混淆绕过实现账户接管
  • 长短期记忆网络(Long Short-Term Memory,LSTM)
  • ubuntu启用ssh
  • Codeforces Round 980 (Div. 2) A-C 题解
  • C语言编译过程
  • 【CVPR2025】3 投稿指南和论文模版
  • 大数据查询引擎之Tez
  • MySQL的主从复制配置
  • SpringCloud无介绍快使用,sentinel服务熔断功能与持久化(二十四)
  • 自动创作PPT 利用提示词和大模型自动创建ppt
  • Java第三周:继承和多态,抽象类和接口
  • 基于SSM消防物资存储系统的设计
  • 实验03分支---7-9 真睡还是装睡
  • 构建后端为etcd的CoreDNS的容器集群(四)、etcd挂载私有自签名证书进行访问测试
  • 探索未来社交新纪元:元宇宙展厅的无限魅力
  • 修改huggingface的缓存目录以及镜像源
  • 代码随想录算法训练营第三十七天|509. 斐波那契数,70. 爬楼梯,746. 使用最小花费爬楼梯
  • C语言中单字符I/O的使用
  • Go的客户端与服务器通信案例
  • 基于PHP+MySQL+Vue的网上订餐系统
  • jmeter是怎么用的,怎么设计接口测试用例的
  • SEO基础:什么是LSI关键词?【百度SEO优化专家】