使用spring連接及操作mongodb3.0實例
前邊有一篇記錄過不使用spring,直接在java代碼中連接和操作mongodb數據庫,這里就緊隨其后記錄一下使用spring的情況下,在java中簡單操作mongodb。
maven導包配置:
因為涉及了sping以及springmvc,因此也需要導入它們相關的包:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>spring_mongo</groupId>
<artifactId>spring_mongo</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>spring_mongo Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>1.8.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.0.9.RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
<compilerArguments>
<verbose />
<bootclasspath>${java.home}/lib/rt.jar;${java.home}/lib/jce.jar</bootclasspath>
</compilerArguments>
</configuration>
</plugin>
</plugins>
<finalName>spring_mongo</finalName>
</build>
</project>
spring基礎配置:
主要是開啟注解掃描等:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:task="http://www.springframework.org/schema/task" xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-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/task http://www.springframework.org/schema/task/spring-task-3.1.xsd"> <!-- 自動掃描(自動注入) --> <context:component-scan base-package="spring_mogo.dao.daoImp" /> <!-- 導入mongodb的配置文件 --> <import resource="spring-mongodb305.xml" /> <!-- 開啟注解 --> <context:annotation-config /> </beans>
spring連接mongodb以及建立相關工廠的配置:
<?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:p="http://www.springframework.org/schema/p"
xmlns:mongo="http://www.springframework.org/schema/data/mongo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/data/mongo
http://www.springframework.org/schema/data/mongo/spring-mongo.xsd">
<!-- spring連接mongodb數據庫的配置 -->
<mongo:mongo-client host="192.168.0.201" port="27017" credentials="tuzongxun:123456@mongoTest" id="mongo">
<mongo:client-options write-concern="SAFE"/>
</mongo:mongo-client>
<mongo:db-factory id="mongoDbFactory" dbname="mongoTest" mongo-ref="mongo" />
<!-- 只要使用這個調用相應的方法操作 -->
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
</bean>
</beans>
與數據庫對應的實體類:
需要注意的是這里需要實現序列化的接口并設置uid的屬性,否則不能在操作中直接把數據庫返回結果轉換成對象屬性:
package spring_mongo.models;
import java.io.Serializable;
public class UserModel implements Serializable {
private static final long serialVersionUID = 1L;
private String userName;
private String password;
public UserModel(String userName, String password) {
super();
this.userName = userName;
this.password = password;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
根據spring配置獲取操作mongodb的MongoTemplete,需要實現ApplicationContextAware接口:
package spring_mogo.dao.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);
}
}
操作數據庫的接口以及對應的實現類:
演示了最基礎的增刪改查,需要注意的地方在于參數的聲明以及接收返回數據時和實體類的轉換:
(1)接口:
package spring_mogo.dao;
import java.util.List;
import spring_mongo.models.UserModel;
public interface UserDao {
/**
* 查詢數據
*
* @author:tuzongxun
* @Title: findAll
* @param @return
* @return List<UserModel>
* @date May 13, 2016 3:07:39 PM
* @throws
*/
public List<UserModel> findAll();
/**
* 新增數據
*
* @author:tuzongxun
* @Title: insertUser
* @param @param user
* @return void
* @date May 13, 2016 3:09:45 PM
* @throws
*/
public void insertUser(UserModel user);
/**
* 刪除數據
*
* @author:tuzongxun
* @Title: removeUser
* @param @param userName
* @return void
* @date May 13, 2016 3:09:55 PM
* @throws
*/
public void removeUser(String userName);
/**
* 修改數據
*
* @author:tuzongxun
* @Title: updateUser
* @param @param user
* @return void
* @date May 13, 2016 3:10:06 PM
* @throws
*/
public void updateUser(UserModel user);
/**
* 按條件查詢
*
* @author:tuzongxun
* @Title: findForRequery
* @param
* @return void
* @date May 13, 2016 3:23:37 PM
* @throws
*/
public List<UserModel> findForRequery(String userName);
}
(2)實現類,這里要繼承AbstractBaseMongoTemplete類,從而獲得mongoTemplete進行各種操作:
package spring_mogo.dao.daoImp;
import java.util.List;
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.Component;
import spring_mogo.dao.UserDao;
import spring_mongo.models.UserModel;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
@Component("UserDaoImp")
public class UserDaoImp extends AbstractBaseMongoTemplete implements UserDao {
/**
* 查詢所有數據
*
* @author:tuzongxun
* @Title: findAll
* @Description: TODO
* @param @return
* @date May 13, 2016 3:10:29 PM
* @throws
*/
@Override
public List<UserModel> findAll() {
// 需要設置集合對應的尸體類和相應的集合名,從而查詢結果直接映射
List<UserModel> userList = mongoTemplate.findAll(UserModel.class,
"user");
return userList;
}
/**
* 新增數據
*
* @author:tuzongxun
* @Title: insertUser
* @Description: TODO
* @param @param user
* @date May 13, 2016 3:10:45 PM
* @throws
*/
@Override
public void insertUser(UserModel user) {
// 設置需要插入到數據庫的文檔對象
DBObject object = new BasicDBObject();
object.put("userName", user.getUserName());
object.put("password", user.getPassword());
mongoTemplate.insert(object, "user");
}
/**
* 按條件刪除數據
*
* @author:tuzongxun
* @Title: removeUser
* @Description: TODO
* @param @param userName
* @date May 13, 2016 3:11:01 PM
* @throws
*/
@Override
public void removeUser(String userName) {
// 設置刪除條件,如果條件內容為空則刪除所有
Query query = new Query();
Criteria criteria = new Criteria("userName");
criteria.is(userName);
query.addCriteria(criteria);
mongoTemplate.remove(query, "user");
}
/**
* 修改數據
*
* @author:tuzongxun
* @Title: updateUser
* @Description: TODO
* @param @param user
* @date May 13, 2016 3:11:12 PM
* @throws
*/
@Override
public void updateUser(UserModel user) {
// 設置修改條件
Query query = new Query();
Criteria criteria = new Criteria("userName");
criteria.is(user.getUserName());
query.addCriteria(criteria);
// 設置修改內容
Update update = Update.update("password", user.getPassword());
// 參數:查詢條件,更改結果,集合名
mongoTemplate.updateFirst(query, update, "user");
}
/**
* 根據條件查詢
*
* @author:tuzongxun
* @Title: findForRequery
* @Description: TODO
* @param @param userName
* @date May 13, 2016 4:08:15 PM
* @throws
*/
@Override
public List<UserModel> findForRequery(String userName) {
Query query = new Query();
Criteria criteria = new Criteria("userName");
criteria.is(userName);
query.addCriteria(criteria);
// 查詢條件,集合對應的實體類,集合名
List<UserModel> userList = mongoTemplate.find(query, UserModel.class,
"user");
return userList;
}
}
測試類:
為了驗證以上代碼和配置的正確性,測試類代碼如下:
package spring_mongo.test;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import spring_mogo.dao.UserDao;
import spring_mongo.models.UserModel;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:spring.xml" })
public class mongoTest {
@Autowired
private UserDao userDao;
/**
* 查詢測試
*
* @author:tuzongxun
* @Title: monFindTest
* @param
* @return void
* @date May 13, 2016 3:27:51 PM
* @throws
*/
@Test
public void monFindTest() {
List<UserModel> userModels = userDao.findAll();
if (userModels != null && userModels.size() > 0) {
for (UserModel user : userModels) {
System.out.println(user.getUserName() + ":"
+ user.getPassword());
}
}
}
/**
* 插入數據測試
*
* @author:tuzongxun
* @Title: monInsertTest
* @param
* @return void
* @date May 13, 2016 3:27:38 PM
* @throws
*/
@Test
public void monInsertTest() {
UserModel user = new UserModel("test111", "123456");
userDao.insertUser(user);
this.monFindTest();
}
/**
* 刪除測試
*
* @author:tuzongxun
* @Title: monRemoveTest
* @param
* @return void
* @date May 13, 2016 3:28:06 PM
* @throws
*/
@Test
public void monRemoveTest() {
String userName = "test111";
userDao.removeUser(userName);
this.monFindTest();
}
/**
* 測試修改
*
* @author:tuzongxun
* @Title: monUpdateTest
* @param
* @return void
* @date May 13, 2016 3:50:08 PM
* @throws
*/
@Test
public void monUpdateTest() {
UserModel user = new UserModel("test111", "test");
userDao.updateUser(user);
this.monFindTest();
}
/**
* 按條件查詢
*
* @author:tuzongxun
* @Title: monFindForRuq
* @param
* @return void
* @date May 13, 2016 4:10:53 PM
* @throws
*/
@Test
public void monFindForRuq() {
String userName = "test111";
List<UserModel> userModels = userDao.findForRequery(userName);
if (userModels != null && userModels.size() > 0) {
for (UserModel user : userModels) {
System.out.println(user.getUserName() + ":"
+ user.getPassword());
}
}
}
}
后期補上demo下載地址:demo
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- java Spring整合Freemarker的詳細步驟
- 實例講解Java的Spring框架中的AOP實現
- 詳解Java的Spring框架中的事務管理方式
- 詳解Java Spring各種依賴注入注解的區(qū)別
- spring實例化javabean的三種方式分享
- 最流行的java后臺框架spring quartz定時任務
- Spring security實現登陸和權限角色控制
- Spring security實現權限管理示例
- Java中SpringSecurity密碼錯誤5次鎖定用戶的實現方法
- java中自定義Spring Security權限控制管理示例(實戰(zhàn)篇)
- 話說Spring Security權限管理(源碼詳解)
- Java開發(fā)之spring security實現基于MongoDB的認證功能
相關文章
java map轉Multipart/form-data類型body實例
這篇文章主要介紹了java map轉Multipart/form-data類型body實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05
java截取字符串中的指定字符的兩種方法(以base64圖片為例)
本文介紹了使用Java截取字符串中指定字符的方法,通過substring索引和正則實現,文章詳細介紹了實現步驟和示例代碼,對于想要了解如何使用Java截取字符串指定字符的讀者具有一定的參考價值2023-08-08
servlet之cookie簡介_動力節(jié)點Java學院整理
Cookie技術誕生以來,它就成了廣大網絡用戶和Web開發(fā)人員爭論的一個焦點。下面這篇文章主要給大家介紹了關于servlet之cookie簡介的相關資料,文中介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。2017-07-07

