zoukankan      html  css  js  c++  java
  • Mongdb和Spring的整合

    我自己的实现:

    代码:https://github.com/littlecarzz/spring-data-mongodb

    我使用的是spring-data-mongodb包,因为springboot注解和自动化配置,可以让我们少写很多配置文件,方便。

    1.首先引入依赖

    pom.xml

        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.12</version>
        </dependency>
        <dependency>
          <groupId>org.springframework.data</groupId>
          <artifactId>spring-data-mongodb</artifactId>
          <version>2.0.14.RELEASE</version>
        </dependency>
        <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-log4j12</artifactId>
          <version>1.7.12</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-web</artifactId>
          <version>5.1.7.RELEASE</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-webmvc</artifactId>
          <version>5.1.7.RELEASE</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-test</artifactId>
          <version>5.1.7.RELEASE</version>
        </dependency>
        <dependency>
          <groupId>org.projectlombok</groupId>
          <artifactId>lombok</artifactId>
          <version>1.18.6</version>
        </dependency>

    2.配置mongodb.properties

    这里主要是配置mongodb数据库的一些参数config

    #ip
    mongo.host=127.0.0.1
    #端口
    mongo.port=27017
    #数据库
    mongo.dbname=user
    #用户名
    mongo.username=cjj
    #密码
    mongo.password=123456
    #一个线程变为可用的最大阻塞数
    mongo.connectionsPerHost=8
    #线程队列数,它以上面connectionsPerHost值相乘的结果就是线程队列最大值
    mongo.threadsAllowedToBlockForConnectionMultiplier=4
    #连接超时时间(毫秒)
    mongo.connectTimeout=1000
    #最大等待时间
    mongo.maxWaitTime=1500
    #自动重连
    mongo.autoConnectRetry=true
    #scoket保持活动
    mongo.socketKeepAlive=true
    #scoket超时时间
    mongo.socketTimeout=1500
    #读写分离
    mongo.slaveOk=true

    3.配置mongodb.xml

    <?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:context="http://www.springframework.org/schema/context"
           xmlns:mongo="http://www.springframework.org/schema/data/mongo"
           xsi:schemaLocation="http://www.springframework.org/schema/context
              http://www.springframework.org/schema/context/spring-context-3.1.xsd
              http://www.springframework.org/schema/data/mongo
              http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd
              http://www.springframework.org/schema/beans
              http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
        <!-- 加载mongodb的属性配置文件 -->
        <context:property-placeholder location="classpath:mongodb.properties" ignore-unresolvable="true"/>
    
        <!-- 定义mongo对象,对应的是mongodb官方jar包中的Mongo,设置ip地址和端口 -->
        <mongo:mongo id="mongo" host="${mongo.host}" port="${mongo.port}">
            <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="${mongo.autoConnectRetry}"
                    socket-keep-alive="${mongo.socketKeepAlive}"
                    socket-timeout="${mongo.socketTimeout}"
                    slave-ok="${mongo.slaveOk}"
                    write-number="1"
                    write-timeout="0"
                    write-fsync="true"/>
        </mongo:mongo>
        <mongo:db-factory id="mgFactory"
                          dbname="${mongo.dbname}"
                          username="${mongo.username}"
                          password="${mongo.password}"
                          mongo-ref="mongo"/>
    
        <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
            <constructor-arg name="mongoDbFactory" ref="mgFactory"/>
        </bean>
    </beans>

    4.配置spring-context.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:tx="http://www.springframework.org/schema/tx"
           xmlns:aop="http://www.springframework.org/schema/aop"
           xmlns:task="http://www.springframework.org/schema/task"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.1.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
        http://www.springframework.org/schema/task
        http://www.springframework.org/schema/task/spring-task-3.1.xsd">
    
        <aop:aspectj-autoproxy proxy-target-class="true"/>
    
        <!--使用注解管理bean  -->
        <context:annotation-config/>
    
        <!-- 扫描com.example下的所有类 -->
        <context:component-scan base-package="com.example">
            <context:exclude-filter type = "annotation" expression = "org.springframework.stereotype.Controller"/>
        </context:component-scan>
    
        <import resource="mongoDB.xml"/>
    </beans>

    5.测试

    先创建实体类User

    import lombok.Data;
    import org.springframework.data.mongodb.core.mapping.Document;
    
    @Data
    @Document(collection="user")
    public class User {
        private String id;
        private String name;
        private String sex;
        private Integer age;
    }

    在创建MongoDBService获取MongoTemplate

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import org.springframework.data.mongodb.core.MongoTemplate;
    import org.springframework.data.mongodb.core.query.Query;
    import org.springframework.stereotype.Service;
    
    import javax.annotation.Resource;
    
    @Service("mongoDBService")
    public class MongoDBService {
        @Resource(name = "mongoTemplate")
        private MongoTemplate mongoTemplate;
        public <T> T findOne(Query query, Class<T> entityClass){
            ApplicationContext context=new ClassPathXmlApplicationContext("mongoDB.xml");
    //        MongoTemplate mongoTemplate= (MongoTemplate) context.getBean("mongoTemplate");
            // 可以直接调用
            return mongoTemplate.findOne(query, entityClass);
        }
    }

    然后创建UserService继承MongoDBService

    import com.example.entity.User;
    import org.springframework.data.mongodb.core.query.Criteria;
    import org.springframework.data.mongodb.core.query.Query;
    import org.springframework.stereotype.Service;
    
    @Service
    public class UserService extends MongoDBService {
    
        public User findUserByName(String name){
            Criteria criteria = new Criteria();
            criteria.andOperator(Criteria.where("name").is("cjj"));
            Query query = new Query(criteria);
            return findOne(query, User.class);
        }
    }

    最后测试

    import com.example.entity.User;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    
    import javax.annotation.Resource;
    @ContextConfiguration({ "classpath:spring-context.xml",
            "classpath:mongoDB.xml"})
    @RunWith(SpringJUnit4ClassRunner.class)
    public class UserServiceTest {
        @Resource(name = "userService")
        private UserService userService;
        @Test
        public void test(){
            User user = userService.findUserByName("cjj");
            System.out.println(user);
        }
    }

    其他实现:

    参考:https://blog.csdn.net/feinifi/article/details/83752862

  • 相关阅读:
    EF之DataBase添加新字段
    VS 发布MVC网站缺少视图
    解决IE下打印iframe时,页面比例变小的问题
    DataTable求列的最大值、最小值、平均值和样本数
    js的splice和delete
    js获取对象的属性个数
    placeholder
    prompt
    依赖注入
    highcharts离线导出图表
  • 原文地址:https://www.cnblogs.com/xc-chejj/p/10933932.html
Copyright © 2011-2022 走看看