首页 > 数据库 >JAVA封装Mongodb操作之一:MongoRepository

JAVA封装Mongodb操作之一:MongoRepository

时间:2023-03-31 15:36:24浏览次数:44  
标签:MongoRepository JAVA name Mongodb age 查询 public String


MongoRepository与HibernateTemplete相似,提供一些基本的方法,实现的方法有findone(),save(),count(),findAll(),findAll(Pageable),delete(),deleteAll(),基本就这几个,但是:

 

与HibernateRepository类似,通过继承MongoRepository接口,我们可以非常方便地实现对一个对象的增删改查,要使用Repository的功能,先继承MongoRepository<T, TD>接口,其中T为仓库保存的bean类,TD为该bean的唯一标识的类型,一般为ObjectId。之后在service中注入该接口就可以使用,无需实现里面的方法,spring会根据定义的规则自动生成。

例:

public interface PersonRepository extends
2	 
3	MongoRepository<Person, ObjectId>{
4	//这里可以添加额外的查询方法
5	}

但是MongoRepository实现了的只是最基本的增删改查的功能,要想增加额外的查询方法,可以按照以下规则定义接口的方法。自定义查询方法,格式为“findBy+字段名+方法后缀”,方法传进的参数即字段的值,此外还支持分页查询,通过传进一个Pageable对象,返回Page集合。

 

例:

public interface PersonRepository extends
	 
	MongoRepository<Person, ObjectId>{
	 //查询大于age的数据
	       public Page<Product> findByAgeGreaterThan(int age,Pageable page) ;
	}


下面是支持的查询类型,每三条数据分别对应:(方法后缀,方法例子,mongodb原生查询语句)

 

GreaterThan(大于) 
findByAgeGreaterThan(int age) 
{"age" : {"$gt" : age}}LessThan(小于) 
findByAgeLessThan(int age) 
{"age" : {"$lt" : age}}Between(在...之间) 
findByAgeBetween(int from, int to) 
{"age" : {"$gt" : from, "$lt" : to}}IsNotNull, NotNull(是否非空) 
findByFirstnameNotNull() 
{"age" : {"$ne" : null}}IsNull, Null(是否为空) 
findByFirstnameNull() 
{"age" : null}Like(模糊查询) 
findByFirstnameLike(String name) 
{"age" : age} ( age as regex)(No keyword) findByFirstname(String name) 
{"age" : name}Not(不包含) 
findByFirstnameNot(String name) 
{"age" : {"$ne" : name}}Near(查询地理位置相近的) 
findByLocationNear(Point point) 
{"location" : {"$near" : [x,y]}}Within(在地理位置范围内的) 
findByLocationWithin(Circle circle) 
{"location" : {"$within" : {"$center" : [ [x, y], distance]}}}Within(在地理位置范围内的) 
findByLocationWithin(Box box) 
{"location" : {"$within" : {"$box" : [ [x1, y1], x2, y2]}}}

尽管以上查询功能已经很丰富,但如果还不能满足使用情况的话可以用一下方法---基于mongodb原本查询语句的查询方式。
例:在原接口中加入


@Query("{ 'name':{'$regex':?2,'$options':'i'}, sales': {'$gte':?1,'$lte':?2}}")
	public Page<Product> findByNameAndAgeRange(String name,double ageFrom,doubleageTo,Pageable page);

 

注释Query里面的就是mongodb原来的查询语法,我们可以定义传进来的查询参数,通过坐标定义方法的参数。

还可以在后面指定要返回的数据字段,如上面的例子修改如下,则只通过person表里面的name和age字段构建person对象。


查看源码

 

打印?

@Query(value="{ 'name':{'$regex':?2,'$options':'i'}, sales':{'$gte':?1,'$lte':?2}}",fields="{ 'name' : 1, 'age' : 1}")
	public Page<Product> findByNameAndAgeRange(String name,double ageFrom,doubleageTo,Pageable page);


