Spring Boot中访问数据库
1.JdbcTemplate,是Spring在JDBC的基础上做了一些封装,面向SQL的访问数据库方式。
2.使用Spring-data-jpa在JPA提供的简单语义上做了一定的封装,整合orm框架访问数据库,默认采用Hibernate实现。Spring Data是面向对象的访问数据库方式。
JPA:Java Persistence API,java持久化api。
Repository 抽象了对数据库的操作,提供了以下接口:CrudRepository、PagingAndSortingRepository、JpaRepository。
注解查询:@Query中允许使用JPQL或SQL来给出查询方法。
Spring-data-mongodb
Spring-data对MongoDB进行了很好的支持,包括以下特征:
mongodb在spring中的配置支持注解 @Configuration和xml的方式。
MongoTemplate辅助类扩展了Mongo operations的生产效率,提供了document和pojo类型之间的转换。MongoOperations是MongoTemplate实现的接口,MongoOperations中有很多操作文档的方法。
参考:
http://docs.spring.io/spring-data/data-document/docs/current/reference/html/
Spring-mongodb 查询
http://docs.spring.io/spring-data/mongodb/docs/1.2.0.RELEASE/reference/html/mongo.repositories.html
http://blog.csdn.net/congcong68/article/details/47183209
Spring Data与MongoDB:不协调的设计,及评论
http://www.infoq.com/cn/news/2013/11/spring-data-mongo-mismatch
MONGODB中的分组聚合在JAVA中的用法
http://www.debugrun.com/a/1pcWFsT.html
MongoRepository
如果只需要用简单的CRUD操作,则不需要添加其他的方法,MongoRepository提供的方法足够使用。
MongoRepository接口有两个参数:第一个参数是带有@Document注解的对象类型,第二个参数是带有@Id注解的属性类型。
public interface PersonRepository extends MongoRepository<Person, String>{
}
- 注解@Document(collection="name1"),标示映射到mongoDB文档上的领域对象
- 注解@ID,标示某个为ID域
- 注解@DbRef,标示某个域要引用其他的文档,这个文档有可能位于另外一个数据库中
- 注解@Field("field1"),为文档域指定自定义的元数据,若不使用@Field注解,域名与Java属性相同
- 注解@Version,标示某个属性用作版本域
@Query注解指定查询:
使用@Query时,方法名可不按照规则来写,这可能自由缩短条件多的查询方法名。
@Query注解中的内容是一个 JSON 对象,和在 MongoDB 的控制台查询的find()中的内容是一样的,只不过将双引号换成单引号,将需要变量用 [0]、[1] 和 [2] 的形式表示第一、第二和第三个参数。?#{} 是表示里面的内容是个 SpEL (Spring 的表达式语言) 表达式。
import org.bson.types.ObjectId;
public interface PersonRepository extends MongoRepository<Person, ObjectId> {
//根据实体类中的属性进行模糊查询带分页,同时指定返回的键:
/*
value是查询的条件,?0是占位符,对应着方法中参数中的第一个参数,如果对应的是第二个参数则为?1。
fields指定返回字段,其中id是自动返回的,不用指定。bson中{'name':1}中的1代表true,表示返回此字段。
*/
@Query(value="{'name':?0}",fields="{'name':1}")
public Page findByNameLike(String name,Pageable pageable);
//查询所有id不为空的数据,同时指定返回的键。方法名的定义规则为:find + By + 属性名(首字母大写) + NotNull。
@Query(value="{'_id':{'$ne':null}}",fields="{'name':1}")
public Page findByIdNotNull(Pageable pageable);
}
当MongoDB遇上Spring
http://blog.csdn.net/u012150370/article/details/51822776
A Guide to Queries in Spring Data MongoDB
http://www.baeldung.com/queries-in-spring-data-mongodb
distinct
mongoTemplate.getCollection("collection_name").distinct("field", new BasicDBObject("price", new BasicDBObject("$gt", 10)));
Criteria criteria = getCriteria(conditions, "and");
List values = mongoTemplate.getCollection(collectionName).distinct(distinctField, new Query(criteria).getQueryObject());
String jsonSql="{distinct:'terminalRecord', key:'areaId'}";
CommandResult commandResult=mongoTemplate.executeCommand((DBObject) JSON.parse(jsonSql));
DBObject dbObject=BasicDBObjectBuilder.start("distinct",collectionName).add("key",distinctKey).get();
CommandResult commandResult=mongoTemplate.executeCommand(dbObject);
List values=(List)commandResult.get("values");