使用Morphia和Spring

时间:2011-03-19 22:20:30

标签: spring mongodb morphia

Morphia的Google Code网站称​​“与Guice,Spring和其他DI框架配合使用效果非常好。”

我现在正在学习Spring,所以我只是尝试连接这两个工具。 我创建了一个User POJO来在MongoDB中使用Morphia存储用户对象。我还创建了一个UserDAO类,从Morphia扩展BasicDAO来访问对象。

My Spring应用程序上下文配置XML如下所示:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"
           xmlns:aop="http://www.springframework.org/schema/aop">

      <bean class="java.lang.String" id="mongoDb">
        <constructor-arg value="test"/>
      </bean>

      <bean class="com.google.code.morphia.Morphia" id="morphia" />
      <bean class="com.mongodb.Mongo" id="mongo"/>
      <bean class="hu.inagy.testspring.daos.UserDAO" id="userDao">
        <constructor-arg ref="morphia" index="0" />
        <constructor-arg ref="mongo" index="1" />
        <constructor-arg ref="mongoDb" index="2" />
      </bean>

    </beans>

我有一个简单的主类来测试功能:

  public class App 
  {
      public static void main( String[] args )
      {
          ApplicationContext applicationContext = new ClassPathXmlApplicationContext("/app-context.xml");
          UserDAO userDao = (UserDAO) applicationContext.getBean("userDao");

          userDao.deleteByQuery(userDao.createQuery());

          User user = new User();
          user.setName("Test");
          userDao.save(user);

          User ret = userDao.find().get();
          System.out.println("Saved user is: "+ret);
      }
  }

这很好用,但我不知道我是否应该做的一切都应该如此。例如,我没有在数据存储区上调用ensureIndexes()ensureCaps()。我的代码也没有对Morphia对象上的POJO进行显式映射调用。

这些是自动完成的还是我应该做其他事情来正确使用Morphia和Spring?

1 个答案:

答案 0 :(得分:1)

我不使用spring,但这篇文章似乎正好谈论了你需要什么,当应用程序启动时做一些事情:http://leshazlewood.com/2007/07/30/spring-application-bootstrap-data/

您可以在那里执行Datastore.ensureIndexes / Caps()。

如果你喜欢那些东西,你也可以阅读这个关于使用@Autowire和注释而不是xml的帖子。

http://groups.google.com/group/morphia/browse_thread/thread/1013b17963f29468