最近研究了一下MongoDB的使用,总结一下如何利用SpringMVC + MongoDB + Maven 搭建项目架构。


web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name>Archetype Created Web Application</display-name>
<!--spring上下文监听器-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-context.xml</param-value>
</context-param>
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Spring监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 防止Spring内存溢出监听器 -->
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>
<!-- springmvc控制转发器-->
<!-- 自定义servlet.xml配置文件的位置和名称,默认为WEB-INF目录下,名称为<servlet-name>+"-servlet.xml" -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:mvc-servlet.xml</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
?spring-context.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:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="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">
<!-- 启用spring mvc 内建的Jackson支持 -->
<!-- 设置json和response的字符编码 -->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter" />
<ref bean="stringHttpMessageConverter" />
<ref bean="jsonHttpMessageConverter" />
</list>
</property>
</bean>
<bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/plain;charset=UTF-8</value>
</list>
</property>
</bean>
<bean id="jsonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/plain;charset=UTF-8</value>
</list>
</property>
</bean>
<!-- 自动检测bean,启用spring mvc 注解@Autowired,@Resource,@Required等 <context:annotation-config /> 有了下面扫描配置后该项可以省掉-->
<context:component-scan base-package="com.luckypandadas">
<!-- 排除不扫描的 -->
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<context:annotation-config/>
<!-- <context:annotation-config />-->
<!-- 导入mongodb的配置文件 -->
<import resource="mongodb-context.xml"/>
</beans>
?mvc-servlet.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
<!-- p:viewClass="org.springframework.web.servlet.view.JstlView" -->
<!-- 将在Controller返回的ModelAndView,加上目录前缀/WEB-INF/views/, 文件名称后缀.jsp -->
<beans:bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<beans:property name="prefix" value="/WEB-INF/views/"/>
<beans:property name="suffix" value=".jsp"/>
</beans:bean>
<!-- 对静态资源文件的访问
<mvc:resources mapping="/resources/**" location="/WEB-INF/resources/" cache-period="31556926"/>
-->
</beans>
?mongodb的配置文件mongodb-context.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.0.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.0.xsd">
<!-- 加载mongodb的属性配置文件 -->
<context:property-placeholder location="classpath:config.properties" />
<!-- 定义mongo对象,对应的是mongodb官方jar包中的Mongo,replica-set设置集群副本的ip地址和端口 -->
<mongo:mongo id="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="${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的工厂,通过它来取得mongo实例,dbname为mongodb的数据库名,没有的话会自动创建 -->
<mongo:db-factory dbname="luckypandadas" mongo-ref="mongo" />
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg ref="mongo" />
<constructor-arg name="databaseName" value="luckypandadas" />
</bean>
<!-- 映射转换器,扫描back-package目录下的文件,根据注释,把它们作为mongodb的一个collection的映射 -->
<mongo:mapping-converter base-package="com.luckypandadas.model" />
<!-- mongodb bean的仓库目录,会自动扫描扩展了MongoRepository接口的接口进行注入 -->
<mongo:repositories base-package="com.luckypandadas" />
</beans>
?mongodb的属性配置文件config.properties
#mongoDB连接配置 mongo.hostport=127.0.0.1:27017 mongo.connectionsPerHost=8 mongo.threadsAllowedToBlockForConnectionMultiplier=4 #连接超时时间 mongo.connectTimeout=1000 #等待时间 mongo.maxWaitTime=1500 mongo.autoConnectRetry=true mongo.socketKeepAlive=true #Socket超时时间 mongo.socketTimeout=1500 mongo.slaveOk=true
?
package com.luckypandadas.dao;
import com.luckypandadas.common.base.IBaseDao;
import com.luckypandadas.common.base.PageVo;
import com.luckypandadas.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* Created by Innodev-E531 on 2015/12/23.
*/
@Repository
public class IUserDao implements IBaseDao<User> {
@Autowired
private MongoTemplate mongoTemplate;
/**
* 修改操作
*
* @param entity
* @throws Exception
* @author yadong.zhang
*/
@Override
public void update(User entity) throws Exception {
Query query = new Query();
query.addCriteria(new Criteria("telephone").is(entity.getTelephone()));
Update update = new Update();
update.set("telephone", entity.getTelephone());
update.set("email", entity.getEmail());
update.set("nickname", entity.getNickname());
update.set("lastLoginTime", entity.getLastLoginTime());
update.set("updateTime", entity.getUpdatedTime());
update.set("gender", entity.getGender());
update.set("picturePath", entity.getPicturePath());
this.mongoTemplate.updateFirst(query, update, User.class);
}
/**
* save函数根据参数条件,调用了insert或update函数:有则改之,无则加之
*
* @param entity
* @throws Exception
* @author yadong.zhang
*/
@Override
public void save(User entity) throws Exception {
this.mongoTemplate.save(entity);
}
/**
* insert的对象如果存在则不会修改之前的值,也不会重新增加
*
* @param entity
* @throws Exception
* @author yadong.zhang
*/
@Override
public void insert(User entity) throws Exception {
//save函数根据参数条件,调用了insert或update函数:有则改之,无则加之
this.mongoTemplate.insert(entity);
}
/**
* 根据手机获取单个
*
* @param tel
* @return
* @throws Exception
* @author yadong.zhang
*/
@Override
public User getByTel(String tel) throws Exception {
Query query = new Query();
query.addCriteria(new Criteria("telephone").is(tel));
return this.mongoTemplate.findOne(query, User.class);
}
/**
* 删除
*
* @param user
* @throws Exception
* @author yadong.zhang
*/
@Override
public void delete(User user) throws Exception {
this.mongoTemplate.remove(user);
}
}
注:这儿只测试增删改查
public User getUser(){
Date now = new Date();
User user = new User();
user.setTelephone("12322241");
user.setEmail("843977358@qq.com");
user.setNickname("七彩狼222");
user.setPassword("123456.");
user.setId("123413");
user.setStatus(Constants.STATUS_BLOCK);
user.setCreatedTime(now);
user.setUpdatedTime(now);
user.setLastLoginTime(now);
return user;
}
?注:以上为测试的被插入的一条记录

如何利用SpringMVC + MongoDB + Maven 搭建项目架构
原文:http://843977358.iteye.com/blog/2285154