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

电子商务网站建设 教材深圳网络推广工资

电子商务网站建设 教材,深圳网络推广工资,wordpress ftp验证,优化网站价位需求背景需要一个像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/112590.html

相关文章:

  • 昆明网站建站公司站长之家ping检测
  • vue适合做门户网站吗企业自建网站
  • 自己做的网站能赚钱吗114外链
  • 自己做的网站验证码出不来怎么回事windows优化大师收费
  • 北京做网站建设的公司排名seo诊断报告怎么写
  • 超炫的网站seo查询 站长工具
  • 字体设计软件 免费windows优化大师和鲁大师
  • 管理有限公司网站设计数据分析师证书
  • 最新网站制作公司哪个好域名解析
  • 保定专业做网站的公司seo优化与品牌官网定制
  • WordPress在服务器什么位置seo专业优化公司
  • 佛山快速建站哪家服务专业怎么推广软件
  • 临沂网站建设培训凡科网站官网
  • 皋兰县建设局网站百度推广后台登录
  • dz网站模版网站策划方案
  • 做动态图表的网站简述网络营销的含义
  • 建设网站项目概况seo 资料包怎么获得
  • 黑龙江网站开发百度竞价排名的利与弊
  • 没有相应营业执照怎么做网站三生网络营销靠谱吗
  • 做制作网站找啥工作沈阳seo排名优化教程
  • 外卖网站建设可行性分析互联网营销师报名
  • 伊犁网站建设评价福州网站快速排名提升
  • 重庆网站建设优斗士外贸商城建站
  • 石家庄新钥匙做网站千锋教育学费
  • 医疗网站平台建设方案如何做网站赚钱
  • wordpress google统计单页网站seo优化
  • 网站开发包括哪些怎么制作网站详细流程
  • 大型网站的技术架构问题济南seo关键词优化方案
  • 二级域名可以单独做网站吗网络营销方法有哪些?
  • php怎样做网站管理后台专业海外网站推广