mongodb的使用过程spring-data-mongodb

mongdb的使用:

系统环境如下:

spring +springmvc+mongodb +spring-data-mongodb

版本:(使用说明在使用spring-data-mongodb的包的版本的时候选择的spring版本和jdk版本是有关系的,spring-data-mongodb2.X版本中用的是spring5.X版本或者是spring4.3以上的版本具体我还没有时间去研究对应的版本号,而且不同的版本里面的api方法是不一样的要对好配置文件中的属性参数,版本高的可能jdk1.7的不支持,需要jdk1.8以上版本请注意报错内容选择合适的版本)

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>4.2.3.RELEASE</version>
    <exclusions>
        <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
        </exclusion>
    </exclusions>
    <type>jar</type>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>${org.springframework.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
    <version>${org.springframework.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>${org.springframework.version}</version>
</dependency>
<org.springframework.version>4.1.3.RELEASE</org.springframework.version>

《以上是相关的spring配置》

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongo-java-driver</artifactId>
    <version>2.13.0</version>
</dependency>
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-mongodb</artifactId>
    <version>1.9.1.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-commons</artifactId>
    <version>1.13.9.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-jpa</artifactId>
    <version>1.11.12.RELEASE</version>
</dependency>

《以上是相关的spring-mongo-data的配置》

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mongo="http://www.springframework.org/schema/data/mongo"
       xsi:schemaLocation="
          http://www.springframework.org/schema/data/mongo
          http://www.springframework.org/schema/data/mongo/spring-mongo-1.8.xsd
          http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <mongo:mongo replica-set="${mongo.hostport}">

        <mongo:options connections-per-host="${mongo.connectionsPerHost}"
                       threads-allowed-to-block-for-connection-multiplier="${mongo.threadsAllowedToBlockForConnectionMultiplier}"
                       connect-timeout="${mongo.connectTimeout}"
                       max-wait-time="${mongo.maxWaitTime}"
                       auto-connect-retry="true"
                       socket-keep-alive="true"
                       socket-timeout="${mongo.socketTimeout}"
                       slave-ok="true"
                       write-number="1"
                       write-timeout="0"
                       write-fsync="true"
        />
    </mongo:mongo>
    <mongo:db-factory username="${mongo.username}" password="${mongo.password}" dbname="${mongo.dbname}" mongo-ref="mongo"/>
    <!--<bean id="defaultMongoTypeMapper" class="org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper">-->
        <!--&lt;!&ndash; 去除默认生成“_class”字段的关键,即:将该类带有typeKey参数的构造函数的参数值设置为null即可 &ndash;&gt;-->
        <!--<constructor-arg name="typeKey"><null/></constructor-arg>-->
    <!--</bean>-->
     <!--MongoDB类型转换器,可自定义扩展类型之间的转换,注意“type-mapper-ref”属性 -->
    <!--<mongo:mapping-converter id="mongoConverter" type-mapper-ref="defaultMongoTypeMapper">-->
        <!--<mongo:custom-converters>-->
            <!--<mongo:converter>-->
                <!--<bean class="com.comm.conf.TimestampConverter" />-->
            <!--</mongo:converter>-->
        <!--</mongo:custom-converters>-->
    <!--</mongo:mapping-converter>-->

    <bean id="MongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
        <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
        <!--<constructor-arg name="mongoConverter" ref="mongoConverter" />-->
    </bean>

</beans>

《以上是spring-mongo-的配置文件要配置到初始化加载文件中》

配置文件:

########mongoDB配置文件设置############
#host
mongo.hostport=127.0.0.1:27017
mongo.username=root
mongo.password=root
#DB name
mongo.dbname =test
#port
mongo.connectionsPerHost= 8
#线程最大连接数
mongo.threadsAllowedToBlockForConnectionMultiplier= 4
#connectTimeout ms
mongo.connectTimeout= 1500
#maxWaitTime
mongo.maxWaitTime= 1500
#自动连接
mongo.autoConnectRetry= true
#socketKeepAlive
mongo.socketKeepAlive= true
#socketTimeout
mongo.socketTimeout=1500
#读写分离
mongo.slaveOk=true

MongoTemplate

注意我们使用的是这个模板对象操作数据库的。是属于core包中的

MongoRepository 这个接口中封装了一下操作mongodb的方法,看自己使用哪一种方法来比较符合自己的业务逻辑

MongoTemplate:

param.getCollectionName()集合名称我为了好分辨专门放了个集合名称的参数,如果不传param.getCollectionName()这个参数默认集合的名称就是类名称。
MessageMongodb.class 是集合的实体类,如果不给集合名称那么就是默认实体类名名称了。 

实体类

@Document //mongodb实体映射对象 可以指定集合名称:

(collection=“”“集合名称”)指定后集合名称就是对应的这个实体类了。如果有许多集合要对应此实体类我还不知道怎么映射。?

用MongoRepository 可以自己设置集合映射名称,但是方法局限,我最后还是选择了MongoTemplate,映射集合的目的我是为了让他自动创建索引对象。 使用注解在参数上在保存数据的时候就自动创建对象索引了。

MessageMongodb{

@Id

private String id;

@Indexed

private String mesgTableName

get set方法自己填写。

}

-------------------------------------------------------------------------------------------------------------------

mongoTemplate.createCollection(param.getCollectionName()); //创建集合,集合也就是相当于我们mysql中说的表

mongoTemplate.getCollection(param.getCollectionName()).createIndex() 创建集合索引

 创建复合索引:

DBObject indexOptions = new BasicDBObject(); indexOptions.put("字段名称1", 1); indexOptions.put("字段名称2", 1);
mongoTemplate.getCollection(param.getCollectionName()).createIndex(indexOptions, "group_index");

mongoTemplate.insert(xx.class, "集合名称");

分页方法:

    @Override
    public Page<MessageMongodb> selectPage(Query query, MessageMongodb messageMongodb, Page<MessageMongodb> page) {
        query.with(new Sort(new Sort.Order(Sort.Direction.DESC, "created")));
        int skip = (page.getCurrentPage() - 1) * page.getPageSize();
        query.skip(skip);// 从那条记录开始
        query.limit(page.getPageSize());// 取多少条记录
        List<MessageMongodb> List= mongoTemplate.find(query, MessageMongodb.class,MessageMongodb.getMesgTableName());
        //动态拼接查询条件
        //计算总数
        long total = mongoTemplate.count(query, MessageMongodb.class, dxMessageMongodb.getMesgTableName());
        //查询结果集
//        List<MessageMongodb> List = mongoTemplate.find(query.with(pageable), MessageMongodb.class, MessageMongoPara.getCollectionName());
        Page<MessageMongodb> pageList = new Page<MessageMongodb>();

        if (total <= 0) {
            return pageList;
        }
        pageList.setTotalCount(((int) total));
        pageList.setResult(List);
        pageList.setCurrentPage(page.getCurrentPage());
        return pageList;
    }

结合前端分页对象展示。

mongoTemplate.remove(query, MessageMongodb.class, param.getCollectionName());//删除方法。

上述方法中有个参数query 这个query也就是sql中的where参数条件。

在mongodb中设置自己的参数条件封装个自己参数方法:

@Override
public Query setCriteriaInfo(MessageMongodb Message) {
    Criteria  criteria  = new Criteria();
    criteria.where("1=1");
    if(StringUtils.isNotEmpty(Message.getMesgTableName())){
      criteria.and("mesgTableName").is(Message.getMesgTableName());
    }
    if(StringUtils.isNotEmpty(dxMessage.getKeyId())){
        criteria.and("keyId").is(dxMessage.getKeyId());
    }
    Query query = new Query(criteria);
    return query;
}

 

@Override //更新方法有返回值可以判断是否更新成功。 {
    mongoTemplate.updateFirst(query, update, param.getCollectionName());
    final WriteResult writeResult = mongoTemplate.updateFirst(query, update,
            MessageMongodb.class, param.getCollectionName());
    if (writeResult.getN() <= 0) {//
        throw new RuntimeException("更新数据异常!");
    }
    return true;
}

updateFirst更新查询出来的第一条数据。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值