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

贵阳城乡和住房建设厅网站自媒体论坛交流推荐

贵阳城乡和住房建设厅网站,自媒体论坛交流推荐,拖拉建网站,ios软件下载网站需求背景需要一个像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.yidumall.com/news/89579.html

相关文章:

  • 24小时自动发货网站建设谷歌关键词查询工具
  • 外贸型网站建设的基本流程东莞seo整站优化
  • 做网站哪家服务器好打字赚钱平台 学生一单一结
  • 当今做网站的流行趋势百度客服
  • 自己做的网址危险网站qq推广链接
  • 中贸网做的网站网站快速有排名
  • 注册公司3个人分别是啥南宁seo公司哪家好
  • 电子商务网站设计公司百度招聘官网
  • 东台专业做网站个人怎么开跨境电商店铺
  • 学做缝纫的网站百度竞价开户渠道
  • 哪个网站做兼职什么是seo技术
  • 长沙优化网站购物网站大全
  • 教育网站 怎么做吸引人互联网广告联盟
  • 湖南做网站 x磐石网络全网霸屏推广系统
  • 如何做国外网站的镜像会计培训机构
  • 网站登录界面图片用什么软件做西安网站建设推广优化
  • 做电商图的设计网站免费web服务器网站
  • 做美食分享网站源码求好用的seo软件
  • wordpress导入微信seo网络推广优化教程
  • 如何自制公司网站网站搭建需要什么技术
  • 好网站页面谷歌广告
  • 重庆网站空间费用百度一下首页版
  • 专做实习生招聘的网站如何能查到百度搜索排名
  • 企业网站需要在电信做哪些备案广告推广怎么找客户
  • 新建建设兵团科技局网站seo站长综合查询
  • 采集的网站怎么做收录谷歌搜索引擎363
  • 网站建设方为客户提供使用说明书怎么制作自己的网站
  • 企业咨询流程广州网站优化平台
  • 苏州外贸网站推广教育培训排行榜前十名
  • 怀柔广州网站建设荆门今日头条新闻发布