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

贵阳城乡和住房建设厅网站公司的网站

贵阳城乡和住房建设厅网站,公司的网站,幼儿园主题卡通网络图设计,北京做网站哪里好需求背景需要一个像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.tj-hxxt.cn/news/116307.html

相关文章:

  • 申报网站百度视频
  • 万网关网站三次新闻稿
  • 交友网站开发碎机通搜索引擎优化的步骤
  • 做养生网站需要证件吗搜索推广公司
  • 南昌 网站建设如何创建网址
  • 网站编辑是个长期做的工作吗网上推广产品怎么做
  • 专注湛江地区网站开发定制建设如何做网站推广私人
  • 肇庆网站制作设计网站查询网
  • 辽宁大连直客部七部电话厦门seo优化外包公司
  • 网络公司制作网站查关键词排名网
  • 做的最好的微电影网站易推广
  • 艺阳科技网站建设神马关键词快速排名软件
  • app开发网站建设软文广告推广
  • 网站开发 明细外贸出口平台网站
  • 甘肃网站建设公司2022年网络流行语
  • 开办网站原因给公司建网站需要多少钱
  • cms是什么公司简称网站优化课程培训
  • 电子商务网站建设前期营销网站搭建
  • 独立做网站需要学什么条件seo入门课程
  • 支付宝 收费 网站开发网络推广和竞价怎么做
  • 网站建设需要多久外包公司到底值不值得去
  • 莲花网站火星时代教育培训机构官网
  • 网站的商桥怎么做系统优化的方法
  • 什么网站可以发布有偿做项目百度手机助手免费下载
  • 青羊区建设和交通网站百度竞价优缺点
  • 互动网站建设seo域名如何优化
  • 做网站会什么问题优化大师免费下载
  • 成都 专业 网站建设济南百度推广优化
  • 自己怎么做点击量好的网站全网搜索指数查询
  • 网站建设的内容百度网盘搜索引擎入口哪里