mongodb开发--java

mongodb开发---java方式

java方式操作mongodb数据库常用的两种方式:1.使用spring提供的repository接口;2.使用mongoTemplate工具类。
1.mongoDB与spring boot集成及使用reposity
注解:
1.@Document : 映射领域模型和文档(类似于mysql中的表)
2.@Id:注解表明这个属性值为文档的id
3.@Field(""):将该字段映射到文档中,并自定义key名
4.@Indexed : 标识需要进行索引的对象
5.@DocumentId : 用于标示实体类中的唯一的属性保存在索引文件中,是当进行全文检索时可以这个
唯一的属性来区分索引中其他实体对象,一般使用实体类中的主键属性
6.@DBRef  对象关联(类似于sql的外键关联,可以关联查询)

Repository:
Repository 接口概述
Repository 接口是 Spring Data 的一个核心接口,它不提供任何方法,开发者需要在自己定义的接口中声明需要的方法 
public interface Repository<T, ID extends Serializable> { } 
Spring Data可以让我们只定义接口,只要遵循 Spring Data的规范,就无需写实现类。与继承 Repository 等价的一种方式,就是在持久层接口上使用 @RepositoryDefinition 注解,并为其指定 domainClass 和 idClass 属性。如下两种方式是完全等价的。
Repository 的子接口
基础的 Repository 提供了最基本的数据访问功能,其几个子接口则扩展了一些功能。它们的继承关系如下: 
      Repository: 仅仅是一个标识,表明任何继承它的均为仓库接口类   
CrudRepository: 继承 Repository,实现了一组 CRUD 相关的方法 
PagingAndSortingRepository: 继承 CrudRepository,实现了一组分页排序相关的方法 
MongoRepository: 继承 PagingAndSortingRepository,实现一组 mongodb规范相关的方法 
自定义的 XxxxRepository 继承 MongoRepository,这样的 XxxxRepository 接口就具备了通用的数据访问
控制层的能力。
自定义接口时和使用jpa自定义的方式一样,例子如下:
//0.相等
public List<Book> findByTitle(@Param("title") String title);
//1.大于  GreaterThan
List<Book> findByAgeGreaterThan(int age);

// 2.小于 LessThan
List<Book> findByAgeLessThan(int age);

// 3.在..之间  Between
List<Book> findByAgeBetween(int start,int end);

// 4.是否非空  IsNotNull,NotNull
List<Book> findByAgeIsNotNull(); 

// 5.是否为null  IsNull Null
List<Book> findByAgeNull();

// 6.模糊查询  like
List<Book> findByTitleLike(String title);

// 7.不包含 NOT,也可以添加分页参数
Page<Book> findByAgeNot(int age,Pageable page);

// 8.在进行复杂查询时,使用上面的方法可能不是太好,使用@Query注解来进行负责查询
//:使用的是mongodb原生的查询语句,通过坐标来定义方法的参数
@Query("{ 'name':{'$regex':?2,'$options':'i'}, sales': {'$gte':?1,'$lte':?2}}")  
public Page<Book> findByNameAndAgeRange(String name,double ageFrom,double ageTo,Pageable page);  

//还可以在后面通过fields属性指定要返回的数据字段,如上面的例子修改如下,则只通过Book表里面的name和age
字段构建Book对象。 
@Query(value="{ 'name':{'$regex':?2,'$options':'i'}, sales':{'$gte':?1,'$lte':?2}}",fields="{ 'name' : 1, 'age' : 1}")   
public Page<Book> findByNameAndAgeRange2(String name,double ageFrom,double ageTo,Pageable page);  


2.使用mongoTemplate
springboot集成mongoTemplate需要导入以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
使用spring parent的版本也有要求,使用1.4.5时不能导入mongoTemplate包,但1.4.3和1.5.1都可以正常导入。
<!-- 增加spring boot热部署:更改代码后自动重启项目 -->
 <dependency>  
