在Java中使用MongoDb
如何在Java中使用MongoDb
首先需要导入依赖
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>bson</artifactId>
<version>3.11.2</version>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver</artifactId>
<version>3.11.2</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>2.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-core</artifactId>
<version>3.11.2</version>
</dependency>
第二步在配置类里,配好mongonDB的连接路径
spring:
data:
mongodb:
uri: mongodb://student:123456@127.0.0.1:27017/student
# URI形如:mongodb://[username:password@]host1[:port1][,...hostN[:portN]]][/[database][?options]]
第四步写工具类MongoDbUtil(举个栗子)
package com.xiao.lanmao.utils;
import lombok.Data;
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.stereotype.Component;
import org.springframework.util.ObjectUtils;
import java.util.List;
@Component
@Data
public class MongoDbUtil<T> {
@Autowired
private MongoTemplate mongoTemplate;
private static String TENANT_ID = "hh";
/***
* 保存一个集合(对象)(如果数据库中的id和要保存的id一样,那么会被覆盖)
*/
public T save(T t, String collectionName) {
collectionName = TENANT_ID + "-" + collectionName;
createCollection(collectionName);
return this.mongoTemplate.save(t, collectionName);
}
/***
* 根据id从几何中查询对象
*/
public T queryById(Integer id, Class<T> clazz, String collectionName) {
collectionName = TENANT_ID + "-" + collectionName;
createCollection(collectionName);
Query query = new Query(Criteria.where("_id").is(id));
return this.mongoTemplate.findOne(query, clazz, collectionName);
}
/**
* 根据id删除
*/
public int deleteById(Long id, Class<T> clazz, String collectionName) {
collectionName = TENANT_ID + "-" + collectionName;
createCollection(collectionName);
Criteria criteria = Criteria.where("_id").is(id);
if (null != criteria) {
Query query = new Query(criteria);
T obj = this.mongoTemplate.findOne(query, clazz, collectionName);
if (obj != null) {
return (int) this.mongoTemplate.remove(obj, collectionName).getDeletedCount();
}
}
return 0;
}
/**
* 功能描述: 往对应的集合中插入一条数据
*/
public void insert(T info, String collectionName) {
collectionName = TENANT_ID + "-" + collectionName;
createCollection(collectionName);
mongoTemplate.insert(info, collectionName);
}
/**
* 功能描述: 往对应的集合中批量插入数据,注意批量的数据中不要包含重复的id
*/
public void insertMulti(List<T> infos, String collectionName) {
collectionName = TENANT_ID + "-" + collectionName;
createCollection(collectionName);
mongoTemplate.insert(infos, collectionName);
}
/**
* 功能描述: 根据id删除集合中的内容
*/
public void deleteById(String id, Class<T> clazz, String collectionName) {
collectionName = TENANT_ID + "-" + collectionName;
createCollection(collectionName);
// 设置查询条件,当id=#{id}
Query query = new Query(Criteria.where("id").is(id));
mongoTemplate.remove(query, clazz, collectionName);
}
/**
* 功能描述: 查询列表信息
*/
public List<T> selectList(String collectName, Class<T> clazz) {
collectName = TENANT_ID + "-" + collectName;
createCollection(collectName);
return selectList(collectName, clazz, null, null);
}
/**
* 功能描述: 创建一个集合
* 同一个集合中可以存入多个不同类型的对象,我们为了方便维护和提升性能,
* 后续将限制一个集合中存入的对象类型,即一个集合只能存放一个类型的数据
* @param name 集合名称,相当于传统数据库的表名
*/
public void createCollection(String name) {
if (!mongoTemplate.collectionExists(name)) {
mongoTemplate.createCollection(name);
}
}
/**
* 功能描述: 分页查询列表信息
*/
public List<T> selectList(String collectName, Class<T> clazz, Integer currentPage, Integer pageSize) {
collectName = TENANT_ID + "-" + collectName;
createCollection(collectName);
//设置分页参数
Query query = new Query();
//设置分页信息
if (!ObjectUtils.isEmpty(currentPage) && ObjectUtils.isEmpty(pageSize)) {
query.limit(pageSize);
query.skip(pageSize * (currentPage - 1));
}
return mongoTemplate.find(query, clazz, collectName);
}
}
第五步、使用的时候需要写一个实体类(有时候不需要,看情况)
package com.xiao.lanmao.MongoDbDate;
import lombok.Data;
import org.springframework.data.annotation.Id;
@Data
public class PowerDate {
/**
* 学号
* */
@Id
private Integer studentNumber;
/**
* 用户名
* */
private String user;
/**
* 年龄
* */
private Integer age;
}
最后在service中的使用示例
@Autowired
MongoDbUtil mongoDbUtil;
public viod postTestData() {
PowerDate powerDate = new PowerDate();
powerDate.setStudentNumber(135);
powerDate.setUser("名字");
powerDate.setAge(20);
mongoDbUtil.save(powerDate, "MongoDBTableName");
}