添加Spring-data-mongodb的依賴。
<code><dependency>
<groupid>org.springframework.data/<groupid>
<artifactid>spring-data-mongodb/<artifactid>
<version>1.10.9.RELEASE/<version>
/<dependency>/<code>
1. spring-data-mongodb2.x.x版本,如果是spring為5.0版本以上的才推薦使用;
2. spring-data-mongodb的1.10.9版本基於spring4.3.x開發。
3. spring-data-mongodb一般使用pojo的方式開發;
4.與MongoDB Server 3.4和MongoDB Java驅動程序3.4兼容。
具體可參看官方文檔:
https://docs.spring.io/spring-data/mongodb/docs/2.1.3.RELEASE/reference/html/#new-features.1-10-0
添加spring的其他依賴:
<code> <dependency>
<groupid>org.springframework/<groupid>
<artifactid>spring-test/<artifactid>
<version>4.3.2.RELEASE/<version>
<scope>test/<scope>
/<dependency>
<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>/<code>
日誌的依賴:
<code><dependency>
<groupid>junit/<groupid>
<artifactid>junit/<artifactid>
<version>4.12/<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>/<code>
spring的配置文件:
<code>
<beans>\txmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
\txmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:mongo="http://www.springframework.org/schema/data/mongo"
\txsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
\t\thttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
\t\thttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
\t\thttp://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo.xsd">
\t<component-scan>
\t/<component-scan>
\t
\t<mongo-client>
\t\t<client-options>\t\t write-concern="ACKNOWLEDGED"
\t\t connections-per-host="1"
\t\t threads-allowed-to-block-for-connection-multiplier="5"
\t\t max-wait-time="120000"
\t\t\t connect-timeout="10000"/>
\t/<client-options>/<mongo-client>
\t
\t<db-factory>
\t<mapping-converter>
\t\t <custom-converters>
\t\t <converter>
\t\t <bean>
\t\t /<converter>
\t\t <converter>
\t\t <bean>
\t\t /<converter>
\t /<custom-converters>
\t/<mapping-converter>
\t<bean>
\t\t<constructor-arg>
\t\t<constructor-arg>
\t\t<property>
\t/<bean>
/<beans>
/<code>
Programmer實體類:
<code>//程序員類,省去了get/set方法
public class Programmer {
//名稱
private String name;
//類型
private String type;
//生活方式
private String life;
//薪水
private BigDecimal salary;
//髮量
private String hair;
//愛好
private Favorites favorites;
}
public class Favorites {
\tprivate List<string> books;
\tprivate List<string> movies;
\tpublic List<string> getMovies() {
\t\treturn movies;
\t}
\tpublic void setMovies(List<string> movies) {
\t\tthis.movies = movies;
\t}
\tpublic List<string> geBooks() {
\t\treturn books;
\t}
\tpublic void setBooks(List<string> books) {
\t\tthis.books = books;
\t}
}/<string>/<string>/<string>/<string>/<string>/<string>/<code>
mongodb客戶端配置類:
<code>@Configurationpublic class AppConfig {
/* * Use the standard Mongo driver API to create a com.mongodb.MongoClient instance. */ @Bean public MongoClient mongoClient() {
WriteConcern acknowledged = WriteConcern.JOURNALED;
MongoClientOptions mco = MongoClientOptions.builder()
.writeConcern(acknowledged)
.connectionsPerHost(100)
.threadsAllowedToBlockForConnectionMultiplier(5)
.maxWaitTime(120000).connectTimeout(10000).build();
MongoClient client = new MongoClient(new ServerAddress("192.168.1.120", 27022), mco);
return client;
}
}/<code>
測試插入方法:
<code>//spring Pojo的操作方式@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
//spring Pojo的操作方式
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class SpringPojoTest {
\tprivate static final Logger logger = LoggerFactory.getLogger(SpringPojoTest.class);
\t@Resource
\tprivate MongoOperations tempelate;
@Test
public void insertDemo(){
\t\tlogger.info("====================開始插入數據====================");
\t\tProgrammer programmer1 = new Programmer();
\t\tprogrammer1.setName("java");
\t\tprogrammer1.setType("Java高級程序員");
\t\tprogrammer1.setLife("喜愛加班,不加班渾身不舒服");
\t\tprogrammer1.setSalary(new BigDecimal("20065.22"));
\t\tprogrammer1.setHair("發亮還好,也不多了");
\tFavorites favorites1 = new Favorites();
\tfavorites1.setBooks(Arrays.asList("Java高併發","微服務","docker"));
\tfavorites1.setMovies(Arrays.asList("學習Java,迎娶白富美,走上人生巔峰","倉老師的辛苦歷險記"));
\t\tprogrammer1.setFavorites(favorites1);
\t\tProgrammer programmer2 = new Programmer();
\t\tprogrammer2.setName("java");
\t\tprogrammer2.setType("Java架構師");
\t\tprogrammer2.setLife("不愛加班,喜歡鑽研技術,技術探討,聊技術就開始BB");
\t\tprogrammer2.setSalary(new BigDecimal("30065.22"));
\t\tprogrammer2.setHair("發亮岌岌可危");
\t\tFavorites favorites2 = new Favorites();
\t\tfavorites2.setBooks(Arrays.asList("SpringCloud源碼解析","手寫redis客戶端","手寫springMvc"));
\t\tfavorites2.setMovies(Arrays.asList("高可用,高併發,都不在話下,原理解析思路清晰","東京熱的讓人發慌"));
\ttempelate.insertAll(Arrays.asList(programmer1,programmer2));
\t\tlogger.info("====================結束插入數據====================");
}
}/<code>
測試更新方法:
<code> @Test
public void testUpdate(){
\t//update programmer set life = '喜歡炒股' where type = 'Java架構師'
\tWriteResult updateFirst = tempelate.updateMulti(query(where("type").is("Java架構師")), update("life", "喜歡炒股"), Programmer.class);
\t\tlogger.info("result1:"+updateFirst.getN());
\tQuery query = query(where("type").is("Java高級程序員"));
\t\tUpdate update = new Update().addToSet("favorites.movies").each("小電影2 ", "小電影3");
\t\tWriteResult updateMulti = tempelate.updateMulti(query, update, Programmer.class);
\t\tlogger.info("result2:"+updateMulti.getN());
}/<code>
測試查詢方法:
<code> @Test
public void testFind(){
\tList<programmer> find = tempelate.find(query(where("favorites.books").all(Arrays.asList("微服務","docker"))), Programmer.class);
\t\tlogger.info("result1:"+find.size());
\tString regexStr = ".*發亮.*";
\tCriteria regex = where("hair").regex(regexStr);
\tCriteria or1 = where("type").is("Java高級程序員");
\tCriteria or2 = where("type").is("Java架構師");
\tCriteria or = new Criteria().orOperator(or1,or2);
\tQuery query = query(new Criteria().andOperator(regex,or));
\tList<programmer> find2 = tempelate.find(query, Programmer.class);
\t\tlogger.info("result2:"+find2.size());
\t}/<programmer>/<programmer>/<code>
測試刪除方法:
<code> @Test
public void testDelete(){
\t//delete from programmer where type = 'Java高級程序員'
\tWriteResult remove = tempelate.remove(query(where("type").is("Java高級程序員")), Programmer.class);
\t\tlogger.info("result1:"+remove.getN());
\t//delete from programmer where salary > 20000 and salary <30000
\tWriteResult remove2 = tempelate.remove(query(new Criteria().andOperator(where("salary").gt(20000),where("age").lt(30000))), Programmer.class);
\t\tlogger.info("result2:"+remove2.getN());
}/<code>
閱讀更多 代碼接盤俠 的文章