[心缘地方]同学录
首页 | 功能说明 | 站长通知 | 最近更新 | 编码查看转换 | 代码下载 | 常见问题及讨论 | 《深入解析ASP核心技术》 | 王小鸭自动发工资条VBA版
登录系统:用户名: 密码: 如果要讨论问题,请先注册。

[整理]spring-data-mongodb的简单使用

上一篇:[转帖]mongodb允许远程访问
下一篇:[备忘]Mongodb分页时异常:Overflow sort stage buffered data usage of 33562554 bytes exceeds

添加日期:2016/3/12 11:26:49 快速返回   返回列表 阅读5526次
(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/
 

评论 COMMENTS
没有评论 No Comments.

添加评论 Add new comment.
昵称 Name:
评论内容 Comment:
验证码(不区分大小写)
Validation Code:
(not case sensitive)
看不清?点这里换一张!(Change it here!)
 
评论由管理员查看后才能显示。the comment will be showed after it is checked by admin.
CopyRight © 心缘地方 2005-2999. All Rights Reserved