一个轻量级的数据库条件检索引擎,专门设计来简化后端查询逻辑的开发,专注高级查询的只读 ORM 工具(附源码)

news2024/11/15 20:52:16

前言

在软件开发过程中,后端开发者经常面临着复杂多变的数据库查询需求。产品经理和项目经理可能会频繁地提出新的查询条件,要求支持各种模糊查询、直接查询,甚至需要在用户界面上提供下拉列表等元素,以增强用户体验。

然而,使用传统的ORM工具和方法来实现这些需求,不仅代码量大,而且难以应对需求的快速变化。

图片

介绍

为了处理这一问题,Bean Searcher应运而生。它是一个轻量级的数据库条件检索引擎,专门设计来简化后端查询逻辑的开发。

图片

一句话囊括:

Bean Searcher —— 用一行代码解锁数据库查询的新境界。

图片

特点
  • 不依赖具体Web框架:可与任何Java Web框架无缝集成。

  • 不依赖具体ORM框架:可独立使用或与现有ORM框架协同工作。

  • 专注高级查询:提供强大的多表关联、动态字段运算符等高级查询功能。

技术架构

Bean Searcher采用简洁的架构设计,通过注解和API的方式,使得复杂的数据库查询变得简单直观。

图片

图片

部署方式

在项目中集成Bean Searcher,只需添加相应的依赖即可。无论是Spring Boot、Grails还是Solon,都可以通过简单的依赖配置快速集成。

Maven依赖
<!-- 对于通用Java Web项目 -->
<dependency>
    <groupId>cn.zhxu</groupId>
    <artifactId>bean-searcher</artifactId>
    <version>4.3.0</version>
</dependency>
Spring Boot集成
<!-- Spring Boot项目 -->
<dependency>
    <groupId>cn.zhxu</groupId>
    <artifactId>bean-searcher-boot-starter</artifactId>
    <version>4.3.0</version>
</dependency>

开源协议

Bean Searcher遵循Apache License 2.0协议,这意味着它完全开源,可以自由地用于商业和非商业项目。

即刻体验一波

使用示例

在业务代码中,通过注入BeanSearcher的检索器,可以轻松实现复杂的查询逻辑:

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private BeanSearcher beanSearcher;

    @GetMapping("/index")
    public SearchResult<User> index(HttpServletRequest request) {
        // 一行代码实现复杂查询
        return beanSearcher.search(User.class, MapUtils.flat(request.getParameterMap()));
    }
}
多表关联示例

Bean Searcher支持多表关联查询,例如内连接:

@SearchBean(tables = "user u, role r", joinCond = "u.role_id = r.id")
public class User {
    @DbField("u.name")
    private String username;

    @DbField("r.name")
    private String roleName;
}
业务场景示例

Bean Searcher的强大功能在多种业务场景中都能得到充分发挥。以下是一些常见的业务场景示例,展示Bean Searcher如何在实际开发中被应用:

用户管理:在用户管理界面,经常需要根据不同的条件(如用户名、邮箱、注册日期等)进行筛选。Bean Searcher可以轻松实现这些动态查询。

@GetMapping("/users")
public SearchResult<User> searchUsers(HttpServletRequest request) {
    // 根据请求参数动态构建查询条件
    return beanSearcher.search(User.class, MapUtils.flat(request.getParameterMap()));
}

订单查询:在电商平台中,订单查询功能需要支持按订单号、用户ID、订单状态等进行搜索。Bean Searcher的多条件查询能力在这里非常有用。

@GetMapping("/orders")
public SearchResult<Order> searchOrders(HttpServletRequest request) {
    // 构建订单查询
    Map<String, Object> params = MapUtils.builder()
        .field(Order::getOrderId, request.getParameter("orderId"))
        .field(Order::getStatus, request.getParameter("status"))
        .build();
    return beanSearcher.search(Order.class, params);
}

库存管理:库存查询可能需要考虑商品ID、库存数量、商品状态等多个维度。Bean Searcher的多维筛选功能可以帮助快速检索库存数据。

@GetMapping("/inventory")
public SearchResult<Inventory> searchInventory(HttpServletRequest request) {
    // 根据商品ID和库存阈值查询库存信息
    Map<String, Object> params = MapUtils.builder()
        .field(Inventory::getProductId, request.getParameter("productId"))
        .field(Inventory::getQuantity, request.getParameter("minQuantity"), null).op(Op.GT)
        .build();
    return beanSearcher.search(Inventory.class, params);
}

