使用spring連接及操作mongodb3.0實(shí)例
前邊有一篇記錄過(guò)不使用spring,直接在java代碼中連接和操作mongodb數(shù)據(jù)庫(kù),這里就緊隨其后記錄一下使用spring的情況下,在java中簡(jiǎn)單操作mongodb。
maven導(dǎo)包配置:
因?yàn)樯婕傲藄ping以及springmvc,因此也需要導(dǎo)入它們相關(guān)的包:
<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基礎(chǔ)配置:
主要是開(kāi)啟注解掃描等:
<?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"> <!-- 自動(dòng)掃描(自動(dòng)注入) --> <context:component-scan base-package="spring_mogo.dao.daoImp" /> <!-- 導(dǎo)入mongodb的配置文件 --> <import resource="spring-mongodb305.xml" /> <!-- 開(kāi)啟注解 --> <context:annotation-config /> </beans>
spring連接mongodb以及建立相關(guān)工廠的配置:
<?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數(shù)據(jù)庫(kù)的配置 --> <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" /> <!-- 只要使用這個(gè)調(diào)用相應(yīng)的方法操作 --> <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" /> </bean> </beans>
與數(shù)據(jù)庫(kù)對(duì)應(yīng)的實(shí)體類:
需要注意的是這里需要實(shí)現(xiàn)序列化的接口并設(shè)置uid的屬性,否則不能在操作中直接把數(shù)據(jù)庫(kù)返回結(jié)果轉(zhuǎn)換成對(duì)象屬性:
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; } }
根據(jù)spring配置獲取操作mongodb的MongoTemplete,需要實(shí)現(xiàn)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 根據(jù)配置文件設(shè)置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); } }
操作數(shù)據(jù)庫(kù)的接口以及對(duì)應(yīng)的實(shí)現(xiàn)類:
演示了最基礎(chǔ)的增刪改查,需要注意的地方在于參數(shù)的聲明以及接收返回?cái)?shù)據(jù)時(shí)和實(shí)體類的轉(zhuǎn)換:
(1)接口:
package spring_mogo.dao; import java.util.List; import spring_mongo.models.UserModel; public interface UserDao { /** * 查詢數(shù)據(jù) * * @author:tuzongxun * @Title: findAll * @param @return * @return List<UserModel> * @date May 13, 2016 3:07:39 PM * @throws */ public List<UserModel> findAll(); /** * 新增數(shù)據(jù) * * @author:tuzongxun * @Title: insertUser * @param @param user * @return void * @date May 13, 2016 3:09:45 PM * @throws */ public void insertUser(UserModel user); /** * 刪除數(shù)據(jù) * * @author:tuzongxun * @Title: removeUser * @param @param userName * @return void * @date May 13, 2016 3:09:55 PM * @throws */ public void removeUser(String userName); /** * 修改數(shù)據(jù) * * @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)實(shí)現(xiàn)類,這里要繼承AbstractBaseMongoTemplete類,從而獲得mongoTemplete進(jìn)行各種操作:
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 { /** * 查詢所有數(shù)據(jù) * * @author:tuzongxun * @Title: findAll * @Description: TODO * @param @return * @date May 13, 2016 3:10:29 PM * @throws */ @Override public List<UserModel> findAll() { // 需要設(shè)置集合對(duì)應(yīng)的尸體類和相應(yīng)的集合名,從而查詢結(jié)果直接映射 List<UserModel> userList = mongoTemplate.findAll(UserModel.class, "user"); return userList; } /** * 新增數(shù)據(jù) * * @author:tuzongxun * @Title: insertUser * @Description: TODO * @param @param user * @date May 13, 2016 3:10:45 PM * @throws */ @Override public void insertUser(UserModel user) { // 設(shè)置需要插入到數(shù)據(jù)庫(kù)的文檔對(duì)象 DBObject object = new BasicDBObject(); object.put("userName", user.getUserName()); object.put("password", user.getPassword()); mongoTemplate.insert(object, "user"); } /** * 按條件刪除數(shù)據(jù) * * @author:tuzongxun * @Title: removeUser * @Description: TODO * @param @param userName * @date May 13, 2016 3:11:01 PM * @throws */ @Override public void removeUser(String userName) { // 設(shè)置刪除條件,如果條件內(nèi)容為空則刪除所有 Query query = new Query(); Criteria criteria = new Criteria("userName"); criteria.is(userName); query.addCriteria(criteria); mongoTemplate.remove(query, "user"); } /** * 修改數(shù)據(jù) * * @author:tuzongxun * @Title: updateUser * @Description: TODO * @param @param user * @date May 13, 2016 3:11:12 PM * @throws */ @Override public void updateUser(UserModel user) { // 設(shè)置修改條件 Query query = new Query(); Criteria criteria = new Criteria("userName"); criteria.is(user.getUserName()); query.addCriteria(criteria); // 設(shè)置修改內(nèi)容 Update update = Update.update("password", user.getPassword()); // 參數(shù):查詢條件,更改結(jié)果,集合名 mongoTemplate.updateFirst(query, update, "user"); } /** * 根據(jù)條件查詢 * * @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); // 查詢條件,集合對(duì)應(yīng)的實(shí)體類,集合名 List<UserModel> userList = mongoTemplate.find(query, UserModel.class, "user"); return userList; } }
測(cè)試類:
為了驗(yàn)證以上代碼和配置的正確性,測(cè)試類代碼如下:
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; /** * 查詢測(cè)試 * * @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()); } } } /** * 插入數(shù)據(jù)測(cè)試 * * @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(); } /** * 刪除測(cè)試 * * @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(); } /** * 測(cè)試修改 * * @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()); } } } }
后期補(bǔ)上demo下載地址:demo
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- java Spring整合Freemarker的詳細(xì)步驟
- 實(shí)例講解Java的Spring框架中的AOP實(shí)現(xiàn)
- 詳解Java的Spring框架中的事務(wù)管理方式
- 詳解Java Spring各種依賴注入注解的區(qū)別
- spring實(shí)例化javabean的三種方式分享
- 最流行的java后臺(tái)框架spring quartz定時(shí)任務(wù)
- Spring security實(shí)現(xiàn)登陸和權(quán)限角色控制
- Spring security實(shí)現(xiàn)權(quán)限管理示例
- Java中SpringSecurity密碼錯(cuò)誤5次鎖定用戶的實(shí)現(xiàn)方法
- java中自定義Spring Security權(quán)限控制管理示例(實(shí)戰(zhàn)篇)
- 話說(shuō)Spring Security權(quán)限管理(源碼詳解)
- Java開(kāi)發(fā)之spring security實(shí)現(xiàn)基于MongoDB的認(rèn)證功能
相關(guān)文章
教你用Java實(shí)現(xiàn)一個(gè)簡(jiǎn)單的代碼生成器
今天給大家?guī)?lái)的是關(guān)于Java的相關(guān)知識(shí),文章圍繞著如何用Java實(shí)現(xiàn)一個(gè)簡(jiǎn)單的代碼生成器展開(kāi),文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06深入理解Java中Filter的作用種類及應(yīng)用場(chǎng)景
Filter(過(guò)濾器)是Java Web中的一種重要組件,可以對(duì)請(qǐng)求和響應(yīng)進(jìn)行攔截處理,對(duì)數(shù)據(jù)進(jìn)行過(guò)濾和處理。Filter可以實(shí)現(xiàn)許多功能,如:鑒權(quán)、日志記錄、字符編碼轉(zhuǎn)換、數(shù)據(jù)壓縮、請(qǐng)求重定向等等2023-04-04java map轉(zhuǎn)Multipart/form-data類型body實(shí)例
這篇文章主要介紹了java map轉(zhuǎn)Multipart/form-data類型body實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05Java和JVM的重載識(shí)別,重寫方法是怎樣進(jìn)行的
這篇文章主要介紹了Java和JVM的重載識(shí)別,重寫方法是怎樣進(jìn)行的,違章圍繞了Java和JVM的重載識(shí)別,重寫方法展開(kāi)相關(guān)資料,需要的小伙伴可以參考一下,希望對(duì)你的工作或?qū)W習(xí)有所幫助2022-01-01java截取字符串中的指定字符的兩種方法(以base64圖片為例)
本文介紹了使用Java截取字符串中指定字符的方法,通過(guò)substring索引和正則實(shí)現(xiàn),文章詳細(xì)介紹了實(shí)現(xiàn)步驟和示例代碼,對(duì)于想要了解如何使用Java截取字符串指定字符的讀者具有一定的參考價(jià)值2023-08-08servlet之cookie簡(jiǎn)介_(kāi)動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
Cookie技術(shù)誕生以來(lái),它就成了廣大網(wǎng)絡(luò)用戶和Web開(kāi)發(fā)人員爭(zhēng)論的一個(gè)焦點(diǎn)。下面這篇文章主要給大家介紹了關(guān)于servlet之cookie簡(jiǎn)介的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-07-07