diff --git a/README.md b/README.md index f22ff71..0b8890d 100644 --- a/README.md +++ b/README.md @@ -31,9 +31,9 @@ spring-cloud:Finchley.SR2 | [spring-jdbc](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring/spring-jdbc)
[spring-jdbc-annotation](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring/spring-jdbc-annotation) | spring jdbc-template 的使用 | [Using JdbcTemplat](https://docs.spring.io/spring/docs/5.1.3.RELEASE/spring-framework-reference/data-access.html#jdbc-JdbcTemplate) | | [spring-mybatis](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring/spring-mybatis)
[spring-mybatis-annotation](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring/spring-mybatis-annotation) | spring 整合 mybatis | [mybatis-spring中文文档](http://www.mybatis.org/spring/zh/index.html) | | [spring-druid-mybatis](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring/spring-druid-mybatis)
[spring-druid-mybatis-annotation](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring/spring-druid-mybatis-annotation) | spring 整合druid、mybatis | [alibaba druid](https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98) | -| spring-redis
spring-redis-annotation | spring 整合 redis | [redisson中文文档](https://github.com/redisson/redisson/wiki/%E7%9B%AE%E5%BD%95) | -| spring-mongodb
spring-mongodb-annotation | spring 整合 mongodb | [Xmemcached中文文档](https://github.com/killme2008/xmemcached/wiki/Xmemcached%20%E4%B8%AD%E6%96%87%E7%94%A8%E6%88%B7%E6%8C%87%E5%8D%97) | -| spring-memcached
spring-memcached-annotation | spring 整合 memcached | | +| spring-redis
spring-redis-annotation | spring 整合 redis 单机、集群(jedis)
spring 整合 redis 单机、集群(redisson) | [redisson中文文档](https://github.com/redisson/redisson/wiki/%E7%9B%AE%E5%BD%95) | +| spring-mongodb
spring-mongodb-annotation | spring 整合 mongodb | | +| spring-memcached
spring-memcached-annotation | spring 整合 memcached | [Xmemcached中文文档](https://github.com/killme2008/xmemcached/wiki/Xmemcached%20%E4%B8%AD%E6%96%87%E7%94%A8%E6%88%B7%E6%8C%87%E5%8D%97) | | spring-rabbitmq
spring-rabbitmq-annotation | spring 整合 rabbitmq | | | spring-kafka
spring-kafka-annotation | spring 整合 kafka | | | spring-dubbo
spring-dubbo-annotation | spring 整合 dubbo | | diff --git a/spring/spring-mongodb-annotation/pom.xml b/spring/spring-mongodb-annotation/pom.xml new file mode 100644 index 0000000..2f7c834 --- /dev/null +++ b/spring/spring-mongodb-annotation/pom.xml @@ -0,0 +1,69 @@ + + + 4.0.0 + + com.heibaiying + spring-mongodb-annotation + 1.0-SNAPSHOT + + + 5.1.3.RELEASE + + + + + org.springframework + spring-context + ${spring-base-version} + + + org.springframework + spring-beans + ${spring-base-version} + + + org.springframework + spring-core + ${spring-base-version} + + + org.springframework + spring-web + ${spring-base-version} + + + org.springframework + spring-webmvc + ${spring-base-version} + + + + org.springframework.data + spring-data-mongodb + 2.1.3.RELEASE + + + + junit + junit + 4.12 + test + + + org.springframework + spring-test + ${spring-base-version} + test + + + org.projectlombok + lombok + 1.18.4 + provided + + + + + \ No newline at end of file diff --git a/spring/spring-mongodb-annotation/src/main/java/com/heibaiying/bean/Programmer.java b/spring/spring-mongodb-annotation/src/main/java/com/heibaiying/bean/Programmer.java new file mode 100644 index 0000000..5cff5ab --- /dev/null +++ b/spring/spring-mongodb-annotation/src/main/java/com/heibaiying/bean/Programmer.java @@ -0,0 +1,25 @@ +package com.heibaiying.bean; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +/** + * @author : heibaiying + * @description : + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class Programmer { + + private String name; + + private int age; + + private float salary; + + private Date birthday; +} diff --git a/spring/spring-mongodb-annotation/src/main/java/com/heibaiying/config/MongoConfig.java b/spring/spring-mongodb-annotation/src/main/java/com/heibaiying/config/MongoConfig.java new file mode 100644 index 0000000..8baedea --- /dev/null +++ b/spring/spring-mongodb-annotation/src/main/java/com/heibaiying/config/MongoConfig.java @@ -0,0 +1,39 @@ +package com.heibaiying.config; + +import com.mongodb.MongoClient; +import com.mongodb.MongoClientOptions; +import com.mongodb.ServerAddress; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.mongodb.MongoDbFactory; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.SimpleMongoDbFactory; + +/** + * @author : heibaiying + * @description : Mongo 配置类 + */ + +@Configuration +@ComponentScan(value = "com.heibaiying.*") +public class MongoConfig { + + @Bean + public MongoDbFactory mongoDbFactory(MongoProperty mongo) { + MongoClientOptions options = MongoClientOptions.builder() + .threadsAllowedToBlockForConnectionMultiplier(mongo.getMultiplier()) + .connectionsPerHost(mongo.getConnectionsPerHost()) + .connectTimeout(mongo.getConnectTimeout()) + .maxWaitTime(mongo.getMaxWaitTime()) + .socketTimeout(mongo.getSocketTimeout()) + .build(); + MongoClient client = new MongoClient(new ServerAddress(mongo.getHost(), mongo.getPort()), options); + return new SimpleMongoDbFactory(client, mongo.getDbname()); + } + + @Bean + public MongoTemplate mongoTemplate(MongoDbFactory mongoDbFactory) { + return new MongoTemplate(mongoDbFactory); + } +} diff --git a/spring/spring-mongodb-annotation/src/main/java/com/heibaiying/config/MongoProperty.java b/spring/spring-mongodb-annotation/src/main/java/com/heibaiying/config/MongoProperty.java new file mode 100644 index 0000000..b815d77 --- /dev/null +++ b/spring/spring-mongodb-annotation/src/main/java/com/heibaiying/config/MongoProperty.java @@ -0,0 +1,35 @@ +package com.heibaiying.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; + +/** + * @author : heibaiying + * @description : Mongo 配置属性 + */ +@Data +@Configuration +@PropertySource(value = "classpath:mongodb.properties") +public class MongoProperty { + + @Value("${mongo.host}") + private String host; + @Value("${mongo.port}") + private int port; + @Value("${mongo.dbname}") + private String dbname; + @Value("${mongo.connectionsPerHost}") + private int connectionsPerHost; + @Value("${mongo.threadsAllowedToBlockForConnectionMultiplier}") + private int multiplier; + @Value("${mongo.connectTimeout}") + private int connectTimeout; + @Value("${mongo.maxWaitTime}") + private int maxWaitTime; + @Value("${mongo.socketKeepAlive}") + private boolean socketKeepAlive; + @Value("${mongo.socketTimeout}") + private int socketTimeout; +} diff --git a/spring/spring-mongodb-annotation/src/main/resources/mongodb.properties b/spring/spring-mongodb-annotation/src/main/resources/mongodb.properties new file mode 100644 index 0000000..4ead0c0 --- /dev/null +++ b/spring/spring-mongodb-annotation/src/main/resources/mongodb.properties @@ -0,0 +1,17 @@ +mongo.host=192.168.200.228 +mongo.port=27017 +# ݿ. Ĭ'db'. +mongo.dbname=database +# ÿ +mongo.connectionsPerHost=10 +# ̶߳connectionsPerHostֵ˵Ľ̶ֵ߳߳˶оͻ׳쳣 +mongo.threadsAllowedToBlockForConnectionMultiplier=5 +# ӳʱĺ 0Ĭֵ޴ +mongo.connectTimeout=1000 +# ȴӵ߳ʱ Ĭ120000 ms (2 minutes). +mongo.maxWaitTime=1500 +# ֻ־Ƿ׽ֱֻʱ ٷĬΪtrue Ҳ +mongo.socketKeepAlive=true +# Ⱥӵ׽ֳʱ +mongo.socketTimeout=1500 + diff --git a/spring/spring-mongodb-annotation/src/test/java/com/heibaiying/mongo/MongoDBTest.java b/spring/spring-mongodb-annotation/src/test/java/com/heibaiying/mongo/MongoDBTest.java new file mode 100644 index 0000000..173a528 --- /dev/null +++ b/spring/spring-mongodb-annotation/src/test/java/com/heibaiying/mongo/MongoDBTest.java @@ -0,0 +1,72 @@ +package com.heibaiying.mongo; + +import com.heibaiying.bean.Programmer; +import com.heibaiying.config.MongoConfig; +import com.mongodb.client.result.DeleteResult; +import com.mongodb.client.result.UpdateResult; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import static org.springframework.data.mongodb.core.query.Criteria.where; +import static org.springframework.data.mongodb.core.query.Query.query; +import static org.springframework.data.mongodb.core.query.Update.update; + +/** + * @author : heibaiying + * @description : MongoDB 查询 + */ +@RunWith(SpringRunner.class) +@ContextConfiguration(classes = MongoConfig.class) +public class MongoDBTest { + + @Autowired + private MongoTemplate mongoTemplate; + + @Test + public void insert() { + // 单条插入 + mongoTemplate.insert(new Programmer("xiaoming", 12, 5000.21f, new Date())); + List programmers = new ArrayList(); + // 批量插入 + programmers.add(new Programmer("xiaohong", 21, 52200.21f, new Date())); + programmers.add(new Programmer("xiaolan", 34, 500.21f, new Date())); + mongoTemplate.insert(programmers, Programmer.class); + } + + // 条件查询 + @Test + public void select() { + Criteria criteria = new Criteria(); + criteria.andOperator(where("name").is("xiaohong"), where("age").is(21)); + Query query = new Query(criteria); + Programmer one = mongoTemplate.findOne(query, Programmer.class); + System.out.println(one); + } + + + // 更新数据 + @Test + public void MUpdate() { + UpdateResult updateResult = mongoTemplate.updateMulti(query(where("name").is("xiaoming")), update("age", 35), Programmer.class); + System.out.println("更新记录数:" + updateResult.getModifiedCount()); + } + + // 删除指定数据 + @Test + public void delete() { + DeleteResult result = mongoTemplate.remove(query(where("name").is("xiaolan")), Programmer.class); + System.out.println("影响记录数:" + result.getDeletedCount()); + System.out.println("是否成功:" + result.wasAcknowledged()); + } + +} diff --git a/spring/spring-mongodb/pom.xml b/spring/spring-mongodb/pom.xml new file mode 100644 index 0000000..681bfb0 --- /dev/null +++ b/spring/spring-mongodb/pom.xml @@ -0,0 +1,68 @@ + + + 4.0.0 + + com.heibaiying + spring-mongodb + 1.0-SNAPSHOT + + + 5.1.3.RELEASE + + + + + org.springframework + spring-context + ${spring-base-version} + + + org.springframework + spring-beans + ${spring-base-version} + + + org.springframework + spring-core + ${spring-base-version} + + + org.springframework + spring-web + ${spring-base-version} + + + org.springframework + spring-webmvc + ${spring-base-version} + + + + org.springframework.data + spring-data-mongodb + 2.1.3.RELEASE + + + + junit + junit + 4.12 + test + + + org.springframework + spring-test + ${spring-base-version} + test + + + org.projectlombok + lombok + 1.18.4 + provided + + + + \ No newline at end of file diff --git a/spring/spring-mongodb/src/main/java/com/heibaiying/bean/Programmer.java b/spring/spring-mongodb/src/main/java/com/heibaiying/bean/Programmer.java new file mode 100644 index 0000000..5cff5ab --- /dev/null +++ b/spring/spring-mongodb/src/main/java/com/heibaiying/bean/Programmer.java @@ -0,0 +1,25 @@ +package com.heibaiying.bean; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +/** + * @author : heibaiying + * @description : + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class Programmer { + + private String name; + + private int age; + + private float salary; + + private Date birthday; +} diff --git a/spring/spring-mongodb/src/main/resources/mongodb.properties b/spring/spring-mongodb/src/main/resources/mongodb.properties new file mode 100644 index 0000000..4ead0c0 --- /dev/null +++ b/spring/spring-mongodb/src/main/resources/mongodb.properties @@ -0,0 +1,17 @@ +mongo.host=192.168.200.228 +mongo.port=27017 +# ݿ. Ĭ'db'. +mongo.dbname=database +# ÿ +mongo.connectionsPerHost=10 +# ̶߳connectionsPerHostֵ˵Ľ̶ֵ߳߳˶оͻ׳쳣 +mongo.threadsAllowedToBlockForConnectionMultiplier=5 +# ӳʱĺ 0Ĭֵ޴ +mongo.connectTimeout=1000 +# ȴӵ߳ʱ Ĭ120000 ms (2 minutes). +mongo.maxWaitTime=1500 +# ֻ־Ƿ׽ֱֻʱ ٷĬΪtrue Ҳ +mongo.socketKeepAlive=true +# Ⱥӵ׽ֳʱ +mongo.socketTimeout=1500 + diff --git a/spring/spring-mongodb/src/main/resources/mongodb.xml b/spring/spring-mongodb/src/main/resources/mongodb.xml new file mode 100644 index 0000000..7db314b --- /dev/null +++ b/spring/spring-mongodb/src/main/resources/mongodb.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring/spring-mongodb/src/test/java/com/heibaiying/mongo/MongoDBTest.java b/spring/spring-mongodb/src/test/java/com/heibaiying/mongo/MongoDBTest.java new file mode 100644 index 0000000..4697c89 --- /dev/null +++ b/spring/spring-mongodb/src/test/java/com/heibaiying/mongo/MongoDBTest.java @@ -0,0 +1,71 @@ +package com.heibaiying.mongo; + +import com.heibaiying.bean.Programmer; +import com.mongodb.client.result.DeleteResult; +import com.mongodb.client.result.UpdateResult; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import static org.springframework.data.mongodb.core.query.Criteria.where; +import static org.springframework.data.mongodb.core.query.Query.query; +import static org.springframework.data.mongodb.core.query.Update.update; + +/** + * @author : heibaiying + * @description : MongoDB 查询 + */ +@RunWith(SpringRunner.class) +@ContextConfiguration(locations = "classpath:mongodb.xml") +public class MongoDBTest { + + @Autowired + private MongoTemplate mongoTemplate; + + @Test + public void insert() { + // 单条插入 + mongoTemplate.insert(new Programmer("xiaoming", 12, 5000.21f, new Date())); + List programmers = new ArrayList(); + // 批量插入 + programmers.add(new Programmer("xiaohong", 21, 52200.21f, new Date())); + programmers.add(new Programmer("xiaolan", 34, 500.21f, new Date())); + mongoTemplate.insert(programmers, Programmer.class); + } + + // 条件查询 + @Test + public void select() { + Criteria criteria = new Criteria(); + criteria.andOperator(where("name").is("xiaohong"), where("age").is(21)); + Query query = new Query(criteria); + Programmer one = mongoTemplate.findOne(query, Programmer.class); + System.out.println(one); + } + + + // 更新数据 + @Test + public void MUpdate() { + UpdateResult updateResult = mongoTemplate.updateMulti(query(where("name").is("xiaoming")), update("age", 35), Programmer.class); + System.out.println("更新记录数:" + updateResult.getModifiedCount()); + } + + // 删除指定数据 + @Test + public void delete() { + DeleteResult result = mongoTemplate.remove(query(where("name").is("xiaolan")), Programmer.class); + System.out.println("影响记录数:" + result.getDeletedCount()); + System.out.println("是否成功:" + result.wasAcknowledged()); + } + +}