`
wbj0110
  • 浏览: 1586641 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

JAVA封装Mongodb操作之一:MongoRepository

阅读更多

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

 

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

例:

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

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

 

例:

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

下面是支持的查询类型,每三条数据分别对应:(方法后缀,方法例子,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原本查询语句的查询方式。
例:在原接口中加入

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

 

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

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

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

相关推荐

    springboot+mongodb

    你可以创建一个接口继承自 `MongoRepository`,并指定实体类和主键类型。Spring 会自动为你生成实现,提供基本的 CRUD 方法。 ```java public interface UserRepository extends MongoRepository, String&gt; { ...

    mongodb在java中小试牛刀

    只需要定义一个接口,继承自MongoRepository,并提供泛型参数(对应MongoDB集合的实体类型和ID类型),Spring会自动为你生成实现,包括CRUD操作和自定义查询方法。 ```java public interface UserRepository ...

    mongoDB DAO层封装

    MongoDB DAO层封装是数据库操作的重要一环,它在应用程序与数据库之间建立了一层抽象,使得数据访问更加简便和高效。在这个项目中,我们主要基于MongoDB 3.0版本和Spring Data 1.5进行整合,实现了DAO层的封装。下面...

    Spring Data MongoDB中文文档

    - **Spring Data MongoDB** 支持定义 Repository 接口来进行数据访问,这些接口通常继承自 `MongoRepository` 或其子接口。 - **Repository** 可以定义基于方法名的查询方法,例如: ```java public interface ...

    springMVC整合MongoDb整个工程下载

    4. **定义 MongoDB Repository**:Spring Data 提供了 Repository 抽象,我们可以通过继承 `MongoRepository` 接口来定义数据访问接口,无需编写具体的 CRUD 方法。例如: ```java public interface ...

    spring-data-mongodb-1.2.0.RELEASE

    在 Spring Data MongoDB 中,数据以 Java 对象的形式表示,通过 MongoDBTemplate 或 MongoRepository 进行操作。 三、Spring Data MongoDB 1.2.0.RELEASE 新特性 1. 改进的查询构造器:1.2.0.RELEASE 版本增强了...

    springboot整合MongoDB初级入门

    SpringBoot集成MongoDB的一个重要优点是,它将MongoDB的复杂性封装起来,让开发者可以专注于业务逻辑,而不是数据库操作。这种方式使得学习曲线变平,尤其适合初学者快速上手。 在实际项目中,你可能还需要考虑如何...

    springdata mongodb api文档

    这是一个用于MongoDB操作的类,它封装了对MongoDB的基本CRUD(创建、读取、更新、删除)操作,并且提供了一个更加面向对象的接口,使得开发者可以通过更加自然的方式来操作MongoDB。 SpringData MongoDB支持查询...

    基于spring data mongo封装的API,让开发人员不用知道mongo

    Spring Data MongoDB则是Spring Data框架的一个子项目,它为MongoDB提供了全面的支持,使得Java开发者能够轻松地进行数据操作,而无需深入理解MongoDB的底层细节。本项目基于Spring Data MongoDB封装了一套API,旨在...

    mongodb_demo:SpringBoot整合mongoDB完成CURD

    import org.springframework.data.mongodb.repository.MongoRepository; public interface UserRepository extends MongoRepository, String&gt; { User findByEmail(String email); } ``` 这个接口自动提供了基本的...

    Spring+MongoDB整合 项目

    1. **数据访问层**:Spring Data MongoDB模块提供了与MongoDB的集成,包括MongoTemplate和MongoRepository接口,使得操作MongoDB就像操作传统JDBC一样简单。例如,可以通过定义Repository接口并继承MongoRepository...

    spring-data-mongo-1.0.1.RELEASE.zip

    2. **MongoRepository**:这是一个接口,通过继承该接口,开发者可以实现自定义的查询方法,无需编写任何SQL或MongoDB查询语句。Spring Data会自动将这些方法转换为相应的数据库操作。 3. **Document**:这是表示...

    spring mongodb用到的jar包spring-date-mongodb1.4.2.zip

    Spring MongoDB 是一个强大的Java框架,它允许开发人员利用Spring框架的功能来操作MongoDB数据库。这个压缩包`spring-date-mongodb1.4.2.zip`包含了两个核心的JAR文件:`spring-data-mongodb-1.4.2.RELEASE.jar`和`...

    Java_使用Spring Data为JPA MongoDB Neo4j Redis的例子.zip

    1. **Spring Data JPA**:Spring Data JPA是Spring Framework的一个模块,它提供了对Java Persistence API(JPA)的高级封装,简化了持久化操作。通过使用Spring Data JPA,开发者可以很容易地创建CRUD(创建、读取...

    SpringMongoDB+SpringMvc

    例如,你可以创建一个`MongoRepository`接口来处理特定类型的文档: ```java public interface UserRepository extends MongoRepository, String&gt; { User findByUsername(String username); } ``` **MongoDB** ...

    springMVC 学习参考 配套mongodb数据库2

    Spring Data MongoDB提供了与之对应的API,使得在Java代码中执行聚合操作变得简单。例如,我们可以找到所有年龄大于30岁的用户: ```java Aggregation aggregation = Aggregation.newAggregation( unwind("friends...

    SpringBootMongo

    SpringBootMongo是一个项目,它整合了SpringBoot框架与MongoDB数据库,旨在提供一套方便快捷的API,以便开发者在使用SpringBoot构建应用时能够轻松地接入和操作MongoDB。MongoDB是一个流行的NoSQL数据库,以其非关系...

    mongodb+spring+strust框架完整示例版本

    具体来说,Spring会通过XML配置文件或者Java配置来定义MongoDB的数据源,创建MongoTemplate或者MongoRepository接口的实现,然后通过@Autowired注解注入到Struts的Action类中。在Action中,通过调用这些接口的方法...

    mogodb demo

    在实际应用中,我们通常会创建一个工具类,如 `MongoDbUtil`,用于封装 MongoDB 的操作。这个类可能包含连接数据库、获取 MongoDB 配置、执行查询等方法。例如,它可能会有如下的构造函数来初始化 MongoDB 客户端: ...

    weasel-spring-mongodb:一个封装了对mongodb的包,基于spring

    3. **Repository支持**:`weasel-spring-mongodb`可能扩展了Spring Data MongoDB的Repository接口,让你可以定义自己的Repository接口,继承自`MongoRepository`,然后自动实现基本的数据库操作。这样,你可以通过...

Global site tag (gtag.js) - Google Analytics