Springboot之mongodb操作 mongoTemplate使用
mongoTemplate引入
MongoDB+Spring Boot的项目,相较于MyBatis来说,Spring Boot对于MongoDB进行操作变化更多。
项目中引入mongodb依赖包 pom.xml配置文件中添加如下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
注解引入使用
// 引入mongoTemplate对象
@Autowired
MongoTemplate mongoTemplate;
mongodb集合对象定义, 需要注解 @Document(collection = "collection名称")
@Document(collection = "myuser")
public class MyUser implements Serializable {
//主键ID
@Id
private String id;
// 姓名
@Field("mName")
private String name;
......省略其他属性
}
备注:
-
@Id 注解 设置的主键由MongoDB来自动生成,相比较自己设置效率会高很多。
-
@Document是mongodb驱动库提供设置操作的文档集合名称的注解,实体由mongodb来维护。
mongoTemplate java实例代码
Service代码实现 mongodb集合数据的 增删改查操作
@Service
public class MyUserService {
@Autowired
MongoTemplate mongoTemplate;
public boolean add(MyUser myUser) {
long unixTime = System.currentTimeMillis() / 1000L;
int nowUnixTime = (int) unixTime;
myUser.setCreated(nowUnixTime);
/**
* 语法:<T> T mongoTemplate.save(T objectToSave)
* save方法用于保存数据对象,传递定义好的JavaBean即可,被保存的数据对象会作为返回值被返回。
* 类似地,使用insert也可以达到保存数据的作用。
*/
MyUser obj = mongoTemplate.save(myUser);
if (obj.getId() > 0) {
return true;
} else {
return false;
}
}
/**
* 获取所有数据
* @return
*/
public List<MySworder> findAll() {
/**
* 语法:<T> List<T> findAll(Class<T> entityClass)
* finAll会返回所有entityClass对应的数据集合的数据,相当于MySQL中select * from xxx_table_name。
*/
return mongoTemplate.findAll(MyUser.class);
}
public boolean update(MyUser myUser) {
// 创建查询对象
Query query = Query.query(Criteria.where("id").is(myUser.getId()));
Update update = new Update();
update.set("name", MyUser.getName());
/**
* 语法:public UpdateResult updateFirst(Query query, UpdateDefinition update, Class<?> entityClass)
* updateFirst用于更新第一个被匹配的数据,query参数是查询条件对象,update是需要更新的数据对象,entityClass就是对应的JavaBean对象(文档集合类)
*/
UpdateResult updateResult = mongoTemplate.updateFirst(query, update, MyUser.class);
if (updateResult.getModifiedCount() > 0) {
return true;
} else {
return false;
}
}
public boolean updateBatchByKeyWords(String searchKey,String replaceString) {
// 创建模糊查询对象
Pattern pattern = Pattern.compile("^.*" + searchKey + ".*$", Pattern.CASE_INSENSITIVE);
Criteria criteria = Criteria.where("description").regex(pattern);
Update update = new Update();
update.set("description", replaceString);
Query query = new Query();
query.addCriteria(criteria);
/**
* 语法:public UpdateResult updateMulti(Query query, UpdateDefinition update, Class<?> entityClass)
* updateMulti用于所有被匹配的数据,query参数是查询条件对象,update是需要更新的数据对象,entityClass就是对应的JavaBean对象(文档集合类)
*/
UpdateResult updateResult = mongoTemplate.updateMulti(query, update, MyUser.class);
if (updateResult.getModifiedCount() > 0) {
return true;
} else {
return false;
}
}
public boolean delete(String id) {
MyUser myUser = new MyUser();
myUser.setId(id);
/**
* 语法: DeleteResult remove(Object object)
* 该方法用于删除数据,一般都是传递一个主键ID即可
*/
DeleteResult deleteResult = mongoTemplate.remove(myUser);
if (deleteResult.getDeletedCount() > 0) {
return true;
} else {
return false;
}
}
public MySworder details(String id) {
Query query = Query.query(Criteria.where("id").is(id));
/**
* <T> T findOne(Query query, Class<T> entityClass)
*
* findOne就是根据查询条件(query)获取一条数据。
*/
return mongoTemplate.findOne(query, MyUser.class);
}
}