javaWeb项目中集成MongoDB-3.x数据库

1、说明

1.能够知道的是mongodb2.x和3.x置是不一样的。java

2.这里只说明须要权限验证的配置web

3.最好spring 4.2.6以上吧(反正我这样完成的配置测试修改 须要4.2.6版本)+MongoDB 3.2.13 其余的版本不清楚。spring

4.具体jar 很少说 版本如图 驱动3.2.1 ----spring支持mongodb 包1.10mongodb

输入图片说明

2、配置

1.spring-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:mongo="http://www.springframework.org/schema/data/mongo"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo-1.10.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> 
        <!-- 定义mongo对象,对应的是mongodb官方jar包中的Mongo, --> <!-- MongoClient -->
    <bean id="mongoClient" class="com.mongodb.MongoClient">
        <constructor-arg name="credentialsList">
            <list> 
            <!-- Credentials -->
                <bean class="com.mongodb.MongoCredential">
                    <constructor-arg name="mechanism" value="#{T(com.mongodb.AuthenticationMechanism).SCRAM_SHA_1}"/>
                    <constructor-arg type="java.lang.String" name="userName" value="xxxx"/>
                    <constructor-arg type="java.lang.String" name="source" value="xxxx"/>
                    <constructor-arg type="char[]" name="password" value="xxxx"/>
                </bean>
            </list>
        </constructor-arg>
        <constructor-arg name="seeds">
            <list>
                <bean class="com.mongodb.ServerAddress">
                    <constructor-arg type="java.lang.String" name="host" value="127.0.0.1"/>
                    <constructor-arg type="int" name="port" value="27017"/>
                </bean>
<!--                 <bean class="com.mongodb.ServerAddress"> -->
<!--                     <constructor-arg type="java.lang.String" name="host" value="${mongo.sharded_clusters2.host}"/> -->
<!--                     <constructor-arg type="int" name="port" value="${mongo.sharded_clusters2.port}"/> -->
<!--                 </bean> -->
<!--                 <bean class="com.mongodb.ServerAddress"> -->
<!--                     <constructor-arg type="java.lang.String" name="host" value="${mongo.sharded_clusters2.host}"/> -->
<!--                     <constructor-arg type="int" name="port" value="${mongo.sharded_clusters3.port}"/> -->
<!--                 </bean> -->
            </list>
        </constructor-arg>
    </bean> <!-- MongoDbFactory -->
    <bean id="simpleMongoDbFactoryID" class="org.springframework.data.mongodb.core.SimpleMongoDbFactory">
        <constructor-arg ref="mongoClient"/>
        <constructor-arg name="databaseName" value="xxxx"/>
    </bean> <!-- MongoTemplate -->
    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
        <constructor-arg ref="simpleMongoDbFactoryID"/>
    </bean>
</beans>

还查到一种配置express

<?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"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/context   
          http://www.springframework.org/schema/context/spring-context-3.0.xsd   
          http://www.springframework.org/schema/data/mongo   
          http://www.springframework.org/schema/data/mongo/spring-mongo.xsd
          http://www.springframework.org/schema/aop 
          http://www.springframework.org/schema/aop/spring-aop-3.0.xsd  
          http://www.springframework.org/schema/beans   
          http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
          http://www.springframework.org/schema/data/repository
http://www.springframework.org/schema/data/repository/spring-repository-1.5.xsd">

    <!-- 加载mongodb的属性配置文件 -->
<!--     <context:property-placeholder location="classpath:mongo.properties" /> -->

    <!-- 定义mongo对象,对应的是mongodb官方jar包中的Mongo,replica-set设置集群副本的ip地址和端口 -->
<!--     
    <mongo:mongo id="mongo" host="${mongo.host}" port="${mongo.port}" >
    
    <mongo:client-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> 
    -->
