1、建立连接
添加配置信息 application-dev.properties
spring.data.mongodb.host= ip地址
spring.data.mongodb.port= 端口号
spring.data.mongodb.database= 数据库名
2、启动类加扫描包注解
@EnableMongoRepositories( basePackages={"com. ? .mongodb.dao"})
3、案例
3.1、po实体层
import lombok.Builder;
import lombok.Data;
import org.springframework.data.mongodb.core.mapping.Document;
import javax.persistence.Id;
import java.io.Serializable;
import java.util.Date;
import com.mongodb.MongoClient;
@Data
@Document(collection = "Po")
@Builder
public class Po implements Serializable{
/**
*
*/
private static final long serialVersionUID = -7412369913295735975L;
@Id
private String id;
private String nick;
private String page;//url的别名
private String url;//page的别名
private Long pv;
private Long uv;
private Date createDate;
private Long dateNo;
public static long getSerialVersionUID() {
return serialVersionUID;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
// …… get/set ……
}
3.2、dao层
方法声明
import java.util.List;
public interface PoDao {
/**
* 查找 某用户 浏览的页面路径 集合
* @param nick
* @return
*/
List<String> listnickPage(String nick);
/**
* 判断 某用户 是否浏览过某页面
* @return
*/
Boolean isnickPage(String nick,String page);
}
方法实现
import com.mongodb.Mongo;
import lombok.extern.slf4j.Slf4j;
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.Repository;
import java.util.ArrayList;
import java.util.List;
@Repository("PoDao")
@Slf4j
public class PoDaoImpl implements PoDao {
@Autowired
private MongoTemplate mongoTemplate;
// MongoTemplate mongoTemplate = new MongoTemplate(new Mongo(),"promote");
/**
* 查找 某用户 浏览的页面路径 集合
* @param nick
* @return
*/
@Override
public List<String> listnickPage(String nick) {
log.info("\n\n"+nick+"浏览过的页面集合");
Query query=new Query();
// Criteria criteria=new Criteria();
// query.addCriteria(criteria);
//根据 nick 查询
query.addCriteria(Criteria.where("nick").is(nick));
// query.fields().include("nick").include("create").exclude("_id");
List<Po> usernicks = mongoTemplate.find(query, Po.class,"Po");
List<String> urls = new ArrayList<>();
for (Po s : usernicks
) {
// System.out.println(s);
urls.add(s.getUrl());
}
return urls;
}
/**
* 判断 某用户 是否浏览过某页面
* @return
*/
@Override
public Boolean isnickPage(String nick, String page) {
log.info("\n\n"+nick+"是否浏览过这个页面:"+page);
Query query=new Query();
Criteria criteria=new Criteria();
criteria.and("nick").is(nick).and("url").is(page);
query.addCriteria(criteria);
// query.fields().include("nick").include("create").exclude("_id");
Po Po = mongoTemplate.findOne(query, Po.class,"Po");
//int count = list.size();
// System.out.println("count:"+count);
//log.info(nick+"用户浏览这个"+page+"页面的次数:"+count);
if(Po!=null){
return true;
}
else return false;
}
}
3.3、service层
import java.util.List;
public interface PoService {
/**
* 查找 某用户 浏览的页面路径 集合
* @param nick
* @return
*/
List<String> listnickPage(String nick);
/**
* 判断 某用户 是否浏览过某页面
* @return
*/
Boolean isnickPage(String nick,String page);
}
import com.bbt.oper.mongodb.dao.PoDao;
import com.bbt.oper.mongodb.service.PoService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Slf4j
@Service("PoService")
public class PoServiceImpl implements PoService {
@Resource
private PoDao PoDao;
/**
* 查找 某用户 浏览的页面路径 集合
* @param nick
* @return
*/
@Override
public List<String> listnickPage(String nick) {
return PoDao.listnickPage(nick);
}
/**
* 判断 某用户 是否浏览过某页面
* @return
*/
@Override
public Boolean isnickPage(String nick, String page) {
log.info("判断 某用户 是否浏览过某页面\t\tPoService");
return PoDao.isnickPage(nick,page);
}
}
3.4、业务调用
@Resource
PoService PoService;
Boolean flag = PoService.isnickPage(model.getNick(), page); //促这个用户是否浏览过 page 页面
4、常用语法
@Autowired
private MongoTemplate mongoTemplate;
4.1、插入
mongoTemplate.insert(poObject);
4.2、查找
查所有:
mongoTemplate.findAll(PoObject.class);
根据 id 查找单个
PoObject poObject = mongoTemplate.findById(id,PoObject.class);
分页查询
Query query = new Query();
query.skip("跳过多少的数据再开始查询").limit("每一页的数据的个数");
mongoTemplate.find(query, PoObject.class);
条件查询(大于小于)
Criteria criteria = Criteria.where("判断的字段").gte(min).lte(max);
Query query = new Query(criteria);
mongoTemplate.find(query, PoObject.class);
模糊查询
query.addCriteria(Criteria.where("name").regex(PoObject.getName()));
4.3、更新
mongoTemplate.updateFirst(query(where("name").is("老王")),Update.update("name","老程"),PoObject.class);
4.4、删除
mongoTemplate.remove(poObject);
要了解更多可以仔细看看这三个类
Criteria、Query、MongoTemplate
一步入十坑,一日落万发……