springboot2.0整合mongodb配置附工具類
阿新 • • 發佈:2018-12-24
- jar包依賴
pom.xml:
<!-- mongodb -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
- application.yml配置:
spring: data: mongodb: database: test host: 127.0.0.1 port: 27017 logging: level: org.springframework.data.mongodb.core.MongoTemplate: DEBUG #配置MongoTemplate日誌
- MongoTemplate工具類:
MongodbUtils.java
import java.util.List; import javax.annotation.PostConstruct; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort.Direction; 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.data.mongodb.core.query.Update; import org.springframework.stereotype.Component; /** * mongodb curd 工具類 * * @author ttan * */ @Component public class MongodbUtils { public static MongodbUtils mongodbUtils; @PostConstruct public void init() { mongodbUtils = this; mongodbUtils.mongoTemplate = this.mongoTemplate; } @Autowired private MongoTemplate mongoTemplate; /** * 儲存資料物件,集合為資料物件中@Document 註解所配置的collection * * @param obj * 資料物件 */ public static void save(Object obj) { mongodbUtils.mongoTemplate.save(obj); } /** * 指定集合儲存資料物件 * * @param obj * 資料物件 * @param collectionName * 集合名 */ public static void save(Object obj, String collectionName) { mongodbUtils.mongoTemplate.save(obj, collectionName); } /** * 根據資料物件中的id刪除資料,集合為資料物件中@Document 註解所配置的collection * * @param obj * 資料物件 */ public static void remove(Object obj) { mongodbUtils.mongoTemplate.remove(obj); } /** * 指定集合 根據資料物件中的id刪除資料 * * @param obj * 資料物件 * @param collectionName * 集合名 */ public static void remove(Object obj, String collectionName) { mongodbUtils.mongoTemplate.remove(obj, collectionName); } /** * 根據key,value到指定集合刪除資料 * * @param key * 鍵 * @param value * 值 * @param collectionName * 集合名 */ public static void removeById(String key, Object value, String collectionName) { Criteria criteria = Criteria.where(key).is(value); criteria.and(key).is(value); Query query = Query.query(criteria); mongodbUtils.mongoTemplate.remove(query, collectionName); } /** * 指定集合 修改資料,且僅修改找到的第一條資料 * * @param accordingKey * 修改條件 key * @param accordingValue * 修改條件 value * @param updateKeys * 修改內容 key陣列 * @param updateValues * 修改內容 value陣列 * @param collectionName * 集合名 */ public static void updateFirst(String accordingKey, Object accordingValue, String[] updateKeys, Object[] updateValues, String collectionName) { Criteria criteria = Criteria.where(accordingKey).is(accordingValue); Query query = Query.query(criteria); Update update = new Update(); for (int i = 0; i < updateKeys.length; i++) { update.set(updateKeys[i], updateValues[i]); } mongodbUtils.mongoTemplate.updateFirst(query, update, collectionName); } /** * 指定集合 修改資料,且修改所找到的所有資料 * * @param accordingKey * 修改條件 key * @param accordingValue * 修改條件 value * @param updateKeys * 修改內容 key陣列 * @param updateValues * 修改內容 value陣列 * @param collectionName * 集合名 */ public static void updateMulti(String accordingKey, Object accordingValue, String[] updateKeys, Object[] updateValues, String collectionName) { Criteria criteria = Criteria.where(accordingKey).is(accordingValue); Query query = Query.query(criteria); Update update = new Update(); for (int i = 0; i < updateKeys.length; i++) { update.set(updateKeys[i], updateValues[i]); } mongodbUtils.mongoTemplate.updateMulti(query, update, collectionName); } /** * 根據條件查詢出所有結果集 集合為資料物件中@Document 註解所配置的collection * * @param obj * 資料物件 * @param findKeys * 查詢條件 key * @param findValues * 查詢條件 value * @return */ public static List<? extends Object> find(Object obj, String[] findKeys, Object[] findValues) { Criteria criteria = null; for (int i = 0; i < findKeys.length; i++) { if (i == 0) { criteria = Criteria.where(findKeys[i]).is(findValues[i]); } else { criteria.and(findKeys[i]).is(findValues[i]); } } Query query = Query.query(criteria); List<? extends Object> resultList = mongodbUtils.mongoTemplate.find(query, obj.getClass()); return resultList; } /** * 指定集合 根據條件查詢出所有結果集 * * @param obj * 資料物件 * @param findKeys * 查詢條件 key * @param findValues * 查詢條件 value * @param collectionName * 集合名 * @return */ public static List<? extends Object> find(Object obj, String[] findKeys, Object[] findValues, String collectionName) { Criteria criteria = null; for (int i = 0; i < findKeys.length; i++) { if (i == 0) { criteria = Criteria.where(findKeys[i]).is(findValues[i]); } else { criteria.and(findKeys[i]).is(findValues[i]); } } Query query = Query.query(criteria); List<? extends Object> resultList = mongodbUtils.mongoTemplate.find(query, obj.getClass(), collectionName); return resultList; } /** * 指定集合 根據條件查詢出所有結果集 並排倒序 * * @param obj * 資料物件 * @param findKeys * 查詢條件 key * @param findValues * 查詢條件 value * @param collectionName * 集合名 * @param sort * 排序欄位 * @return */ public static List<? extends Object> find(Object obj, String[] findKeys, Object[] findValues, String collectionName ,String sort) { Criteria criteria = null; for (int i = 0; i < findKeys.length; i++) { if (i == 0) { criteria = Criteria.where(findKeys[i]).is(findValues[i]); } else { criteria.and(findKeys[i]).is(findValues[i]); } } Query query = Query.query(criteria); query.with(new Sort(Direction.DESC, sort)); List<? extends Object> resultList = mongodbUtils.mongoTemplate.find(query, obj.getClass(), collectionName); return resultList; } /** * 根據條件查詢出符合的第一條資料 集合為資料物件中 @Document 註解所配置的collection * * @param obj * 資料物件 * @param findKeys * 查詢條件 key * @param findValues * 查詢條件 value * @return */ public static Object findOne(Object obj, String[] findKeys, Object[] findValues) { Criteria criteria = null; for (int i = 0; i < findKeys.length; i++) { if (i == 0) { criteria = Criteria.where(findKeys[i]).is(findValues[i]); } else { criteria.and(findKeys[i]).is(findValues[i]); } } Query query = Query.query(criteria); Object resultObj = mongodbUtils.mongoTemplate.findOne(query, obj.getClass()); return resultObj; } /** * 指定集合 根據條件查詢出符合的第一條資料 * * @param obj * 資料物件 * @param findKeys * 查詢條件 key * @param findValues * 查詢條件 value * @param collectionName * 集合名 * @return */ public static Object findOne(Object obj, String[] findKeys, Object[] findValues, String collectionName) { Criteria criteria = null; for (int i = 0; i < findKeys.length; i++) { if (i == 0) { criteria = Criteria.where(findKeys[i]).is(findValues[i]); } else { criteria.and(findKeys[i]).is(findValues[i]); } } Query query = Query.query(criteria); Object resultObj = mongodbUtils.mongoTemplate.findOne(query, obj.getClass(), collectionName); return resultObj; } /** * 查詢出所有結果集 集合為資料物件中 @Document 註解所配置的collection * * @param obj * 資料物件 * @return */ public static List<? extends Object> findAll(Object obj) { List<? extends Object> resultList = mongodbUtils.mongoTemplate.findAll(obj.getClass()); return resultList; } /** * 指定集合 查詢出所有結果集 * * @param obj * 資料物件 * @param collectionName * 集合名 * @return */ public static List<? extends Object> findAll(Object obj, String collectionName) { List<? extends Object> resultList = mongodbUtils.mongoTemplate.findAll(obj.getClass(), collectionName); return resultList; } }
- 測試類:
MongodbTest.java
import java.util.List; import java.util.UUID; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import com.hwsoft.invoicecloud.common.mongodb.MongodbUtils; import com.hwsoft.invoicecloud.model.mongodb.MongodbTestModel; @RunWith(SpringRunner.class) @SpringBootTest public class MongodbTest { @Test public void testSave1() { MongodbTestModel mo = new MongodbTestModel(); mo.setMid("123"); mo.setName("MongodbTestModel"); mo.setAge("22"); MongodbUtils.save(mo); } @Test public void testSave2() { MongodbTestModel mo = new MongodbTestModel(); mo.setMid(UUID.randomUUID().toString()); mo.setName("MongodbTestModel"); mo.setAge("22"); MongodbUtils.save(mo, "test23"); } @Test public void testRemove1() { MongodbTestModel mo = new MongodbTestModel(); mo.setMid("5eb1091b-b2a8-4a92-b1a3-4d515e837823"); mo.setName("MongodbTestModel"); mo.setAge("22"); MongodbUtils.remove(mo); } @Test public void testRemove2() { MongodbTestModel mo = new MongodbTestModel(); mo.setMid("a27a0652-a0ed-4d7d-a100-d5f11fe1b844"); mo.setName("MongodbTestModel"); mo.setAge("22"); MongodbUtils.remove(mo, "test23"); } @Test public void testRemove3() { MongodbUtils.removeById("_id", "123", "mongodbTestModel"); } @Test public void testUpdate1() { String accordingKey = "_id"; String accordingValue = "e933f48a-cc68-4993-9069-820ff3adab34"; String[] updateKeys = { "name", "age" }; Object[] updateValues = { "tat", "22222" }; String collectionName = "test23"; MongodbUtils.updateFirst(accordingKey, accordingValue, updateKeys, updateValues, collectionName); } @Test public void testUpdate2() { String accordingKey = "name"; String accordingValue = "tat"; String[] updateKeys = { "age" }; Object[] updateValues = { "000000" }; String collectionName = "test23"; MongodbUtils.updateMulti(accordingKey, accordingValue, updateKeys, updateValues, collectionName); } @Test public void testFind1() { MongodbTestModel obj = new MongodbTestModel(); String[] findKeys = { "age", "name" }; String[] findValues = { "22", "MongodbTestModel" }; List<? extends Object> find = MongodbUtils.find(obj, findKeys, findValues); System.out.println(find); } @Test public void testFind2() { MongodbTestModel obj = new MongodbTestModel(); String[] findKeys = { "name" }; String[] findValues = { "tat" }; String collectionName = "test23"; List<? extends Object> find = MongodbUtils.find(obj, findKeys, findValues, collectionName); System.out.println(find); } @Test public void testFind3() { MongodbTestModel obj = new MongodbTestModel(); String[] findKeys = { "name" }; String[] findValues = { "tat" }; String collectionName = "test23"; Object findOne = MongodbUtils.findOne(obj, findKeys, findValues, collectionName); System.out.println(findOne); } @Test public void testFind4() { List<? extends Object> findAll = MongodbUtils.findAll(new MongodbTestModel()); System.out.println(findAll); } @Test public void testFind5() { List<? extends Object> findAll = MongodbUtils.findAll(new MongodbTestModel(),"test23"); System.out.println(findAll); } }
- 測試實體類:
MongodbTestModel.java
package com.hwsoft.invoicecloud.model.mongodb;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
//@Document(collection="mongodbTestModel") //collection:集合名 類似於關係型資料裡面的 tableName
@Document(collection="mongodbTestModel")
public class MongodbTestModel {
@Id
private String mid;
private String name;
private String age;
public String getMid() {
return mid;
}
public void setMid(String mid) {
this.mid = mid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public String toString() {
return "MongodbTestModel [mid=" + mid + ", name=" + name + ", age=" + age + "]";
}
}
由於MongoTemplate方法眾多,工具類可以有很多擴充套件,在此僅使用到了一些常用的api。