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

又一个 wordpress 站点网站备案最快

又一个 wordpress 站点,网站备案最快,种子搜索器,电商app开发费用需求背景需要一个像mybatis plus 一样的基于lambda, 且面向对象的查询mongo数据的插件。在网上找了很久,没有发现有类似功能的插件。于是自己手写了一个,借助mongoTemplate屏蔽了底层查询语句的实现细节。在此基础上,实现了查询的统一封装。技…

需求背景

需要一个像mybatis plus 一样的基于lambda, 且面向对象的查询mongo数据的插件。在网上找了很久,没有发现有类似功能的插件。于是自己手写了一个,借助mongoTemplate屏蔽了底层查询语句的实现细节。在此基础上,实现了查询的统一封装。

技术难点

  1. 基于SerializedLambda对象获取查询的属性,例如下面是获取task的name;

MongoLambdaQuery.lambdaQuery(Task.class).is(Task::getName, taskCriteria.getName())
  1. 怎么传参这种Task::getName 函数引用

通过函数式接口SFunction来表示R实际类型:

Children ne(R column, Object val);@FunctionalInterface
public interface SFunction<T, R> extends Function<T, R>, Serializable {
}

然后通过maybeDo来判断搜索参数不为空才进行查询。这里DoSomething又是一个函数式接口,something.doIt()时才会执行具体columnToString操作,得到我们的属性。

  protected Children addCondition(boolean condition, R column, SqlKeyword keyWord, Object val, Object... key) {return maybeDo(condition, () -> columnToSqlSegment(column, val, keyWord, key));}protected final Children maybeDo(boolean condition, DoSomething something) {if (condition) {something.doIt();}return typedThis;}@FunctionalInterfacepublic interface DoSomething {void doIt();}protected String columnToString(SFunction<T, ?> column) {return LambdaUtils.getField(column);}

c. 最后就是泛型的使用,这里需要查询返回泛型T,属性column泛型R,Children泛型表示返回类型类似builder,做链式调用,最后继承类对具体类型的声明。

public interface Query<T>
public interface Func<Children, R> extends Serializable

public abstract class AbstractQuery<T, R, Children extends AbstractQuery<T, R, Children>>
implements Func<Children, R>, Query<T>

public abstract class MongoAbstractLambdaQuery<
T, Children extends MongoAbstractLambdaQuery<T, Children>>
extends AbstractQuery<T, SFunction<T, ?>, Children>

public class MongoLambdaQuery<T> extends MongoAbstractLambdaQuery<T, MongoLambdaQuery<T>>

项目地址:

https://github.com/DarMi7/mongo-lambda-query

使用demo

  1. 引入maven依赖文件

<dependency>
<groupId>io.github.darmi7</groupId>
<artifactId>mongo-lambda-query</artifactId>
<version>1.1.0</version>
</dependency>
  1. 开启插件注解,加上需要扫描mongo实体的包路径

@EnableMongoLambdaQuery
@EnableMongoRepositories(basePackages = "com.darmi.demo.repository.mongo")
public class Application
  1. 编写查询代码

@Repositorypublic interface TaskRepository extends MongoRepository<Task, String> {default Page<Task> search(TaskCriteria taskCriteria) {return MongoLambdaQuery.lambdaQuery(Task.class).is(Task::getName, taskCriteria.getName()).is(Task::getType, taskCriteria.getFuzzyName()).reg(Task::getName, taskCriteria.getName()).gt(Task::getPoints, taskCriteria.getPoints()).gt(Task::getCreated, taskCriteria.getBegin()).lt(Task::getCreated, taskCriteria.getEnd()).page(taskCriteria.getPagination());}}
http://www.yayakq.cn/news/762905/

相关文章:

  • 手机网站设计的项目描述在天津做网站的公司
  • 付费电影网站源码微商城手机网站制作公司
  • 家乡网站设计目的网站建设培训费用
  • 网站防注入怎么办网站规划与建设规划书
  • 3d效果图教程网站网站建设的内容策略
  • 建网站首选公司重庆项目信息网
  • 优化网站有哪些方法广西工程建设质量管理协会网站
  • 医疗企业网站模板凡科建设网站如何对话框
  • 厦门网站建设建站中心专门做棋牌广告广告的网站
  • 制作企业网站的机构推荐网页设计的版式有哪些
  • 网站开发的前端后端中国佛山营销网站建设
  • 学做网站培训房城乡建设部网站
  • 个人网站备案网站名称滑县网站建设
  • wordpress响应式网站模板下载wordpress 导入 微信
  • 柳州本地做网站的公司恩施做网站
  • 网站开发有什么好的命题网站建设怎么在png上写文字
  • 中国招标机构哪个网站做的好wordpress去掉wordpress.org
  • 公司网站建设前期方案公司制作网站怎么做的
  • 网站备案一般由谁来做app需要建网站吗
  • 杭州网站建设派迪网络怎么做彩票网站平台
  • 长沙市宁乡县建设局网站个人网页设计文档说明模板
  • 宁夏省建设厅网站小红书seo排名帝搜软件
  • 机关网络 网站 建设新手学做网站推荐软件
  • 潍坊市住房和城乡建设厅网站长沙县政务网站
  • 宝安做棋牌网站建设可信网站申请
  • 2021免费正能量网站入口国家653工程
  • 自治区建设厅网站新软件如何推广
  • 网站结构图怎么做软件工程与项目管理
  • 哈尔滨网站搭建图片预览网站 末班
  • 西安做网站公司玖佰网络青海住房建设厅网站