使用mongodb的orm映射框架Morphia的一些例子

需要下载mongodb的驱动和Morphia的jar包目前  Morphia最新为0.99不怎么更新了

package org.senssic.mongodb;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.bson.types.ObjectId;

import com.google.code.morphia.Datastore;
import com.google.code.morphia.Morphia;
import com.google.code.morphia.annotations.Embedded;
import com.google.code.morphia.annotations.Entity;
import com.google.code.morphia.annotations.Id;
import com.google.code.morphia.annotations.Indexed;
import com.google.code.morphia.annotations.Property;
import com.google.code.morphia.annotations.Reference;
import com.google.code.morphia.annotations.Transient;
import com.google.code.morphia.query.Query;
import com.google.code.morphia.query.UpdateOperations;
import com.google.code.morphia.utils.IndexDirection;
import com.mongodb.Mongo;

@Entity("wife")
class Wife {
	@Id
	private ObjectId id;
	private String name;
	private int age;

	public ObjectId getId() {
		return id;
	}

	public void setId(ObjectId id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
}

@Embedded
class Address {// 嵌套文档不允许有id
	private int phonNum;
	private String addr;

	public int getPhonNum() {
		return phonNum;
	}

	public void setPhonNum(int phonNum) {
		this.phonNum = phonNum;
	}

	public String getAddr() {
		return addr;
	}

	public void setAddr(String addr) {
		this.addr = addr;
	}
}

@Entity(value = "pro", noClassnameStored = true)
// mongodb中大小写敏感
// noClassnameStored = true 是否在文档中保存类名(如果一个文档中同时存在继承则应该保留)
// 标注实体
class Pro {
	@Id
	// 指定id若为null则数据库会给定id
	private ObjectId id;
	@Property(value = "alias")
	// 重新再数据库中命名
	private String name;
	@Transient
	// 此字段将不会被持久化到数据库中
	private int age;
	@Indexed(value = IndexDirection.ASC, name = "upc", unique = true, dropDups = true)
	// value: 表名这个索引的方向; IndexDirection.ASC(升序),IndexDirection.DESC(降序),
	// IndexDirection.BOTH(两者);默认为 升序。
	// name: 被创建的索引的名称; mongodb默认创建的索引名的格式为(key1_1/-1_key2_1)。
	// unique:
	// 创建一个唯一索引,当创建唯一索引后,当在此字段插入相同的值时将会报错。true:为唯一索引;false:不是唯一索引;默认为:false。
	// dropDups:此参数表明,当为某个字段创建唯一索引时,删除其他相同值的记录。只保留第一条记录。true:删除重复;false:不删除重复(当有重复值时唯一索引创建失败);默认为false。
	// 建立索引 Datastore.ensureIndexes()需要被调用
	private List<String> hobbys;

	@Embedded
	// 映射嵌套文档
	private Address address;
	@Reference
	// 映射其他关联文档 注:此关联文档必须首先存在于数据库中
	// concreteClass: 指定具体的实体类。
	// ignoreMissing: 忽略任何不能解决的参考。
	// lazy: 为参考创建一个代理,这个将在第一次调用时加载(类似Hibernate中的lazy属性)
	// value: 指定在Mongo中存储的属性名。
	private Wife wife;

	public Wife getWife() {
		return wife;
	}

	public void setWife(Wife wife) {
		this.wife = wife;
	}

	public Address getAddress() {
		return address;
	}

	public void setAddress(Address address) {
		this.address = address;
	}

	public ObjectId getId() {
		return id;
	}