<groupId>org.springframework.boot</groupId>  
<artifactId>spring-boot-devtools</artifactId>  
<optional>true</optional>
<!-- optional=true,依赖不会传递,该项目依赖devtools;之后依赖myboot项目的项目如果想要使用devtools,
需要重新引入 -->  
</dependency>

// 		创建集合
//		DBCollection createCollection = mongoTemplate.createCollection(Person.class);
		//判断集合是否存在
//		Boolean isExist = mongoTemplate.collectionExists(Person.class);
		//删除集合
//		mongoTemplate.dropCollection(Person.class);
		//插入文档
//		Person p = new Person(null, "张三", 23, new Date());
//		mongoTemplate.insert(p, collection_name_person);
//		mongoTemplate.findById(id, entityClass)
		
		//通过id查找
//		p = mongoTemplate.findById("58bb95f41aaa4b05e463c2c4",Person.class,collection_name_person);
//		log.info("findById:"+p);
		
		//删除:通过id
//		mongoTemplate.remove(p,collection_name_person);
		
		//批量插入		
//		List<Person> ps1= generatorList();
//		mongoTemplate.insert(ps1, Person.class);
		//全部取出
//		List<Person> ps2 = mongoTemplate.findAll(Person.class, collection_name_person);
		
		//分页查询
//		Query q = new Query();
//		q.skip(2);
//		q.limit(3);
//		List<Person> ps3 = mongoTemplate.find(q, Person.class);
		
		//条件查询:query  Criteria
//		Query q = new Query();
//		Criteria c= new Criteria("age");
//		c.gt(8);
//		q.addCriteria(c);
//		List<Person> ps4 = mongoTemplate.find(q, Person.class);
		
		//更新
//      mongoTemplate.updateFirst();//进行第一条符合要求的数据更新
//      mongoTemplate.updateMulti();//进行更新多行数据
//		mongoTemplate.upsert(query, update, entityClass)更新
//		mongoTemplate.updateMulti(query, update, entityClass, collectionName) 批量更新
//		mongoTemplate.upsert(query, update, entityClass)// 存在则更新,不存在则插入
//		mongoTemplate.save(objectToSave, collectionName);  根据id进行替换整个文档
//		mongoTemplate.count(query, entityClass, collectionName) 查询总记录数
		
		//删除
//		mongoTemplate.dropCollection(entityClass); 删除集合
//		mongoTemplate.remove(query, entityClass, collectionName) 删除文档
		
		//查询
//		mongoTemplate.findOne();//单个结果查询操作
//		mongoTemplate.exists(query, entityClass)判断是否存在
//		mongoTemplate.findAllAndRemove(query, entityClass, collectionName) 查出后删除
//		mongoTemplate.findAndModify(query, update, entityClass, collectionName)  查出后更新
//		mongoTemplate.group(inputCollectionName, groupBy, entityClass)  分组

  使用Criteria和query对象进行条件查询
//1
//		Query q1 = new Query();
//		Criteria c1 = new Criteria();
//		c1.where("name");
//		c1.is("张三");
//		q1.addCriteria(c1);
//		Person p  = mongoTemplate.findOne(q1, Person.class, collection_name_person);
		
		//2  and条件查询
//		Query q2 = new Query();
//		Criteria c2 = new Criteria("age");
//		c2.gte(20).and("name").is("张三");
//		q2.addCriteria(c2);
//		List<Person> ps  = mongoTemplate.find(q2, Person.class, collection_name_person);
		
		//in查询(转载)
//		List<String> authors = Arrays.asList("yinjihuan", "jason");
//		query = Query.query(Criteria.where("author").in(authors));
//		articles = mongoTemplate.find(query, Article.class);
		
		
		
		//or条件查询  没成功
//		Query q3 = new Query();
//		Criteria c3 = new Criteria("age");
//		c3.lte(20);
//		Criteria c4 = new Criteria("name");
//		c4.is("张三");
//		c3.orOperator(c4);
//		c3.andOperator(criteria) and操作
//		q3.addCriteria(c3);
//		List<Person> ps2  = mongoTemplate.find(q3, Person.class, collection_name_person);

其实和查询语句中的设置相类似。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值