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, double ageTo,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, double ageTo,Pageable page); |
相关推荐
你可以创建一个接口继承自 `MongoRepository`,并指定实体类和主键类型。Spring 会自动为你生成实现,提供基本的 CRUD 方法。 ```java public interface UserRepository extends MongoRepository, String> { ...
只需要定义一个接口,继承自MongoRepository,并提供泛型参数(对应MongoDB集合的实体类型和ID类型),Spring会自动为你生成实现,包括CRUD操作和自定义查询方法。 ```java public interface UserRepository ...
MongoDB DAO层封装是数据库操作的重要一环,它在应用程序与数据库之间建立了一层抽象,使得数据访问更加简便和高效。在这个项目中,我们主要基于MongoDB 3.0版本和Spring Data 1.5进行整合,实现了DAO层的封装。下面...
- **Spring Data MongoDB** 支持定义 Repository 接口来进行数据访问,这些接口通常继承自 `MongoRepository` 或其子接口。 - **Repository** 可以定义基于方法名的查询方法,例如: ```java public interface ...
4. **定义 MongoDB Repository**:Spring Data 提供了 Repository 抽象,我们可以通过继承 `MongoRepository` 接口来定义数据访问接口,无需编写具体的 CRUD 方法。例如: ```java public interface ...
在 Spring Data MongoDB 中,数据以 Java 对象的形式表示,通过 MongoDBTemplate 或 MongoRepository 进行操作。 三、Spring Data MongoDB 1.2.0.RELEASE 新特性 1. 改进的查询构造器:1.2.0.RELEASE 版本增强了...
SpringBoot集成MongoDB的一个重要优点是,它将MongoDB的复杂性封装起来,让开发者可以专注于业务逻辑,而不是数据库操作。这种方式使得学习曲线变平,尤其适合初学者快速上手。 在实际项目中,你可能还需要考虑如何...
这是一个用于MongoDB操作的类,它封装了对MongoDB的基本CRUD(创建、读取、更新、删除)操作,并且提供了一个更加面向对象的接口,使得开发者可以通过更加自然的方式来操作MongoDB。 SpringData MongoDB支持查询...
Spring Data MongoDB则是Spring Data框架的一个子项目,它为MongoDB提供了全面的支持,使得Java开发者能够轻松地进行数据操作,而无需深入理解MongoDB的底层细节。本项目基于Spring Data MongoDB封装了一套API,旨在...
import org.springframework.data.mongodb.repository.MongoRepository; public interface UserRepository extends MongoRepository, String> { User findByEmail(String email); } ``` 这个接口自动提供了基本的...
1. **数据访问层**:Spring Data MongoDB模块提供了与MongoDB的集成,包括MongoTemplate和MongoRepository接口,使得操作MongoDB就像操作传统JDBC一样简单。例如,可以通过定义Repository接口并继承MongoRepository...
2. **MongoRepository**:这是一个接口,通过继承该接口,开发者可以实现自定义的查询方法,无需编写任何SQL或MongoDB查询语句。Spring Data会自动将这些方法转换为相应的数据库操作。 3. **Document**:这是表示...
Spring MongoDB 是一个强大的Java框架,它允许开发人员利用Spring框架的功能来操作MongoDB数据库。这个压缩包`spring-date-mongodb1.4.2.zip`包含了两个核心的JAR文件:`spring-data-mongodb-1.4.2.RELEASE.jar`和`...
1. **Spring Data JPA**:Spring Data JPA是Spring Framework的一个模块,它提供了对Java Persistence API(JPA)的高级封装,简化了持久化操作。通过使用Spring Data JPA,开发者可以很容易地创建CRUD(创建、读取...
例如,你可以创建一个`MongoRepository`接口来处理特定类型的文档: ```java public interface UserRepository extends MongoRepository, String> { User findByUsername(String username); } ``` **MongoDB** ...
Spring Data MongoDB提供了与之对应的API,使得在Java代码中执行聚合操作变得简单。例如,我们可以找到所有年龄大于30岁的用户: ```java Aggregation aggregation = Aggregation.newAggregation( unwind("friends...
SpringBootMongo是一个项目,它整合了SpringBoot框架与MongoDB数据库,旨在提供一套方便快捷的API,以便开发者在使用SpringBoot构建应用时能够轻松地接入和操作MongoDB。MongoDB是一个流行的NoSQL数据库,以其非关系...
具体来说,Spring会通过XML配置文件或者Java配置来定义MongoDB的数据源,创建MongoTemplate或者MongoRepository接口的实现,然后通过@Autowired注解注入到Struts的Action类中。在Action中,通过调用这些接口的方法...
在实际应用中,我们通常会创建一个工具类,如 `MongoDbUtil`,用于封装 MongoDB 的操作。这个类可能包含连接数据库、获取 MongoDB 配置、执行查询等方法。例如,它可能会有如下的构造函数来初始化 MongoDB 客户端: ...
3. **Repository支持**:`weasel-spring-mongodb`可能扩展了Spring Data MongoDB的Repository接口,让你可以定义自己的Repository接口,继承自`MongoRepository`,然后自动实现基本的数据库操作。这样,你可以通过...