财务管理:在财务管理系统中,可能需要根据不同的时间段、金额范围、交易状态等条件查询交易记录。Bean Searcher的排-序和分页功能可以提供高-效的数据检索。

@GetMapping("/transactions")
public SearchResult<Transaction> searchTransactions(HttpServletRequest request) {
    // 根据时间范围和金额查询交易记录
    Map<String, Object> params = MapUtils.builder()
        .range(Transaction::getTransactionDate, request.getParameter("startDate"), request.getParameter("endDate"))
        .field(Transaction::getAmount, request.getParameter("minAmount"), request.getParameter("maxAmount"))
        .orderBy(Transaction::getTransactionDate, "desc")
        .page(0, 10)
        .build();
    return beanSearcher.search(Transaction.class, params);
}

内容管理系统(CMS):在CMS中,编辑和检索文章、博客或新闻等内容时,可能需要按分类、标签、发布日期等进行筛选。Bean Searcher的多表关联查询可以轻松实现这些需求。

@GetMapping("/articles")
public SearchResult<Article> searchArticles(HttpServletRequest request) {
    // 构建文章查询,关联分类和标签信息
    return beanSearcher.search(Article.class, MapUtils.flat(request.getParameterMap()));
}

Bean Searcher支持的业务场景远不止这些。无论是简单的单表查询,还是复杂的多表联合查询,Bean Searcher都能以其简洁的API和强大的功能,帮助开发者快速构建出高-效、灵活的数据库查询接口。通过Bean Searcher,开发者可以更加专注于业务逻辑的实现,而不是查询细节的处理。

结语

Bean Searcher以其简洁的设计和强大的功能,为后端数据库查询提供了一种全新的处理方案。它不仅提高了开发效率,还简化了代码的复杂性。

源码:https://gitee.com/troyzhxu/bean-searcher
文档:https://bs.zhxu.cn/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2057597.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

进阶SpringBoot之 Druid 数据源

Druid 是开源平台上一个数据库连接池实现&#xff0c;具备日志监控功能 Druid 可以很好的监控 DB 连接池和 SQL 的执行情况&#xff0c;天生就是针对监控而生的 DB 连接池 Maven 仓库 pom.xml 文件导入 Durid 的 jar 包 <!-- Druid依赖 --><dependency><grou…

前端视角解决chrome/firefox浏览器访问国家税务局发票查验平台验证码获取提示”网络异常,请稍后再试“解决方法

目录 问题描述问题原因解决办法 问题描述 chrome等浏览器访问国家税务局发票查验平台时获取验证码提示”网络异常&#xff0c;请稍后再试“&#xff0c;安装根证书、信任根证书也无效 问题原因 使用开发者工具查看执行过程&#xff0c;点击获取验证码后ajax请求地方税务局的…

嵌入式AI快速入门课程-K510篇 (一)

嵌入式AI快速入门课程-K510篇 手册属性 属性描述类别嵌入式AI开发文档名嵌入式AI快速入门手册-K510篇当前版本1.0适用型号DongshanPI-Vision编辑百问科技文档编辑团队审核韦东山 更新记录 更新日期更新内容更新版本2023/11/09文档大纲编写完毕V1.0 文章目录 嵌入式AI快速入门课…

如何培养单元测试的习惯?怎样才算一个好的单元测试?

你是怎么编写单元测试的呢&#xff1f;很多人的做法是先把所有的功能代码都写完&#xff0c;然后&#xff0c;再针对写好的代码一点一点地补写测试。 在这种编写测试的做法中&#xff0c;单元测试扮演着非常不受人待见的角色。你的整个功能代码都写完了&#xff0c;再去写测试…

C语言:顺序表的实现和通迅录项目实现

顺序表 1、顺序表的概念及结构 1.1 线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是⼀种在实际中⼴泛使⽤的数据结构&#xff0c;常⻅的线性表&#xff1a;顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构&…

openstack基本操作

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

python语言day9 正则表达式 和 xpath 解析html

正则表达式&#xff1a; 正则表达式的语法&#xff1a; 元字符&#xff1a; \D \d \w \W . [ ] 量词&#xff1a; ? * 惰性匹配&#xff1a; 玩儿(?P<name>.*?)游戏&#xff1a; 匹配到第一个游戏结束&#xff0c;name 匹配的文本。 玩儿(?P<na…

分享cesium的风场开源网站

首先是有在二维地图上的一个风场效果&#xff0c;通过canvas进行的绘制&#xff0c;例如leaflet开源地图上就能够根据数据生成风场的效果图。 最近mapbox里的大神分享了如何在cesium上实现风场的效果&#xff0c;并在github上进行了开源&#xff0c;开源地址: https://github.…

