java开源mongodb orm框架

背景

    公司之前要做一个互联网产品,由于产品的特性,决定使用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

    

猜你喜欢

转载自eason-xp-yu.iteye.com/blog/2164843