版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baidu_38990811/article/details/80095088
- MongoDB简介
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引
2.在spring中集成
pom.xml
<!-- mongodb支持库 -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>1.8.0.RELEASE</version>
</dependency>
applicationContext-mongodb.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mongo="http://www.springframework.org/schema/data/mongo"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/data/mongo
http://www.springframework.org/schema/data/mongo/spring-mongo.xsd">
<!-- spring连接mongodb数据库的配置 -->
<mongo:mongo-client id="mongo" credentials="${mongo.credentials}" replica-set="${mongo.replica-set}">
<mongo:client-options write-concern="SAFE"/>
</mongo:mongo-client>
<mongo:db-factory id="mongoDbFactory" dbname="${mongo.database}" mongo-ref="mongo"/>
<!-- 只要使用这个调用相应的方法操作 -->
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/>
</bean>
</beans>
3.CRUD操作
实体:
@Document(collection = "文档名称")
public class xxxx {
@Id
private String id;//唯一标识id:时间戳+随机的6位字符串
private String name;
}
service:
public interface xxxxService {
/**
* 查询所有数据
*
* @return
*/
List<XXX> queryFindAll();
/**
* 用于分页查询
*
* @param skip(第一个坐标为0)
* @param limit
* @return
*/
List<XXX> queryFindList(XXX xx, int skip, int limit);
/**
* 用于分页查询
*
* @param skip(第一个坐标为0)
* @param limit
* @param order asc-升序 desc-降序
* @param sortBy 排序字段
* @return
*/
List<XXX> queryFindList(XXX xx, int skip, int limit, String order, String sortBy);
/**
* 保存用户
*
* @param klineInfo
*/
void save(XXX xxx);
/**
* 根据id查询
*
* @param id
* @return
*/
XXX findOne(String id);
/**
* 根据参数查询
*
* @param klineInfo
* @return
*/
List<XXXX> listAllByCondition(XXX xx);
/**
* 根据条件模糊查询
*
* @param key 键值key
* @param content 模糊匹配content
* @return
*/
List<XXX> listAllByLikeCondition(String key, String content);
/**
* 删除
*
* @param ids
*/
void delete(String... ids);
}
serviceImpl:
@Service("文档名称")
@Transactional
public class XXXServiceImpl implements XXXService {
//MongoTemplate是数据库和代码之间的接口,对数据库的操作都在它里面
@Resource(name = "mongoTemplate")
private MongoTemplate mongoTemplate;
/**
* 保存用户
*
* @param klineInfo
*/
@Override
public void save(XXXX xxx) {
this.mongoTemplate.insert(xxx);
}
/**
* 根据条件查询
*
* @param klineInfo
* @return
*/
@Override
public List<XXX> listAllByCondition(XXX xx) {
Query query = getQuery(xx);
List<XXX> info = this.mongoTemplate.find(query, XXX.class);
return info;
}
/**
* 根据条件模糊查询
*
* @param key 键值key
* @param content 模糊匹配content
* @return
*/
@Override
public List<XXX> listAllByLikeCondition(String key, String content) {
// //完全匹配
// Pattern pattern = Pattern.compile("^王$", Pattern.CASE_INSENSITIVE);
// //右匹配
// Pattern pattern = Pattern.compile("^.*王$", Pattern.CASE_INSENSITIVE);
// //左匹配
// Pattern pattern = Pattern.compile("^王.*$", Pattern.CASE_INSENSITIVE);
//模糊匹配
Pattern pattern = Pattern.compile("^.*" + content + ".*$", Pattern.CASE_INSENSITIVE);
Query query = Query.query(Criteria.where(key).regex(pattern));
List<XXX> list = mongoTemplate.find(query, XXX.class);
return list;
}
/**
* 查询所有
*
* @return
*/
@Override
public List<XXX> queryFindAll() {
return this.mongoTemplate.find(new Query(), XXX.class);
}
/**
* 用于分页查询
*
* @param skip(第一个坐标为0)
* @param limit
* @return
*/
@Override
public List<XXX> queryFindList(XXX xxx, int skip, int limit) {
// TODO Auto-generated method stub
Query query = getQuery(xxx);
query.skip(skip);
query.limit(limit);
return mongoTemplate.find(query, XXX.class);
}
/**
* 用于分页查询
*
* @param skip(第一个坐标为0)
* @param limit
* @param order asc-升序 desc-降序
* @param sortBy 排序字段
* @return
*/
public List<XXX> queryFindList(XXX xxx, int skip, int limit, String order, String sortBy) {
try {
// TODO Auto-generated method stub
Query query = getQuery(xxx);
query.skip(skip);
query.limit(limit);
query.with(new Sort(new Sort.Order((order.equals("asc") ? Sort.Direction.ASC : Sort.Direction.DESC), sortBy)));
return mongoTemplate.find(query, XXX.class);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 条件查询需要的参数
* <br>------------------------------<br>
*
* @param criteriaUser
* @return
*/
private Query getQuery(XXX xxx) {
if (xxx == null) {
xxx = new XXX();
}
Query query = new Query();
if (xxx.getName() != null) {
Criteria criteria = Criteria.where("name").is(xxx.getName());
query.addCriteria(criteria);
}
return query;
}
/**
* 根据id查询
*
* @param id
* @return
*/
@Override
public XXX findOne(String id) {
Query query = new Query();
Criteria criteria = Criteria.where("_id").is(id);
query.addCriteria(criteria);
return this.mongoTemplate.findOne(query, XXX.class);
}
/**
* 删除
*
* @param ids
*/
@Override
public void delete(String... ids) {
if (ids == null || ids.length == 0) {
return;
}
for (String id : ids) {
Query query = new Query(Criteria.where("_id").is(id));
this.mongoTemplate.remove(query, XXX.class);
}
}
}
下一篇:MongoTemplate聚合操作