SSL Pining 问题解决方案

实战案例 为了能够更好的复现 SSL Pining 场景&#xff0c;我们对一个 App&#xff08;https:app4.scrape.center&#xff09;进行抓包&#xff0c;这个 App 包含了 SSL Pining 的相关设置&#xff0c;如果我们将手机的代理设置为抓包软件提供的代理服务&#xff0c;那么这个 …

Windows 11上RTX 4090深度学习与大模型微调环境安装指南

【本文原作者&#xff1a;擎创科技资深产品专家 布博士】 在安装深度学习及大模型微调环境时&#xff0c;经历了多次反复操作&#xff08;如CUDA、cuDNN、PyTorch的安装与卸载&#xff09;。为了避免走弯路&#xff0c;总结了以下步骤&#xff1a; 步骤 1&#xff1a;显卡驱动…

【轨物方案】直流电源屏物联网解决方案,让在线监测更简单!

流屏是保证各类变电站、水力、火力发电厂正常、安全运行的电源设备&#xff0c;也是其它使用直流设备用户(如石化、矿山、铁路、医院等)的直流电源&#xff0c;是电力系统的重要组成部分。同时直流屏在变配电中&#xff0c;发挥着很大的作用&#xff0c;它在很大程度上影响着配…

Waymo第六代无人驾驶技术亮相:更少传感器,更高效率

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

【系统分析师】-综合知识-数据库基础

1、给定关系模式 R < U &#xff0c;F >&#xff0c; U {A&#xff0c;B&#xff0c;C&#xff0c;D &#xff0c;E} &#xff0c; F {B→A &#xff0c;D→A &#xff0c;A→E &#xff0c;AC→B }&#xff0c;则 R 的候选关键字为&#xff08;CD&#xff09;&#xff…

76、docker-harbor

一、docker-harbor 私有仓库部署和管理&#xff1a; docker-harbor 私有仓库部署和管理&#xff1a; harbor&#xff1a;开源的企业级的docker仓库软件。 仓库&#xff1a;私有仓库、公有仓库。私有仓库。 docker-harbor&#xff1a;是有图形化的&#xff0c;页面UI展示的一…

1.XV6环境配置

安装虚拟机 这个就不多说了&#xff0c;搞一台Ubuntu虚拟机即可&#xff0c;最好是通过vscode 用ssh远程连接进行实验会比较方便&#xff0c;具体怎么做可参考我这篇博客&#xff1a; VsCode配置SSH连接远程服务器&#xff08;手把手&#xff0c;学不会打我&#xff09;_vsco…

【Hot100】LeetCode—148. 排序链表

目录 1- 思路归并 2- 实现⭐148. 排序链表——题解思路 3- ACM 实现 原题连接&#xff1a;148. 排序链表 1- 思路 归并 1- 先求解链表的长度&#xff0c;求出长度后利用 subLen 1 开始归并 定义虚拟头结点 dummyHead &#xff0c;便于处理头结点 2- 归并逻辑 for(int subLen…

nacos 使用 docker 单机部署连接 MySQL 数据库并开启鉴权

文章目录 本地部署的配置启用鉴权(未验证) docker部署的配置修改docker 镜像源启用鉴权&#xff0c;必须添加如下环境变量如何生成鉴权的密钥 完整环境变量docker启动命令 本地部署的配置 文件结构 application.properties #配置文件 mysql-schema.sql …

[Linux#40][线程] 线程控制 | 多线程

内核中有没有很明确的线程概念呢&#xff1f;没有的。有的是轻量级进程的概念 不会给我直接提供线程的系统调用&#xff0c;只会给我们提供轻量级进程的系统调用&#xff0c;但是我们用户&#xff0c;需要线程的接口&#xff01; 所以 Linux 开发者提供了 pthread 线程库--应用…

成为创作者的第1024天:成长与技术积累的旅程

前言 &#x1f4eb; 大家好&#xff0c;我是南木元元&#xff0c;热爱技术和分享&#xff0c;欢迎大家交流&#xff0c;一起学习进步&#xff01; &#x1f345; 个人主页&#xff1a;南木元元 今天是我成为创作者的第1024天。回顾这段时间&#xff0c;虽然日常的忙碌充斥着生活…

roles(角色)

创建目录&#xff0c;编写剧本下载nginx: 184 mkdir /etc/ansible/playbook 185 vim /etc/ansible/playbook/nginx.yml --- - hosts: groupremote_user: roottasks:- name: 卸载httpdyum: namehttpd stateabsent- name: 安装nginxyum: …