	public void setId(ObjectId id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public List<String> getHobbys() {
		return hobbys;
	}

	public void setHobbys(List<String> hobbys) {
		this.hobbys = hobbys;
	}

	@Override
	public String toString() {
		return "名字:" + this.name + "--->年龄:" + this.age;
	}
}

public class MorphiaTast {
	/**
	 * @Description: TODO
	 * @author qiss
	 * @date 2014年6月18日 上午10:21:17
	 */
	public static void main(String[] args) throws Exception {
		Mongo mg = new Mongo();
		Morphia morphia = new Morphia();
		morphia.mapPackage("Pro");
		Datastore ds = morphia.createDatastore(mg, "test");
		ds.ensureIndexes();
		ds.ensureCaps();
		Pro pro = new Pro();
		pro.setName("qiyu");
		pro.setId(new ObjectId(new Date()));
		pro.setAge(20);
		List<String> list = new ArrayList<>();
		list.add("火球");
		list.add("无球");
		pro.setHobbys(list);
		Address address = new Address();
		address.setPhonNum(123456);
		address.setAddr("安徽合肥");
		// 保存嵌套文档
		pro.setAddress(address);
		Wife wife = new Wife();
		wife.setAge(20);
		wife.setName("小丽");
		// 1.保存
		ds.save(wife);
		pro.setWife(ds.find(Wife.class).get());
		ds.save(pro);
		// 2.查询
		Pro p = ds.find(Pro.class).get();// 取得数据库中第一项
		System.out.println(p.toString());
		Query<Pro> query = ds.find(Pro.class);
		@SuppressWarnings("unchecked")
		Iterable<Pro> iterable = (Iterable<Pro>) query.iterator();
		for (Pro pr : iterable) {
			System.out.println(pr);
		}

		p = ds.find(Pro.class).field("name").equal("qiyu").get();// 条件查询
		System.out.println(p);
		// 这里是有效的操作符列表["=", "==", "!=", "<>", ">", "<", ">=", "<=", "in", "nin",
		// "all", "size", "exists"]。如果没有指定操作符默认使用"=",
		//  就像上面的例子,"="和“==”是等价的表示相等,"!="和"<>"是等价的表示不相等。
		List<Pro> ls = ds.find(Pro.class, "name =", "qiyu").asList();
		System.out.println("-------");
		for (Pro pro2 : ls) {
			System.out.println(pro2);
		}
		// 3.删除
		// ds.delete(ds.find(Pro.class, "name =", "qiyu"));// 通过查询删除
		// ds.delete(Pro.class, new ObjectId("53a0e3ccd815c4b3e33ccea1"));//
		// 通过id删除
		// ds.delete(ds.createQuery(Pro.class).filter("name", "sensen"));//
		// 删除过滤项(name为sensen的都删除)
		// FindAndDelete()//如删除一个实体,并且同时返回要删除的项。
		// 4.更新
		List<String> liStrings = new ArrayList<>();
		liStrings.add("上天");
		liStrings.add("下海");
		UpdateOperations<Pro> updateOperations = ds
				.createUpdateOperations(Pro.class).set("name", "lilili")
				.set("hobbys", liStrings);
		ds.update(ds.createQuery(Pro.class), updateOperations);
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
mongodb-orm简介Mongodb ORM是基于java的ORM框架,简化了SDK的使用,使代码变得更清晰、简单。 与Ibatis类似,将查询、执行语句封装在xml中,与代码隔离。简称MQL。 项目中使用加入mongodb orm的支持包1. 添加jar包或maven支持<dependency>     <groupId>com.mongodborm</groupId>     <artifactId>mongodb-orm</artifactId>     <version>0.0.1-RELEASE</version> </dependency>2. 初始化mongodb templet        spring中初始化<bean id="mongoTemplet" class="com.mongodb.client.MongoClientTemplet">     <property name="factory">         <bean class="com.mongodb.client.MongoORMFactoryBean">             <property name="dataSource">                 <bean class="com.mongodb.client.MongoDataSource">                     <property name="nodeList" value="127.0.0.1:27017" />                     <property name="dbName" value="your db name" />                     <property name="userName" value="user name" />                     <property name="passWord" value="password" /> <!-- 可使用默认值 --> <property name="connectionsPerHost" value="" />                     <property name="threadsAllowedToBlock" value="" />                     <property name="connectionTimeOut" value="" />                     <property name="maxRetryTime" value="" />                     <property name="socketTimeOut" value="" />                 </bean>             </property>             <property name="configLocations">                 <list>                     <value>classpath:mql/mongo-mql.xml</value>                 </list>             </property>         </bean>     </property> </bean>        代码初始化    try {       Resource resource =  new ClassPathResource("mongo-mql.xml");           MongoORMFactoryBean factory = new MongoORMFactoryBean();       factory.setConfigLocations(new Resource[]{resource});       factory.init();          MongoClientTemplet templet = new MongoClientTemplet();       templet.setFactory(factory);       templet.init();     } catch(Exception e) {       e.printStackTrace();     }编写MQLMapping<mapping id="model" class="test.mongodborm.Model">         <property column="_id" name="id" />         <property column="name" name="name" />         <property column="time" name="time" value="0" />         <property column="status" name="status" /> </mapping> <mapping id="extendModel" class="test.mongodborm.Model" extends="model">     <property column="newProperty" name="newProperty" /> </mapping>  select<select id="queryModelList" collection="test_sample">     <query class="java.lang.String">         <property column="name" name="${value}" />     </query>     <field mapping="model" />     <order>         <property column="time" value="desc" />     </order> </select> update/findAndModify<update id="updateModel" collection="test_sample">     <query class="test.mongodborm.Model$Child">         <property column="name" name="name" ignoreNull="true" />         <property column="time" operate="gte" value="0" type="number" />         <property column="status" operate="in">             <list type="number">0,1</list>         </property>     </query>     <action class="java.util.Map">         <property column="name" name="name" operate="set" />         <property column="status" operate="set" />     </action> </update>有嵌套的查询<select id="queryModelList3" collection="test_sample">     <query class="java.lang.String">         <property column="_id" value="${value}" />         <property column="time" value="0" type="number" />     </query>     <field class="java.util.Map">         <property column="name" name="name" />         <property column="parent" name="parent">             <value class="test.mongodborm.Model$Parent">                 <property column="name" name="name" />                 <property column="child" name="child">                     <value class="test.mongodborm.Model$Child">                         <property column="name" name="name" />                         <property column="time" name="time" value="0" />                     </value>                 </property>                 <property column="data" name="data">                     <value class="java.util.Map">                         <property column="title" name="title" />                         <property column="content" name="content" />                     </value>                 </property>             </value>         </property>         <property column="data" name="data">             <value class="java.util.Map">                 <property column="title" name="title" />                 <property column="content" name="content" />             </value>         </property>     </field>     <order class="java.util.Map">         <property column="time" name="time" value="desc" />     </order> </select>Templet用法Model model = mongoTemplet.findOne("queryModelList", "yuxiangping"); List<Model> list = mongoTemplet.findOne("queryModelList", ""); Model model = new Model(); model.setTime(1L); Map<String, String> action = new HashMap<String, String>(); action.put("name", "yuxiangping-update"); int update = mongoT emplet.update("updateModel", model, action);        更多的使用方法参见 sample.xml 标签:Mongodb
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值