使用spring连接及操作mongodb3.0实例
前边有一篇记录过不使用spring,直接在java代码中连接和操作mongodb数据库,这里就紧随其后记录一下使用spring的情况下,在java中简单操作mongodb。
maven导包配置:
因为涉及了sping以及springmvc,因此也需要导入它们相关的包:
<projectxmlns="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.0http://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_mongoMavenWebapp</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基础配置:
主要是开启注解扫描等:
<?xmlversion="1.0"encoding="UTF-8"?> <beansxmlns: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-scanbase-package="spring_mogo.dao.daoImp"/> <!--导入mongodb的配置文件--> <importresource="spring-mongodb305.xml"/> <!--开启注解--> <context:annotation-config/> </beans>
spring连接mongodb以及建立相关工厂的配置:
<?xmlversion="1.0"encoding="UTF-8"?> <beansxmlns="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-clienthost="192.168.0.201"port="27017"credentials="tuzongxun:123456@mongoTest"id="mongo"> <mongo:client-optionswrite-concern="SAFE"/> </mongo:mongo-client> <mongo:db-factoryid="mongoDbFactory"dbname="mongoTest"mongo-ref="mongo"/> <!--只要使用这个调用相应的方法操作--> <beanid="mongoTemplate"class="org.springframework.data.mongodb.core.MongoTemplate"> <constructor-argname="mongoDbFactory"ref="mongoDbFactory"/> </bean> </beans>
与数据库对应的实体类:
需要注意的是这里需要实现序列化的接口并设置uid的属性,否则不能在操作中直接把数据库返回结果转换成对象属性:
packagespring_mongo.models; importjava.io.Serializable; publicclassUserModelimplementsSerializable{ privatestaticfinallongserialVersionUID=1L; privateStringuserName; privateStringpassword; publicUserModel(StringuserName,Stringpassword){ super(); this.userName=userName; this.password=password; } publicStringgetUserName(){ returnuserName; } publicvoidsetUserName(StringuserName){ this.userName=userName; } publicStringgetPassword(){ returnpassword; } publicvoidsetPassword(Stringpassword){ this.password=password; } }
根据spring配置获取操作mongodb的MongoTemplete,需要实现ApplicationContextAware接口:
packagespring_mogo.dao.daoImp; importorg.springframework.beans.BeansException; importorg.springframework.context.ApplicationContext; importorg.springframework.context.ApplicationContextAware; importorg.springframework.data.mongodb.core.MongoTemplate; publicabstractclassAbstractBaseMongoTempleteimplements ApplicationContextAware{ protectedMongoTemplatemongoTemplate; /** *@Description根据配置文件设置mongoTemplate *@parammongoTemplate */ publicvoidsetMongoTemplate(MongoTemplatemongoTemplate){ this.mongoTemplate=mongoTemplate; } @Override publicvoidsetApplicationContext(ApplicationContextapplicationContext) throwsBeansException{ MongoTemplatemongoTemplate=applicationContext.getBean( "mongoTemplate",MongoTemplate.class); setMongoTemplate(mongoTemplate); } }
操作数据库的接口以及对应的实现类:
演示了最基础的增删改查,需要注意的地方在于参数的声明以及接收返回数据时和实体类的转换:
(1)接口:
packagespring_mogo.dao; importjava.util.List; importspring_mongo.models.UserModel; publicinterfaceUserDao{ /** *查询数据 * *@author:tuzongxun *@Title:findAll *@param@return *@returnList<UserModel> *@dateMay13,20163:07:39PM *@throws */ publicList<UserModel>findAll(); /** *新增数据 * *@author:tuzongxun *@Title:insertUser *@param@paramuser *@returnvoid *@dateMay13,20163:09:45PM *@throws */ publicvoidinsertUser(UserModeluser); /** *删除数据 * *@author:tuzongxun *@Title:removeUser *@param@paramuserName *@returnvoid *@dateMay13,20163:09:55PM *@throws */ publicvoidremoveUser(StringuserName); /** *修改数据 * *@author:tuzongxun *@Title:updateUser *@param@paramuser *@returnvoid *@dateMay13,20163:10:06PM *@throws */ publicvoidupdateUser(UserModeluser); /** *按条件查询 * *@author:tuzongxun *@Title:findForRequery *@param *@returnvoid *@dateMay13,20163:23:37PM *@throws */ publicList<UserModel>findForRequery(StringuserName); }
(2)实现类,这里要继承AbstractBaseMongoTemplete类,从而获得mongoTemplete进行各种操作:
packagespring_mogo.dao.daoImp; importjava.util.List; importorg.springframework.data.mongodb.core.query.Criteria; importorg.springframework.data.mongodb.core.query.Query; importorg.springframework.data.mongodb.core.query.Update; importorg.springframework.stereotype.Component; importspring_mogo.dao.UserDao; importspring_mongo.models.UserModel; importcom.mongodb.BasicDBObject; importcom.mongodb.DBObject; @Component("UserDaoImp") publicclassUserDaoImpextendsAbstractBaseMongoTempleteimplementsUserDao{ /** *查询所有数据 * *@author:tuzongxun *@Title:findAll *@Description:TODO *@param@return *@dateMay13,20163:10:29PM *@throws */ @Override publicList<UserModel>findAll(){ //需要设置集合对应的尸体类和相应的集合名,从而查询结果直接映射 List<UserModel>userList=mongoTemplate.findAll(UserModel.class, "user"); returnuserList; } /** *新增数据 * *@author:tuzongxun *@Title:insertUser *@Description:TODO *@param@paramuser *@dateMay13,20163:10:45PM *@throws */ @Override publicvoidinsertUser(UserModeluser){ //设置需要插入到数据库的文档对象 DBObjectobject=newBasicDBObject(); object.put("userName",user.getUserName()); object.put("password",user.getPassword()); mongoTemplate.insert(object,"user"); } /** *按条件删除数据 * *@author:tuzongxun *@Title:removeUser *@Description:TODO *@param@paramuserName *@dateMay13,20163:11:01PM *@throws */ @Override publicvoidremoveUser(StringuserName){ //设置删除条件,如果条件内容为空则删除所有 Queryquery=newQuery(); Criteriacriteria=newCriteria("userName"); criteria.is(userName); query.addCriteria(criteria); mongoTemplate.remove(query,"user"); } /** *修改数据 * *@author:tuzongxun *@Title:updateUser *@Description:TODO *@param@paramuser *@dateMay13,20163:11:12PM *@throws */ @Override publicvoidupdateUser(UserModeluser){ //设置修改条件 Queryquery=newQuery(); Criteriacriteria=newCriteria("userName"); criteria.is(user.getUserName()); query.addCriteria(criteria); //设置修改内容 Updateupdate=Update.update("password",user.getPassword()); //参数:查询条件,更改结果,集合名 mongoTemplate.updateFirst(query,update,"user"); } /** *根据条件查询 * *@author:tuzongxun *@Title:findForRequery *@Description:TODO *@param@paramuserName *@dateMay13,20164:08:15PM *@throws */ @Override publicList<UserModel>findForRequery(StringuserName){ Queryquery=newQuery(); Criteriacriteria=newCriteria("userName"); criteria.is(userName); query.addCriteria(criteria); //查询条件,集合对应的实体类,集合名 List<UserModel>userList=mongoTemplate.find(query,UserModel.class, "user"); returnuserList; } }
测试类:
为了验证以上代码和配置的正确性,测试类代码如下:
packagespring_mongo.test; importjava.util.List; importorg.junit.Test; importorg.junit.runner.RunWith; importorg.springframework.beans.factory.annotation.Autowired; importorg.springframework.test.context.ContextConfiguration; importorg.springframework.test.context.junit4.SpringJUnit4ClassRunner; importspring_mogo.dao.UserDao; importspring_mongo.models.UserModel; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations={"classpath:spring.xml"}) publicclassmongoTest{ @Autowired privateUserDaouserDao; /** *查询测试 * *@author:tuzongxun *@Title:monFindTest *@param *@returnvoid *@dateMay13,20163:27:51PM *@throws */ @Test publicvoidmonFindTest(){ List<UserModel>userModels=userDao.findAll(); if(userModels!=null&&userModels.size()>0){ for(UserModeluser:userModels){ System.out.println(user.getUserName()+":" +user.getPassword()); } } } /** *插入数据测试 * *@author:tuzongxun *@Title:monInsertTest *@param *@returnvoid *@dateMay13,20163:27:38PM *@throws */ @Test publicvoidmonInsertTest(){ UserModeluser=newUserModel("test111","123456"); userDao.insertUser(user); this.monFindTest(); } /** *删除测试 * *@author:tuzongxun *@Title:monRemoveTest *@param *@returnvoid *@dateMay13,20163:28:06PM *@throws */ @Test publicvoidmonRemoveTest(){ StringuserName="test111"; userDao.removeUser(userName); this.monFindTest(); } /** *测试修改 * *@author:tuzongxun *@Title:monUpdateTest *@param *@returnvoid *@dateMay13,20163:50:08PM *@throws */ @Test publicvoidmonUpdateTest(){ UserModeluser=newUserModel("test111","test"); userDao.updateUser(user); this.monFindTest(); } /** *按条件查询 * *@author:tuzongxun *@Title:monFindForRuq *@param *@returnvoid *@dateMay13,20164:10:53PM *@throws */ @Test publicvoidmonFindForRuq(){ StringuserName="test111"; List<UserModel>userModels=userDao.findForRequery(userName); if(userModels!=null&&userModels.size()>0){ for(UserModeluser:userModels){ System.out.println(user.getUserName()+":" +user.getPassword()); } } } }
后期补上demo下载地址:demo
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。