先日はMongoDBのドライバを使ってJavaからアクセスしてみました。
正直使いにくい!と思ってましたが、QConTokyo2012でAWSとMongoDBの話を聞いて、その中でSpring Data - MongoDBの事を聞いたので、試してみました。
Spring Data MongoDBにMavenの設定が書いてあるので、そのとおりにしてみます。あと、cglibも入れておきます。
<repositories> <repository> <id>spring-release</id> <name>Spring Maven Release Repository</name> <url>http://repo.springsource.org/libs-release</url> </repository> </repositories> <dependencies> <dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> <version>2.2.2</version> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb</artifactId> <version>1.0.1.RELEASE</version> </dependency> </dependencies>
プロジェクトが出来たら、設定を書いて行きましょう。
AppConfig.java
@Configuration public class AppConfig { @Bean public MongoOperations mongoTemplate(Mongo mongo) { MongoTemplate mongoTemplate = new MongoTemplate(mongo, "test"); return mongoTemplate; } @Bean public MongoFactoryBean mongo() { MongoFactoryBean mongo = new MongoFactoryBean(); mongo.setHost("localhost"); mongo.setPort(27017); return mongo; } @Bean public PersistenceExceptionTranslationPostProcessor persistenceExceptionTranslationPostProcessor() { return new PersistenceExceptionTranslationPostProcessor(); } }
アプリケーションでは、Documentクラスが必要です。@DocumentアノテーションがついたPOJOを用意しましょう。
Things.java
@Document public class Things { @Id private String id; private String name; private Integer age; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return new StringBuilder() .append("{name=").append(name) .append(",age=").append(age) .append("}").toString(); } }
次に、Thingsにアクセスするためのクラスです。すでにコレクションはある前提です。アプリで無かったら作ることも可能です。
ThingsRepository.java
@Repository public class ThingsRepository { @Autowired MongoOperations mongoOperations; public void save(Things things) { mongoOperations.insert(things); } public List<Things> findAll() { return mongoOperations.findAll(Things.class); } public void update(Things things) { Query query = new Query().addCriteria(new Criteria("name").is(things.getName())); Update update = new Update().set("age", things.getAge()); mongoOperations.updateFirst(query, update, Things.class); } public void remove(Things things) { mongoOperations.remove(things); } }
では、検索して、挿入して、更新して、削除するロジックを書いていきます。
Main.java
public class Main { public static void main(String[] args) { ConfigurableApplicationContext context = new ClassPathXmlApplicationContext("META-INF/spring/bootstrap.xml"); ThingsRepository rep = context.getBean(ThingsRepository.class); System.out.println(rep.findAll()); Things things1 = new Things(); things1.setName("thorikiri"); things1.setAge(32); rep.save(things1); Things things2 = new Things(); things2.setName("thorikiri2"); things2.setAge(30); rep.save(things2); System.out.println(rep.findAll()); things1.setAge(33); rep.update(things1); System.out.println(rep.findAll()); rep.remove(things2); System.out.println(rep.findAll()); rep.remove(things1); System.out.println(rep.findAll()); } }
ね、簡単でしょう?