当前位置:首页 > 开发 > 开源软件 > 正文

java开源mongodb orm框架

发表于: 2014-12-10   作者:eason.xp.yu   来源:转载   浏览次数:
摘要: 背景     公司之前要做一个互联网产品,由于产品的特性,决定使用NoSQL数据库mongodb作为底层存储。       在项目进入开发阶段时,发现使用mongodb的java driver是件非常头疼的事。像当年写jdbc一样,拼写查询条件,结果集转换。业务逻辑里就出现了很多重复的代码使得项目整体变得臃肿。    

背景

    公司之前要做一个互联网产品,由于产品的特性,决定使用NoSQL数据库mongodb作为底层存储。

 

    在项目进入开发阶段时,发现使用mongodb的java driver是件非常头疼的事。像当年写jdbc一样,拼写查询条件,结果集转换。业务逻辑里就出现了很多重复的代码使得项目整体变得臃肿。

 

    在网上找了一些开源的orm框架,包括Morphia。确实简化了很多代码,与driver的sdk也进行了隔离,不过用起来还是感觉不太方便,operater都封装成了方法,却没有覆盖所有的。还有就是还是跟driver的使用一样,数据库的操作全部写在代码里了,假如要修改一个查询操作的状态值我必须修改代码重新编译。

 

    最后决定自己写一个简单的类似ibatis的框架,只需要满足当前业务的需求即可,于是在接下来的三周都挤一些时间来完成这个部分。结果比预期的要好,同事在使用的时候也都比较认可,便采用到了各个项目中。

 

    由于当时时间有限,与的比较快,总体结构不是很好,现在整理出来方便以后可以使用。与其他ORM框架不一样的地方是所有的数据库操作都是在配置文件中的,可以很方便的维护配置文件。

 

    Mongodb-orm 代码托管在github上 https://github.com/yuxiangping/mongodb-orm   有兴趣的可以看看。 

 

    介绍一下项目中的使用

    1.  使用时加入该jar包依赖

    2.  使用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="192.168.1.0:80,192.168.1.1:8080,192.168.1.2:80" />
						<property name="dbName" value="yourDBName" />
						<property name="userName" value="userName" />
						<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/model1-mql.xml</value>
						<value>classpath:mql/model2-mql.xml</value>
					</list>
	            </property>
	        </bean>
	    </property>
	</bean>

 

   也可以使用代码进行实例化

 

    3.  代码中使用MongoTemplet即可实现对数据库的操作。

public class MongoORMTest {

  private MongoTemplet templet;
  
  public Model findOne() {
    String id = "xxxxx";
    return templet.findOne("findByID", id);
  }
  
  public List<Model> findList() {
    Map parameter = new HashMap();
    parameter.put("status", 1);
    
    int skip = 0;
    int limit = 20;
    
    return templet.find("findList", parameter, limit, skip);
  }
  
  public String insert() {
    Model model = new Model();
    model.setName("xxxxx");
    model.setTime(System.currentTimeMillis());
    
    return templet.insert("insert", model);
  }
  
  public void update() {
    Map parameter = new HashMap();
    parameter.put("time", 1);
    parameter.put("status", 1);
    
    templet.update("update", parameter);
  }
  
}

 

     MongoTemplet根据用户指定的statement找到配置文件并执行。

 

     上面示例中的代码需要以下的配置文件支持

      

<mql>
	<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>

	<select id="findByID" collection="test_sample">
		<query class="java.lang.String">
			<property column="_id" name="${value}" type="objectid"/>			
		</query>
		<field mapping="model" />
	</select>

	<select id="findList" collection="test_sample">
		<query class="java.util.Map">
			<property column="status" name="status">
		</query>
		<field mapping="model" />
	</select>

	<insert id="insert" collection="test_sample">
		<document mapping="model" />
	</insert>	
		
	<update id="update" collection="test_sample">
		<query class="java.util.Map">
			<property column="time" operate="gte" name="time"/>
		</query>
		<action class="java.util.Map">
			<property column="status" operate="set" name="status" />
		</action>
	</update>

</mql>

 

     完成以上步骤就可以在项目中进行使用了。更多的用法及支持可以访问 github

    

java开源mongodb orm框架

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
SubSonic 3.0简介 接触到SubSonic3.0 ORM框架是看了AllEmpty大神的从零开始编写自己的C#框架(链接
前言 本教程介绍了作者自行设计和开发的XDesigner.ORM应用程序框架,预计的读者是C#的中级或者高级
ORM的全称是Object Relational Mapping,即对象关系映射。它的实质就是将关系数据(库)中的业务数
DWR DWR(Direct Web Remoting)是一个WEB远程调用框架.利用这个框架可以让AJAX开发变得很简单.利用DW
<!----> 输入您的搜索字词 提交搜索表单 Web www.open-open.com <!----> <script ty
WebWork WebWork是由OpenSymphony组织开发的,致力于组件化和代码重用的拉出式MVC模式J2EE Web框架
一行代码调用实现带字段选取+条件判断+排序+分页功能的增强ORM框架 问题:3行代码 PDF.NET 是一
有关java各种框架的基础设计,笔者经验之谈,算是小结吧!:) 一, Hibernate 部分 1,简述hibernate映射
V1.1到V1.2的更新,重构了很多类及方法,其中主要做了性能优化(取消所有反射,使用表达式树+缓存)
提交版本V1.2.1 1、修复实体未设置主键时,无法找到主键ID字段,改为无主键时默认为"ID”字段 2、新
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号