(1)Maven工程,pom里增加:
<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb</artifactId> <version>1.8.4.RELEASE</version> </dependency>
(2)Spring配置文件里增加:
<bean id="mongo" class="org.springframework.data.mongodb.core.MongoFactoryBean"> <property name="host" value="${mongo.host}" /> <property name="port" value="${mongo.port}" /> </bean>
<!-- MongoTemplate for connecting and quering the documents in the database --> <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> <constructor-arg name="mongo" ref="mongo" /> <constructor-arg name="databaseName" value="${mongo.dbname}" /> </bean>
(3)properties里写:
mongo.host=localhost mongo.port=27017 mongo.dbname=logCenter #库名称
(4)Service里引入
/** * MongoDb的操作模板. */ @Autowired private MongoTemplate mongoTemplate;
然后就可以用了。
Query query = new Query(); ...设置查询条件 List<XXX> list = mongoTemplate.find(query,XXX.class); --------------
相等name='abc' query.addCriteria(Criteria.where("name").is("abc"));
模糊查询name like "%abc%",后面带i是忽略大小写 query.addCriteria(Criteria.where("name").regex("abc","i"));
//时间,注意参数得是Date类型 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); try { Date timeFrom = sdf.parse(params.getTimeFrom()); Date timeTo = sdf.parse(params.getTimeTo()); query.addCriteria(Criteria.where("createTime").gte(timeFrom) .lte(timeTo)); } catch (ParseException e) { e.printStackTrace(); }
//数字范围 query.addCriteria(Criteria .where("duration") .exists(true) .andOperator( Criteria.where("duration").gte( params.getDurationFrom()), Criteria.where("duration").lte( params.getDurationTo()))); 一个字段是null的话,mongodb里,这个字段就不会保存。
// 排序 query.with(new Sort(Direction.DESC, "createTime"));
// select字段列表 query.fields().include("_id"); query.fields().include("action"); query.fields().include("url"); query.fields().include("duration"); query.fields().include("createTime");
// 分页 if (isPage) { //int pageSize = params.getRows(); //int pageNum = params.getPage(); //query.skip((pageNum - 1) * pageSize).limit(pageSize); //这样更好,注意PageRequest的参数pageNum是从0开始的。 Pageable pageableRequest = new PageRequest(params.getPage()-1, params.getRows()); query.with(pageableRequest); }
保存很简单,直接传一个bean,会自动创建一个Collection,名字就是类的名字。 mongoTemplate.save(ticketLog);
对了,还有一个id属性的问题,类里有id属性的话,保存时好像报错了, 说不知道怎么生成id,不知道是不是我写的不对。 反正,把id去掉了,mongodb会自动生成一个_id的列,所以我加了个_id的列,可以取到生成的_id值,是字符串。 ----------------------------------------------------------- http://spring.io/guides/gs/accessing-data-mongodb/ 还可以声明一个接口,继承MongoRepository,不用写实现类,呵呵。
官方文档: http://docs.spring.io/spring-data/data-mongodb/docs/current/reference/html/
|