<!--    咱们使用的mongodb的版本是3.X,因此在构造这段话的时候要根据 Mongo类的构造函数来构造,不一样版本可能会形成构造函数的不一样 -->
    <mongo:mongo-client id="mongo" host="127.0.0.1" port="27017" credentials="chen:chen@patient">
    
        <mongo:client-options 
        connections-per-host="8" 
        threads-allowed-to-block-for-connection-multiplier="4" 
        connect-timeout=" 1500" 
        max-wait-time=" 1500" 
        socket-keep-alive="true" 
        socket-timeout=" 1500"        
       /> 
    </mongo:mongo-client>

    <!-- 用户验证 -->
    <bean id="userCredentials" class="org.springframework.data.authentication.UserCredentials">
        <constructor-arg name="username" value="chen" />
        <constructor-arg name="password" value="chen" />
    </bean>
    <!-- mongo的工厂,经过它来取得mongo实例,dbname为mongodb的数据库名,没有的话会自动建立 -->
    <bean id="mongoDbFactory"
        class="org.springframework.data.mongodb.core.SimpleMongoDbFactory">
        <constructor-arg ref="mongo" />
        <constructor-arg value="patient" />
        <!-- <constructor-arg ref="userCredentials" /> -->
    </bean>

    <bean id="mappingContext"
        class="org.springframework.data.mongodb.core.mapping.MongoMappingContext" />

    <bean id="defaultMongoTypeMapper"
        class="org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper">
        <constructor-arg name="typeKey">
            <null />
        </constructor-arg>
    </bean>

    <!-- collection的映射 -->
    <bean id="mappingMongoConverter"
        class="org.springframework.data.mongodb.core.convert.MappingMongoConverter">
        <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
        <constructor-arg name="mappingContext" ref="mappingContext" />
        <property name="typeMapper" ref="defaultMongoTypeMapper" />
    </bean>

    <!-- mongodb的主要操做对象,全部对mongodb的增删改查的操做都是经过它完成 -->
    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
        <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
        <constructor-arg name="mongoConverter" ref="mappingMongoConverter" />
    </bean>
<!--     <bean id="dao" class="com.wanliyun.mongoDao.daoImp"/> -->
<!--     mongodb事务 -->
<!--     <bean id="audience" class="cn.com.bluemoon.mongodb.aop.Audience"/> -->

<!--     <aop:config proxy-target-class="true"> -->
<!--         <aop:aspect ref="audience"> -->
<!--             <aop:pointcut id="performance" expression="execution(* cn.com.mongodb.service.impl.*.*(..))"/> -->
            
<!--             <aop:before pointcut-ref="performance" method="takeSeats"/> -->
<!--             <aop:before pointcut-ref="performance" method="turnOffCellPhones"/> -->
<!--             <aop:around pointcut-ref="performance" method="around"/> -->
<!--             <aop:after-returning pointcut-ref="performance" method="applaud"/> -->
<!--             <aop:after-throwing pointcut-ref="performance" method="demandRefund"/> -->
<!--             <aop:after pointcut-ref="performance" method="after"/> -->
<!--         </aop:aspect> -->
<!--     </aop:config> -->
</beans>

2.springMVC-context.xmlspring-mvc

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/mvc
		http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-3.0.xsd
		http://www.springframework.org/schema/beans
		http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
	<!-- 注解扫描包 扫描com.zhcv包以及子包下注解为 Controller Service Repository Compotent的类 -->
	<context:component-scan base-package="com.xxxx.controller" />
<!-- 管理mongodbDao-->
 	 <context:component-scan base-package="com.xxxx.mongoDao.daoImp"/>
	<!-- 开启注解 -->
	<mvc:annotation-driven />
	<!-- 定义视图解析器, "/" 默认放在WebRoot下 -->
	<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
		<property name="prefix" value="/page/" />
		<property name="suffix" value=".jsp"></property>
	</bean>
	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="maxUploadSize" value="10485760" />
	</bean>
	  <!-- 加载mongodb配置-->
	<import resource="spring-mongodb.xml" />
</beans>

3、java 工具类+流程代码

1.mongodb操做模板MongoTemplate 在服务启动,spring-mongodb.xml加载时加载模板mvc

package com.xxxx.mongoDao.daoImp;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.data.mongodb.core.MongoTemplate;

public abstract class AbstractBaseMongoTemplete implements ApplicationContextAware {

	protected MongoTemplate mongoTemplate;

	/**
	 * @Description 根据配置文件设置mongoTemplate
	 * @param mongoTemplate
	 */
	public void setMongoTemplate(MongoTemplate mongoTemplate) {
		this.mongoTemplate = mongoTemplate;
	}

	@Override
	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
		MongoTemplate mongoTemplate = applicationContext.getBean("mongoTemplate", MongoTemplate.class);
		setMongoTemplate(mongoTemplate);
		System.out.println("mongoTemplate===" + mongoTemplate);
	}
}

2.java实体--对应---Mongodb 中collection(table/集合)app

import java.io.Serializable;

public class UserModel implements Serializable {

	private static final long serialVersionUID = 1L;
	private String name;
	private int age;

	public UserModel(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return "UserModel [name=" + name + ", age=" + age + "]";
	}

}

3.Dao层接口UserDaosocket

import java.util.List;

import com.mongodb.BasicDBList;
import com.mongodb.DBObject;


public interface UserDao {
	/**
	 * 查询全部
	 * 
	 * @author lennon
	 * @return
	 * @time 2017-5-24 下午4:18:55
	 * @version
	 */
	public List<UserModel> findAll();