标签:MongoRepository,JAVA,name,Mongodb,age,查询,public,String
From: https://blog.51cto.com/u_2650279/6161824

相关文章

  • Tapdata Connector 实用指南:如何将 CRM 数据从 Salesforce 实时同步到 MongoDB 等其他
    【前言】作为中国的“Fivetran/Airbyte”,Tapdata是一个以低延迟数据移动为核心优势构建的现代数据平台,内置60+数据连接器,拥有稳定的实时采集和传输能力、秒级响应的数据实时计算能力、稳定易用的数据实时服务能力,以及低代码可视化操作等。典型用例包括数据库到数据库的复制......
  • Java中transient关键字
    一、概要介绍本文要介绍的是Java中的transient关键字,transient是短暂的意思。对于transient修饰的成员变量,在类的实例对象的序列化处理过程中会被忽略。因此,transient变量不会贯穿对象的序列化和反序列化,生命周期仅存于调用者的内存中而不会写到磁盘里进行持久化。1.序列化J......
  • 感受JavaLambda之美
    1Stream概述2Stream的创建3Stream的使用4Stream源码解读先贴上几个案例,水平高超的同学可以挑战一下:从员工集合中筛选出salary大于8000的员工,并放置到新的集合里。统计员工的最高薪资、平均薪资、薪资之和。将员工按薪资从高到低排序,同样薪资者年龄小者在前。将员......
  • java.sql.SQLException: sql injection violation, multi-statement not allow?已解决
    今天在使用mybatis-oracle时有需求需要同时更新多个字段,在跑完接口后我发现有如下异常sqlinjectionviolation,multi-statementnotallow原因是没有配置allowMultiQueries=truespringboot项目直接在配置文件写上如下配置即可还有用config类来解决的在配置类中添加如下两......
  • 网页编辑器粘贴图片自动上传到服务器(Java版)
    ​如何做到ueditor批量上传word图片?1、前端引用代码<!DOCTYPE html PUBLIC "-//W3C//DTDXHTML1.0Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head>......
  • Java中使用EasyExcel生成Excel文件
    使用Spring框架中的@ExcelProperty注解生成Excel文件需要借助于第三方库,比如EasyExcel或ApachePOI等。首先定义实体类,例如publicclassUser{@ExcelProperty(value="姓名",index=0)privateStringname;@ExcelProperty(value="年龄",index=1)priva......
  • java两个不同类的对象相同属性赋值
    一、外部工具包Java中有很多工具包可以用来实现对象属性复制,其中比较常用的有以下几个:ApacheCommonsBeanUtils:提供了一组简单易用的API,可以实现对象属性的复制、获取、设置等操作。SpringFrameworkBeanUtils:与ApacheCommonsBeanUtils类似,提供了一组API,可以实现对......
  • Float 或者 Double 除以零不会抛出 java.lang.ArithmeticExceptionL:/by zero 异常
    1.Java的浮点运算是基于IEEE-754标准来的。IEEE-754standardJava'sFloating-PointOperations2.Java语言规范https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.31.0/0=+Infinity-1.0/0=-Infinity0/0=NaN......
  • Java 根据地址查询经纬度
    百度开放平台控制台:https://lbsyun.baidu.com/apiconsole/key#/home经纬度比较网址:https://jingweidu.bmcx.com/1、创建应用 2、写Java服务 /***通过字符串地址获取经纬度*@Author:menghaipeng*@Date:2023/3/3111:31*/publicclassDistanceUtil{......
  • HTML编辑器粘贴图片自动上传到服务器(Java版)
    ​ 由于工作需要必须将word文档内容粘贴到编辑器中使用但发现word中的图片粘贴后变成了file:///xxxx.jpg这种内容,如果上传到服务器后其他人也访问不了,网上找了很多编辑器发现没有一个能直接解决这个问题考虑到自己除了工作其他时间基本上不使用windows,因此打算使用nodejs来解......