MongoDB和Java(4):Spring Data整合MongoDB(XML配置)

 

最近花了一些時間學習了下MongoDB數據庫,感受仍是比較全面系統的,涉及了軟件安裝、客戶端操做、安全認證、副本集和分佈式集羣搭建,以及使用Spring Data鏈接MongoDB進行數據操做,收穫很大。特此記錄,以備查看。html

 

文章目錄:spring

MongoDB和Java(1):Linux下的MongoDB安裝mongodb

MongoDB和Java(2):普通用戶啓動mongod進程數據庫

MongoDB和Java(3):Java操做MongoBapache

MongoDB和Java(4):Spring Data整合MongoDB(XML配置)安全

MongoDB和Java(5):Spring Data整合MongoDB(註解配置)服務器

MongoDB和Java(6):Spring Data整合MongoDB副本集、分片集羣app

MongoDB和Java(7):MongoDB用戶管理socket

 

本文記錄如何使用XML配置方式整合Spring data和MongoDBmaven

 

源代碼下載
MongoDB和Java學習代碼.zip

 

一、環境準備

JDK     1.8
Spring    4.2.5.RELEASE
Junit       4.10
Spring-data-mongodb  1.9.0.RELEASE
Logback   1.1.7

Maven    3.2.1

 

依賴

 1 <properties>
 2     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 3     <maven.compiler.source>1.8</maven.compiler.source>
 4     <maven.compiler.target>1.8</maven.compiler.target>
 5     <spring.version>4.2.5.RELEASE</spring.version>
 6 </properties>
 7 
 8 <dependencies>
 9 
10     <dependency>
11         <groupId>junit</groupId>
12         <artifactId>junit</artifactId>
13         <version>4.10</version>
14         <scope>test</scope>
15     </dependency>
16 
17     <dependency>
18         <groupId>org.springframework</groupId>
19         <artifactId>spring-context-support</artifactId>
20         <version>${spring.version}</version>
21     </dependency>
22     <dependency>
23         <groupId>org.springframework</groupId>
24         <artifactId>spring-aop</artifactId>
25         <version>${spring.version}</version>
26     </dependency>
27     <dependency>
28         <groupId>org.springframework</groupId>
29         <artifactId>spring-test</artifactId>
30         <version>${spring.version}</version>
31         <scope>test</scope>
32     </dependency>
33 
34     <dependency>
35         <groupId>org.springframework.data</groupId>
36         <artifactId>spring-data-mongodb</artifactId>
37         <version>1.9.0.RELEASE</version>
38     </dependency>
39 
40     <!-- logback日誌 -->
41     <dependency>
42         <groupId>ch.qos.logback</groupId>
43         <artifactId>logback-core</artifactId>
44         <version>1.1.7</version>
45     </dependency>
46     <dependency>
47         <groupId>ch.qos.logback</groupId>
48         <artifactId>logback-classic</artifactId>
49         <version>1.1.7</version>
50     </dependency>
51     <dependency>
52         <groupId>org.aspectj</groupId>
53         <artifactId>aspectjweaver</artifactId>
54         <version>1.6.1</version>
55     </dependency>
56 
57 </dependencies>
58 
59 <build>
60     <finalName>security-demo</finalName>
61     <plugins>
62         <plugin>
63             <groupId>org.apache.maven.plugins</groupId>
64             <artifactId>maven-compiler-plugin</artifactId>
65             <version>3.3</version>
66             <configuration>
67                 <source>${maven.compiler.source}</source>
68                 <target>${maven.compiler.target}</target>
69                 <encoding>${project.build.sourceEncoding}</encoding>
70             </configuration>
71         </plugin>
72     </plugins>
73 </build>

 

二、mongodb配置文件

這個是spring的子配置文件,經過從.properties文件讀取鏈接屬性建立mongoClient對象,再建立DBFactory對象,經過DBFactory建立MongoTemplate,咱們的數據層實現類就是使用MongoTemplate操做MongoDB的。

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 4  xmlns:context="http://www.springframework.org/schema/context"
 5  xmlns:mongo="http://www.springframework.org/schema/data/mongo"
 6  xsi:schemaLocation="http://www.springframework.org/schema/beans  7  http://www.springframework.org/schema/beans/spring-beans-4.2.xsd  8  http://www.springframework.org/schema/context  9  http://www.springframework.org/schema/context/spring-context-4.2.xsd 10  http://www.springframework.org/schema/data/mongo 11  http://www.springframework.org/schema/data/mongo/spring-mongo-1.8.xsd">
12 
13     <!-- 鏈接屬性文件,配置服務器IP端口、數據庫和鏈接參數 -->
14     <context:property-placeholder location="classpath:mongodb.properties"
15  ignore-unresolvable="true" />
16 
17     <!-- 建立MongoClient -->
18     <mongo:mongo-client id="mongo" replica-set="${mongo.hostport}">
19         <mongo:client-options connections-per-host="${mongo.connectionsPerHost}"
20  threads-allowed-to-block-for-connection-multiplier= 21  "${mongo.threadsAllowedToBlockForConnectionMultiplier}"
22  connect-timeout="${mongo.connectTimeout}" max-wait-time="${mongo.maxWaitTime}"
23  socket-keep-alive="${mongo.socketKeepAlive}" 
24  socket-timeout="${mongo.socketTimeout}" />
25     </mongo:mongo-client>
26 
27     <!-- MongoDbFactory -->
28     <mongo:db-factory id="mgFactory" dbname="${mongo.dbname}"
29  mongo-ref="mongo" />
30 
31     <!-- MongoTemplate -->
32     <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
33         <constructor-arg name="mongoDbFactory" ref="mgFactory" />
34     </bean>
35 
36 </beans>
View Code

 

 