	/**
	 * 新增数据
	 * 
	 * @author lennon
	 * @param user
	 * @time 2017-5-24 下午4:19:08
	 * @version
	 */
	public void insertUser(UserModel user);

	/**
	 * 删除数据
	 * 
	 * @author lennon
	 * @param userName
	 * @time 2017-5-24 下午4:19:17
	 * @version
	 */
	public void removeUser(String userName);

	/**
	 * 修改数据
	 * 
	 * @author lennon
	 * @param user
	 * @time 2017-5-24 下午4:19:25
	 * @version
	 */
	public void updateUser(UserModel user);

	/**
	 * 按条件查询
	 * 
	 * @author lennon
	 * @param userName
	 * @return
	 * @time 2017-5-24 下午4:19:32
	 * @version
	 */
	public List<UserModel> findForRequery(String userName);

	/**
	 * mongodb简单的分组查询
	 * 
	 * @author lennon
	 * @return
	 * @time 2017-5-24 下午4:19:41
	 * @version
	 */
	public BasicDBList mongoGroup();

	public void saveData(DBObject obj);

}

接口实现类UserDaoImp** 注意(注解),具体实现还有待完善,也没有彻底明白**

@Component("UserDaoImp")
public class UserDaoImp extends AbstractBaseMongoTemplete implements UserDao {

	@Override
	public List<UserModel> findAll() {
		// 须要设置集合对应的尸体类和相应的集合名,从而查询结果直接映射
		System.out.println("mongoTemplate==" + mongoTemplate);
		List<UserModel> userList = mongoTemplate.findAll(UserModel.class, "user");
		return userList;
	}

	@Override
	public void insertUser(UserModel user) {
		// 设置须要插入到数据库的文档对象
		DBObject object = new BasicDBObject();
		object.put("name", user.getName());
		object.put("age", user.getAge());
		mongoTemplate.insert(object, "user");
	}

	@Override
	public void removeUser(String userName) {
		// 设置删除条件,若是条件内容为空则删除全部
		Query query = new Query();
		Criteria criteria = new Criteria("name");
		criteria.is(userName);
		query.addCriteria(criteria);
		mongoTemplate.remove(query, "user");
	}

	@Override
	public void updateUser(UserModel user) {
		// 设置修改条件
		Query query = new Query();
		Criteria criteria = new Criteria("name");
		criteria.is(user.getName());
		query.addCriteria(criteria);
		// 设置修改内容
		Update update = Update.update("age", user.getAge());
		// 参数:查询条件,更改结果,集合名
		mongoTemplate.updateFirst(query, update, "user");
	}

	@Override
	public List<UserModel> findForRequery(String userName) {
		Query query = new Query();
		Criteria criteria = new Criteria("name");
		criteria.regex(".*?" + "a" + ".*");
		// criteria.is(userName);
		// Pattern pattern = Pattern.compile("^.*a.*$",
		// Pattern.CASE_INSENSITIVE);
		// DBObject object = new BasicDBObject();
		// object.put("name", pattern);
		// criteria.is(object);
		// criteria.
		// query.addCriteria(criteria);
		// mongoTemplate.find(new Query(new Criteria(
		// "name").regex(".*?"+"张"+".*")).limit(9), User.class);
		// 查询条件,集合对应的实体类,集合名
		query.addCriteria(criteria);
		List<UserModel> userList = mongoTemplate.find(query, UserModel.class, userName);
		return userList;
	}

	@Override
	public BasicDBList mongoGroup() {
		// TODO Auto-generated method stub
		GroupBy groupBy = GroupBy.key("age").initialDocument("{count:0}").reduceFunction("function(doc, out){out.count++}").finalizeFunction("function(out){return out;}");
		GroupByResults<UserModel> res = mongoTemplate.group("test", groupBy, UserModel.class);
		DBObject obj = res.getRawResults();
		BasicDBList dbList = (BasicDBList) obj.get("retval");
		return dbList;
	}

	@Override
	public void saveData(DBObject obj) {
		mongoTemplate.save(obj, "test");
	}

}

4.controller 实现调用

/**
 * @author lennon
 * 
 */
@Controller
public class MongoDb {
	@Autowired
	private UserDao userDao;
	
	@RequestMapping(value = "setMongo")
	public void setMongo(HttpServletRequest request, HttpServletResponse response) {
		// userDao.findAll();
		UserModel user = new UserModel("皇帝1", 10000);
		
		userDao.insertUser(user);
	}
}

该例子只实现了 编译运行 简单操做没问题 作到对使用mongodb的了解,之后还要慢慢深刻

相关文章
相关标签/搜索