当前位置: 首页 > 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.qdjiajiao.com/news/468.html

相关文章:

  • 网站建设开发报价单seo网络推广专员招聘
  • 昆山网站建设多少钱北京seo营销培训
  • 推荐网站建设服务器找回原来的百度
  • 镇江品牌网站建设网站设计专业的公司
  • 杭州建设网站哪家好如何优化关键词排名快速首页
  • 江西网站建设哪家专业成都优化网站哪家公司好
  • 柏乡企业做网站腾讯广告投放推广平台
  • 可以给别人做ps设计的网站全网推广成功再收费
  • 成华区微信网站建设网络seo招聘
  • 网站开发要什么样的环境企业网站seo排名
  • lamp网站开发 pdf谷歌浏览器官网入口
  • 网站建设的多吗疫情最新情况 最新消息 全国
  • wordpress做的外贸网站6百度搜索广告价格
  • 做啥网站能挣钱高端网站建设南宁
  • 制作网站搭建网站项目怎么样seo网络推广报价
  • 惠州市住房和城乡建设厅网站暴风seo论坛
  • 中湾建设网站如何免费注册网站平台
  • 重庆企业网站开发方案网站竞价推广
  • 东莞网站建设网seo关键词优化价格
  • 网站程序组成网站建设找哪家公司好
  • 网站的主要内容公司网络推广方案
  • 我的世界做外国壁纸网站宁德seo推广
  • 一站式网站建设用途文职培训机构前十名
  • 自己做网站 需要哪些东西什么平台可以免费发广告
  • 网站制作 系统定制百度seo如何优化关键词
  • 吉木萨尔县建设局网站北京seo排名收费
  • wordpress游客不加载图片长沙百度快照优化排名
  • 做静态网站有什么用24小时自助下单平台网站便宜
  • 西安互联网网站建设seo规范培训
  • 上海做网站好的公司域名比价网