Spring整合MongoDB
開篇
Spring提供了對非關聯式資料庫的整合,Spring的spring-data包提供了對mongoDB和redis整合的工具包。此篇部落格介紹一下Spring和MongoDB的整合。
匯入工具包
需要的工具包有spring的jar包、spring-common的jar包以及spring-data的mongoDB的jar包。其中,spring的jar包有aop、asm、aspects、beans、context、core、expression、jdbc、transaction等。spring-common的jar包有commons-beanutils、commons-codec、commons-collections、commons-io、commons-lang、commons-logging、commons-pool等。spring-data的mongoDB的jar包有spring-data-commons-aspects、spring-data-commons-core、spring-data-document-core、spring-data-mongodb、spring-data-mongodb-cross-store、spring-data-mongodb-log4j等。另外還有一個是mongo.jar
工具包
設定檔
代碼編寫
實體類:
public class Person implements Serializable { /** * */ private static final long serialVersionUID = 3617931430808763429L; private String id; private String name; private int age; public Person() { super(); } public Person(String id, String name, int age) { super(); this.id = id; this.name = name; this.age = age; } /** * @return the id */ public String getId() { return id; } /** * @param id the id to set */ public void setId(String id) { this.id = id; } /** * @return the name */ public String getName() { return name; } /** * @param name the name to set */ public void setName(String name) { this.name = name; } /** * @return the age */ public int getAge() { return age; } /** * @param age the age to set */ public void setAge(int age) { this.age = age; } /** * * @param name * @param age */ public Person(String name, int age) { super(); this.name = name; this.age = age; } public String toString() { return Person[id=+id+,name=+name+,age=+age+]; } }
DAO層介面
public interface AbstractRepository { public void insert(Person person); public Person findOne(String id); public List findAll(); public List findByRegex(String regex); public void removeOne(String id); public void removeAll(); public void findAndModify(String id); }
DAO層介面實現
public class PersonRepository implements AbstractRepository { private MongoTemplate mongoTemplate; @Override public List findAll() { return getMongoTemplate().find(new Query(), Person.class); } @Override public void findAndModify(String id) { getMongoTemplate().updateFirst(new Query(Criteria.where(id).is(id)), new Update().inc(age, 3)); } @Override public List findByRegex(String regex) { Pattern pattern = Pattern.compile(regex,Pattern.CASE_INSENSITIVE); Criteria criteria = new Criteria(name).regex(pattern.toString()); return getMongoTemplate().find(new Query(criteria), Person.class); } @Override public Person findOne(String id) { return getMongoTemplate().findOne(new Query(Criteria.where(id).is(id)), Person.class); } @Override public void insert(Person person) { getMongoTemplate().insert(person); } @Override public void removeAll() { List list = this.findAll(); if(list != null){ for(Person person : list){ getMongoTemplate().remove(person); } } } @Override public void removeOne(String id) { Criteria criteria = Criteria.where(id).in(id); if(criteria == null){ Query query = new Query(criteria); if(query != null && getMongoTemplate().findOne(query, Person.class) != null) getMongoTemplate().remove(getMongoTemplate().findOne(query, Person.class)); } } /** * @return the mongoTemplate */ public MongoTemplate getMongoTemplate() { return mongoTemplate; } /** * @param mongoTemplate the mongoTemplate to set */ public void setMongoTemplate(MongoTemplate mongoTemplate) { this.mongoTemplate = mongoTemplate; }}測試程式public class MongoTest { private static Log log = LogFactory.getLog(MongoTest.class.getName()); private AbstractRepository pr=null; public void init(){ ApplicationContext ctx = new ClassPathXmlApplicationContext(applicationContext.xml); pr= (PersonRepository)ctx.getBean(personRepository); } public void insert(){ Person p=new Person(cuiran,27); pr.insert(p); } public void findOne(){ String id=50c83cb552c2ceb0463177d6; Person p= pr.findOne(id); log.debug(p); } public void listAll(){ List list=pr.findAll(); for (Person p:list){ log.debug(p.toString()); } } public void start(){ init(); //insert(); //listAll(); findOne(); } public static void main(String[] args) { MongoTest t=new MongoTest(); t.start(); }}
結束
通過Spring整合MongoDB的底層代碼封裝,項目中用到非關係型資料MongoDB儲存就變得容易很多。