spring連線mongodb實現增刪改查
阿新 • • 發佈:2018-12-14
applicationContext.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:mvc="http://www.springframework.org/schema/mvc" xmlns:mongo="http://www.springframework.org/schema/data/mongo" xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo.xsd"> <!-- <context:property-placeholder location="classpath:/com/myapp/mongodb/config/mongo.properties" /> --> <!-- mongodb連線池配置 --> <mongo:mongo-client host="192.168.126.128" port="27022"> <mongo:client-options write-concern="ACKNOWLEDGED" connections-per-host="100" threads-allowed-to-block-for-connection-multiplier="5" max-wait-time="120000" connect-timeout="10000"/> </mongo:mongo-client> <!-- mongodb資料庫工廠配置 --> <mongo:db-factory dbname="lison" mongo-ref="mongo" /> <mongo:mapping-converter base-package="com.dongnao.mongodb.entity"> <mongo:custom-converters> <mongo:converter> <bean class="com.dongnao.mongo.convert.BigDecimalToDecimal128Converter"/> </mongo:converter> <mongo:converter> <bean class="com.dongnao.mongo.convert.Decimal128ToBigDecimalConverter"/> </mongo:converter> </mongo:custom-converters> </mongo:mapping-converter> <!-- mongodb模板配置 --> <bean id="anotherMongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" /> <constructor-arg name="mongoConverter" ref="mappingConverter"/> <property name="writeResultChecking" value="EXCEPTION"></property> </bean> </beans>
Test類:
package com.shidebin.mongodb.spring_mongodb; import static com.mongodb.client.model.Filters.all; import static com.mongodb.client.model.Filters.and; import static com.mongodb.client.model.Filters.eq; import static com.mongodb.client.model.Filters.or; import static com.mongodb.client.model.Filters.regex; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.bson.conversions.Bson; import org.junit.Test; import org.junit.runner.RunWith; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoOperations; 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.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.mongodb.Block; import com.mongodb.WriteResult; import com.mongodb.client.FindIterable; import com.shidebin.mongo.entity.Address; import com.shidebin.mongo.entity.Favorites; import com.shidebin.mongo.entity.User; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext.xml") public class SpringPojoTest { private static final Logger logger = LoggerFactory.getLogger(SpringPojoTest.class); @Autowired private MongoOperations operation; @Test public void insertDemo(){ User user = new User(); user.setUsername("cang"); user.setCountry("USA"); user.setAge(20); user.setLenght(1.77f); user.setSalary(new BigDecimal("6265.22")); Address address1 = new Address(); address1.setaCode("411222"); address1.setAdd("sdfsdf"); user.setAddress(address1); Favorites favorites1 = new Favorites(); favorites1.setCites(Arrays.asList("東莞","東京")); favorites1.setMovies(Arrays.asList("西遊記","一路向西")); user.setFavorites(favorites1); User user1 = new User(); user1.setUsername("chen"); user1.setCountry("China"); user1.setAge(30); user1.setLenght(1.77f); user1.setSalary(new BigDecimal("6885.22")); Address address2 = new Address(); address2.setaCode("411000"); address2.setAdd("我的地址2"); user1.setAddress(address2); Favorites favorites2 = new Favorites(); favorites2.setCites(Arrays.asList("珠海","東京")); favorites2.setMovies(Arrays.asList("東遊記","一路向東")); user1.setFavorites(favorites2); operation.insertAll(Arrays.asList(user,user1)); } @Test public void testDelete(){ //delete from users where username = ‘lison’ WriteResult result = operation.remove(Query.query(Criteria.where("username").is("lison")), User.class); logger.info("刪除條數"+result.getN()); //delete from users where age >8 and age <25 WriteResult result2 = operation.remove(Query.query(new Criteria().andOperator(Criteria.where("age") .gt(8),Criteria.where("age").lt(25))), User.class); logger.info("刪除條數"+result2.getN()); } @Test public void testUpdate(){ //update users set age=6 where username = 'lison' WriteResult updateMany = operation.updateMulti(Query.query(Criteria.where("username").is("lison")), Update.update("age", 6), User.class); logger.info(String.valueOf(updateMany.getN())); //update users set favorites.movies add "小電影2 ", "小電影3" where favorites.cites has "東莞" WriteResult updateMany2 = operation.updateMulti(Query.query(Criteria.where("favorites.cites") .is("東莞")),new Update().addToSet("favorites.movies").each("小電影2","小電影3"), User.class); logger.info(String.valueOf(updateMany2.getN())); } @Test public void testFind(){ //select * from users where favorites.cites has "東莞"、"東京" List<User> userList = operation.find(Query.query(new Criteria().andOperator(Criteria.where("favorites.cites").is("東莞"), Criteria.where("favorites.cites").is("東京"))), User.class); userList.stream().forEach(consumer -> {System.out.println(consumer);}); //select * from users where username like '%s%' and (country= English or country = USA) List<User> userList2 = operation.find(Query.query(new Criteria().andOperator(new Criteria().orOperator(Criteria.where("country").is("English"), Criteria.where("country").is("USA")),Criteria.where("username").regex(".*s.*"))), User.class); userList2.stream().forEach(consumer -> {System.out.println(consumer);}); } }
pom.xml:
<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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.shidebin.mongodb</groupId> <artifactId>spring-mongodb</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>spring-mongodb</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <!-- https://mvnrepository.com/artifact/org.mongodb/mongo-java-driver --> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>3.5.0</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-mongodb --> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb</artifactId> <version>1.10.9.RELEASE</version> </dependency> <!-- 單元測試相關依賴 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>4.3.2.RELEASE</version> <scope>test</scope> </dependency> <!-- 日誌相關依賴 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.10</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.1.2</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.1.2</version> </dependency> <!-- spring核心依賴 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.3.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.3.3.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>4.3.3.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>4.3.3.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>4.3.3.RELEASE</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.1</version> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> </plugins> </build> </project>
- spring-data-mongodb的最新版本是2.x.x,如果是spring為5.0版本以上的才推薦使用;
- spring-data-mongodb的1.10.9版本基於spring4.3.x開發,但是預設依賴的mongodb驅動 為2.14.3,可以將mongodb的驅動設定為3.5.0的版本,相容性待進一步測試;
- spring-data-mongodb的1.10.9可能會支援3.5.0版本 mongodb驅動;