mongodb.properties

1 mongo.hostport=10.10.12.195:27017
2 mongo.dbname=test 3 mongo.connectionsPerHost=8
4 mongo.threadsAllowedToBlockForConnectionMultiplier=4
5 mongo.connectTimeout=1000
6 mongo.maxWaitTime=1500
7 mongo.socketKeepAlive=true
8 mongo.socketTimeout=1500

 

三、spring主配置文件

application.xml是spring的主配置文件,配置組件掃描,另外還要引入mongo的配置

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 4  xmlns:context="http://www.springframework.org/schema/context"
 5  xmlns:tx="http://www.springframework.org/schema/tx" 
 6  xmlns:aop="http://www.springframework.org/schema/aop"
 7  xsi:schemaLocation="http://www.springframework.org/schema/beans  8  http://www.springframework.org/schema/beans/spring-beans-4.2.xsd  9  http://www.springframework.org/schema/context 10  http://www.springframework.org/schema/context/spring-context-4.2.xsd">
11 
12     <!-- 組件掃描 -->
13     <context:component-scan base-package="org.net5ijy.mongo.dao" />
14     <!--使用註解管理bean -->
15     <context:annotation-config />
16 
17     <import resource="application-mongo.xml" />
18 
19 </beans>

 

四、實體類和數據層

Employee

 1 @Document(collection = "employee")  2 public class Employee implements Serializable {  3 
 4  @Id  5     @Field(value = "_id")  6     private String id;  7 
 8     @Field(value = "name")  9     private String name; 10 
11  @Field 12     private Integer age; 13 
14  @Field 15     private Date createTime = new Date(); 16 
17     public Employee() { 18         super(); 19  } 20     public Employee(String name, Integer age) { 21         super(); 22         this.name = name; 23         this.age = age; 24  } 25 
26     // getter & setter
27 }

 

數據層實現

 1 @Repository  2 public class EmployeeDaoImpl implements EmployeeDao {  3 
 4  @Autowired  5     private MongoTemplate mongoTemplate;  6 
 7  @Override  8     public List<Employee> findAll() {  9         return mongoTemplate.findAll(Employee.class); 10  } 11 
12  @Override 13     public void insertOneEmployee(Employee employee) { 14  mongoTemplate.insert(employee); 15  } 16 
17  @Override 18     public void deleteOneEmployeeByName(String name) { 19         Criteria c = new Criteria(); 20         c.and("name").is(name); 21         Query query = new Query(c); 22         mongoTemplate.remove(query, Employee.class); 23  } 24 
25  @Override 26     public void deleteOneEmployee(String id) { 27         Criteria c = new Criteria(); 28         c.and("_id").is(id); 29         Query query = new Query(c); 30         mongoTemplate.remove(query, Employee.class); 31  } 32 
33  @Override 34     public Employee findByName(String name) { 35         Criteria c = new Criteria(); 36         c.and("name").is(name); 37         Query query = new Query(c); 38         return mongoTemplate.findOne(query, Employee.class); 39  } 40 
41  @Override 42     public Employee find(String id) { 43         return mongoTemplate.findById(id, Employee.class); 44  } 45 }
View Code

 

代碼中把MongoTemplate注入到了實現類,而後使用它的API進行數據庫操做。

 

五、Junit測試類

 1 @RunWith(SpringJUnit4ClassRunner.class)  2 @ContextConfiguration(locations = { "classpath:application.xml" })  3 public class EmployeeDaoImplTest {  4 
 5  @Autowired  6     private EmployeeDao employeeDao;  7 
 8  @Autowired  9     private ApplicationContext context; 10 
11  @Test 12     public void testFindAll() { 13         List<Employee> list = employeeDao.findAll(); 14         for (Employee employee : list) { 15  System.out.println(employee); 16  } 17  } 18 
19  @Test 20     public void testInsertOneEmployee() { 21         Employee e = new Employee("admin", 28); 22  employeeDao.insertOneEmployee(e); 23  } 24 
25  @Test 26     public void testDeleteOneEmployeeByName() { 27         employeeDao.deleteOneEmployeeByName("admin"); 28  } 29 
30  @Test 31     public void testDeleteOneEmployee() { 32         Employee e = employeeDao.findByName("admin"); 33  employeeDao.deleteOneEmployee(e.getId()); 34  } 35 
36  @Test 37     public void testFindByName() { 38         Employee e = employeeDao.findByName("admin"); 39  System.out.println(e); 40  } 41 
42  @Test 43     public void testFind() { 44         Employee e = employeeDao.findByName("admin"); 45         Employee e2 = employeeDao.find(e.getId()); 46  System.out.println(e2); 47  } 48 }

 

六、參考資料

Spring Data MongoDB - Reference Documentation

https://docs.spring.io/spring-data/mongodb/docs/1.10.15.RELEASE/reference/html/

相關文章
相關標籤/搜索