1. 程式人生 > >spring連線mongodb實現增刪改查

spring連線mongodb實現增刪改查

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>
  1. spring-data-mongodb的最新版本是2.x.x,如果是spring為5.0版本以上的才推薦使用;
  2. spring-data-mongodb的1.10.9版本基於spring4.3.x開發,但是預設依賴的mongodb驅動 為2.14.3,可以將mongodb的驅動設定為3.5.0的版本,相容性待進一步測試;
  3. spring-data-mongodb的1.10.9可能會支援3.5.0版本 mongodb驅動;