利用Spring Data MongoDB持久化文档数据的方法教程
程序员文章站
2024-02-22 13:33:52
前言
本文主要给大家介绍了关于利用spring data mongodb持久化文档数据的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。
介绍...
前言
本文主要给大家介绍了关于利用spring data mongodb持久化文档数据的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。
介绍
- nosql:not only sql,非关系型数据
- mongodb是文档型数据,文档是独立的实体,文档数据库不适用于关联关系明显的数据
spring data mongodb
1.spring data mongodb提供了三种方式在spring应用中使用mongodb
- 通过注解实现对象-文档映射
- 使用mongotemplate实现基于模板的数据库访问
- 自动化的运行时repository生成功能
import java.util.collection; import java.util.linkedhashset; import org.springframework.data.annotation.id; import org.springframework.data.mongodb.core.mapping.document; import org.springframework.data.mongodb.core.mapping.field; /** * spring data mongodb注解将java类型映射为文档 */ @document //这是一个文档 public class order { @id //指定id private string id; @field("client") //覆盖默认的域名 private string customer; private string type; private collection<item> items = new linkedhashset<>(); public string getid() { return id; } public void setid(string id) { this.id = id; } public string getcustomer() { return customer; } public void setcustomer(string customer) { this.customer = customer; } public string gettype() { return type; } public void settype(string type) { this.type = type; } public collection<item> getitems() { return items; } public void setitems(collection<item> items) { this.items = items; } }
2.启用mongodb
- 通过@enablejparepositories注解启用spring data的自动化jpa repository生成功能
- @enablemongorepositories为mongodb实现了相同的功能
第一种方式:
import org.springframework.context.annotation.bean; import org.springframework.context.annotation.configuration; import org.springframework.data.mongodb.mongodbfactory; import org.springframework.data.mongodb.core.mongooperations; import org.springframework.data.mongodb.core.mongotemplate; import org.springframework.data.mongodb.core.simplemongodbfactory; import org.springframework.data.mongodb.repository.config.enablemongorepositories; import com.mongodb.mongoclient; /** * * spring data mongodb的配置 * */ @configuration @enablemongorepositories(basepackages="com.adagio.db") //启用mongodb的repository功能 public class mongoconfig { /** * mongotemplate bean * @param mongodbfactory * @return */ @bean public mongooperations mongotemplate(){ return new mongotemplate(mongodbfactory()); } /** * mongodbfactory bean * @return */ public mongodbfactory mongodbfactory(){ return new simplemongodbfactory(mongoclient(), "com.adagio.db"); } /** * mongoclient bean * @return */ public mongoclient mongoclient(){ return new mongoclient("localhost"); } }
第二种方式
import java.util.arrays; import org.springframework.beans.factory.annotation.autowired; import org.springframework.context.annotation.configuration; import org.springframework.core.env.environment; import org.springframework.data.mongodb.config.abstractmongoconfiguration; import org.springframework.data.mongodb.repository.config.enablemongorepositories; import com.mongodb.mongo; import com.mongodb.mongoclient; import com.mongodb.mongocredential; import com.mongodb.serveraddress; /** * * spring data mongodb的配置 * 扩展abstractmongoconfiguration * */ @configuration @enablemongorepositories(basepackages="com.adagio.db") //启用mongodb的repository功能 public class mongoconfig2 extends abstractmongoconfiguration { @override protected string getdatabasename() { return "ordersdb"; //指定数据库名 } @autowired private environment env; @override public mongo mongo() throws exception { // return new mongoclient(); //创建mongo客户端 //如果mongodb服务器运行在其他的机器上 // return new mongoclient("mongoserver"); //如果mongodb服务器监听的端口不是默认端口27017 // return new mongoclient("mongoserver", 37017); //如果mongodb服务器在生产配置上,启用了认证功能 mongocredential credential = mongocredential.createcredential( env.getproperty("mongo.username") , "ordersdb", env.getproperty("mongo.password").tochararray()); return new mongoclient( new serveraddress("localhost", 37017), arrays.aslist(credential)); } }
3.为模型添加注解,实现mongodb持久化
- 用于对象-文档映射的spring data mongodb注解
@document 标示映射到mongodb文档上的领域对象 类似jpa @entity注解
@id 标示某个域为id域
@dbref 标示某个域要引用的其它的文档,这个文档有可能位于另一个数据库中
@field 为文档域指定自定义的元数据
@version 标示某个属性用作版域 - 注意:没有添加注解的属性,也会持久化为文档中域,除非设置瞬时态(transient)
-
注意:
order.items
属性,不是 关联关系,会完全嵌入到order中
4.使用mongotemplate访问mongodb
- 配置类中配置的mongotemplate bean,将其注入到使用的地方
- @autowired mongooperations mongo;
- mongooperations是mongotemplate所实现的接口
- void save(object objecttosave, string collectionname);
- save第一个参数是新创建的对象,第二个参数是要保存的文档存储的名称
5.编写mongodb repository
- 使用spring data mongodb来创建repository
- 通过@enablemongorepositories注解启用spring data mongodb的repository功能
- 通过扩展mongorepository接口,能够继承多个crud操作
6.查询方式:
- 自定义查询
- 指定查询
- 混合定义查询
//自定义查询 list<order> findbycustomer(string customer); list<order> getbycustomer(string customer); list<order> readbycustomer(string customer); int countbycustomer(string customer); list<order> findbycustomerlike(string customer); list<order> findbycustomerandtype(string customer, string type); list<order> getbytype(string type); //指定查询 @query("{customer:'chuck wagon'}") list<order> findchucksorders();
混合自定义的功能
1.首先,定义中间接口
import java.util.list; public interface orderoperations { list<order> findorderbytype(string t); }
2.编写混合实现
import java.util.list; import org.springframework.beans.factory.annotation.autowired; import org.springframework.data.mongodb.core.mongooperations; import org.springframework.data.mongodb.core.query.criteria; import org.springframework.data.mongodb.core.query.query; public class orderoperationsimpl implements orderoperations { @autowired private mongooperations mongo; //注入mongooperations @override public list<order> findorderbytype(string t) { string type = t.equals("net") ? "web" : t; //创建查询 criteria where = criteria.where("type").is(type); query query = query.query(where); //执行查询 return mongo.find(query, order.class); } }
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。