转自:http://topmanopensource.iyunv.com/blog/1449889
package com.easyway.morphia.mongodb.services;
import org.bson.types.ObjectId;
import com.easyway.morphia.mongodb.dao.IHotelDAO;
import com.easyway.morphia.mongodb.model.Hotel;
/**
*
* @Title: TODO
* @Description: 实现TODO
* @Copyright:Copyright (c) 2011
* @Company:易程科技股份有限公司
* @Date:2012-3-10
* @author
* @version 1.0
*/
public class HotelServiceImpl extends MongoBaseServiceImpl<Hotel, ObjectId> implements IHotelService
{
private IHotelDAO hotelDAO;
public IHotelDAO getHotelDAO() {
return hotelDAO;
}
public void setHotelDAO(IHotelDAO hotelDAO) {
this.hotelDAO = hotelDAO;
super.setBaseDao(hotelDAO);
}
}
package com.easyway.morphia.mongodb.services;
import org.bson.types.ObjectId;
import com.easyway.morphia.mongodb.model.Hotel;
/**
*
* @Title: TODO
* @Description: 实现TODO
* @Copyright:Copyright (c) 2011
* @Company:易程科技股份有限公司
* @Date:2012-3-10
* @author
* @version 1.0
*/
public interface IHotelService extends IMongoBaseService<Hotel, ObjectId>
{
}
package com.easyway.morphia.mongodb.services;
import com.google.code.morphia.Datastore;
import com.google.code.morphia.Key;
import com.google.code.morphia.query.Query;
import com.google.code.morphia.query.QueryResults;
/**
*
* @Title: TODO
* @Description: 实现TODO
* @Copyright:Copyright (c) 2011
* @Company:易程科技股份有限公司
* @Date:2012-3-10
* @author
* @version 1.0
*/
public interface IMongoBaseService<T, K>
{
public long count();
public long count(Query<T> q);
public longcount(String key, Object value) ;
public voiddelete(T entity) ;
public voiddeleteById(K id);
public voiddeleteByQuery(Query<T> q) ;
public booleanexists(Query<T> q);
public booleanexists(String key, Object value) ;
public QueryResults<T>find() ;
public QueryResults<T>find(Query<T> q) ;
public T findOne(Query<T> q) ;
public TfindOne(String key, Object value) ;
public Key<T>save(T entity) ;
public DatastoregetDatastore();
public Tget(K id) ;
public Query<T> createQuery() ;
}
package com.easyway.morphia.mongodb.services;
import com.google.code.morphia.Datastore;
import com.google.code.morphia.Key;
import com.google.code.morphia.dao.DAO;
import com.google.code.morphia.query.Query;
import com.google.code.morphia.query.QueryResults;
/**
*
* @Title: TODO
* @Description: 实现TODO
* @Copyright:Copyright (c) 2011
* @Company:易程科技股份有限公司
* @Date:2012-3-10
* @author
* @version 1.0
*/
public class MongoBaseServiceImpl<T, K> implements IMongoBaseService<T, K>
{
private DAO<T, K> baseDao;
public long count()
{
return baseDao.count();
}
public long count(Query<T> q)
{
return baseDao.count(q);
}
public long count(String key, Object value)
{
return baseDao.count(key, value);
}
public void delete(T entity)
{
baseDao.delete(entity);
}
public void deleteById(K id)
{
baseDao.deleteById(id);
}
public void deleteByQuery(Query<T> q)
{
baseDao.deleteByQuery(q);
}
public boolean exists(Query<T> q)
{
return baseDao.exists(q);
}
public boolean exists(String key, Object value)
{
return baseDao.exists(key, value);
}
public QueryResults<T> find()
{
return baseDao.find();
}
public QueryResults<T> find(Query<T> q)
{
return baseDao.find(q);
}
public T findOne(Query<T> q)
{
return (T) baseDao.findOne(q);
}
public T findOne(String key, Object value)
{
return (T) baseDao.findOne(key, value);
}
public Key<T> save(T entity)
{
return baseDao.save(entity);
}
public DAO getBaseDao()
{
return baseDao;
}
public void setBaseDao(DAO baseDao)
{
this.baseDao = baseDao;
}
public Datastore getDatastore()
{
return baseDao.getDatastore();
}
public T get(K id)
{
return (T) baseDao.get(id);
}
public Query<T> createQuery()
{
return baseDao.createQuery();
}
}
Model:
package com.easyway.morphia.mongodb.model;
import org.bson.types.ObjectId;
import com.google.code.morphia.annotations.*;
/**
*
* @Title: TODO
* @Description: 实现TODO
* @Copyright:Copyright (c) 2011
* @Company:易程科技股份有限公司
* @Date:2012-3-10
* @author
* @version 1.0
*/
@Entity
public class Hotel
{
@Id private ObjectId oid;
private String trackName;
private String address;
public ObjectId getOid() {
return oid;
}
public void setOid(ObjectId oid) {
this.oid = oid;
}
public String getTrackName() {
return trackName;
}
public void setTrackName(String trackName) {
this.trackName = trackName;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
Dao:
package com.easyway.morphia.mongodb.dao;
import org.bson.types.ObjectId;
import com.easyway.morphia.mongodb.model.Hotel;
import com.google.code.morphia.dao.DAO;
/**
*
* @Title: TODO
* @Description: 实现TODO
* @Copyright:Copyright (c) 2011
* @Company:易程科技股份有限公司
* @Date:2012-3-10
* @author
* @version 1.0
*/
public interface IHotelDAO extends DAO<Hotel, ObjectId>
{
}
package com.easyway.morphia.mongodb.dao;
import org.bson.types.ObjectId;
import com.easyway.morphia.mongodb.model.Hotel;
import com.google.code.morphia.Datastore;
import com.google.code.morphia.dao.BasicDAO;
/**
*
* @Title: TODO
* @Description: 实现TODO
* @Copyright:Copyright (c) 2011
* @Company:易程科技股份有限公司
* @Date:2012-3-10
* @author
* @version 1.0
*/
public class HotelDAOImpl extends BasicDAO<Hotel, ObjectId> implements IHotelDAO
{
protected HotelDAOImpl(Datastore ds)
{
super(ds);
}
}
sping和morphia的扩展类:
package com.easyway.morphia.mongodb.ext;
import org.springframework.beans.factory.config.AbstractFactoryBean;
import org.springframework.util.StringUtils;
import com.google.code.morphia.Datastore;
import com.google.code.morphia.Morphia;
import com.mongodb.Mongo;
/**
*
* @Title: 通过扩展AbstractFactoryBean创建 DataStore的FactoryBean类
* @Description: 实现TODO
* @Copyright:Copyright (c) 2011
* @Company:易程科技股份有限公司
* @Date:2012-3-3
* @author
* @version 1.0
*/
public class DataStoreFactoryBean extends AbstractFactoryBean<Datastore> {
private Morphia morphia;
private Mongo mongo;
private String dbName;
private String user;
private String password;
@Override
public Class<?> getObjectType() {
return Datastore.class;
}
@Override
protected Datastore createInstance() throws Exception {
if (StringUtils.hasText(user)) {
return morphia.createDatastore(mongo, dbName, user, password.toCharArray());
}
return morphia.createDatastore(mongo, dbName);
}
@Override
public void afterPropertiesSet() throws Exception {
super.afterPropertiesSet();
if (mongo == null) {
throw new IllegalStateException("mongo is not set");
}
if (morphia == null) {
throw new IllegalStateException("morphia is not set");
}
}
public void setMorphia(Morphia morphia) {
this.morphia = morphia;
}
public void setMongo(Mongo mongo) {
this.mongo = mongo;
}
public void setDbName(String dbName) {
this.dbName = dbName;
}
public void setUser(String user) {
this.user = user;
}
public void setPassword(String password) {
this.password = password;
}
}
package com.easyway.morphia.mongodb.ext;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.BeanCreationException;
import org.springframework.beans.factory.config.AbstractFactoryBean;
import com.mongodb.Mongo;
import com.mongodb.MongoOptions;
import com.mongodb.ServerAddress;
/**
*
* @Title: 通过扩展AbstractFactoryBean创建 Mongo的FactoryBean类
* @Description: 实现TODO
* @Copyright:Copyright (c) 2011
* @Company:易程科技股份有限公司
* @Date:2012-3-10
* @author
* @version 1.0
*/
public class MongoFactoryBean extends AbstractFactoryBean<Mongo> {
private List<ServerAddress> replicaSetSeeds = new ArrayList<ServerAddress>();
private MongoOptions mongoOptions;
@Override
public Class<?> getObjectType() {
return Mongo.class;
}
@Override
protected Mongo createInstance() throws Exception {
if (replicaSetSeeds.size() > 0) {
if (mongoOptions != null) {
return new Mongo(replicaSetSeeds, mongoOptions);
}
return new Mongo(replicaSetSeeds);
}
return new Mongo();
}
public void setMultiAddress(String[] serverAddresses) {
replSeeds(serverAddresses);
}
private void replSeeds(String... serverAddresses) {
try {
replicaSetSeeds.clear();
for (String addr : serverAddresses) {
String[] a = addr.split(":");
String host = a[0];
if (a.length > 2) {
throw new IllegalArgumentException("Invalid Server Address : " + addr);
}else if(a.length == 2) {
replicaSetSeeds.add(new ServerAddress(host, Integer.parseInt(a[1])));
}else{
replicaSetSeeds.add(new ServerAddress(host));
}
}
} catch (Exception e) {
throw new BeanCreationException("Error while creating replicaSetAddresses",e);
}
}
public void setAddress(String serverAddress) {
replSeeds(serverAddress);
}
}
package com.easyway.morphia.mongodb.ext;
import org.springframework.beans.factory.config.AbstractFactoryBean;
import com.google.code.morphia.Morphia;
/**
*
* @Title: 通过继承 AbstractFactoryBean<Morphia> 用来创建 Morphia的工厂bean
*
* @Description: 实现TODO
* @Copyright:Copyright (c) 2011
* @Company:易程科技股份有限公司
* @Date:2012-3-3
* @author
* @version 1.0
*/
public class MorphiaFactoryBean extends AbstractFactoryBean<Morphia> {
private String[] mapPackages;
private String[] mapClasses;
private boolean ignoreInvalidClasses;
@Override
public Class<?> getObjectType() {
return Morphia.class;
}
@Override
protected Morphia createInstance() throws Exception {
Morphia m = new Morphia();
if (mapPackages != null) {
for (String packageName : mapPackages) {
m.mapPackage(packageName, ignoreInvalidClasses);
}
}
if (mapClasses != null) {
for (String entityClass : mapClasses) {
m.map(Class.forName(entityClass));
}
}
return m;
}
public void setMapPackages(String[] mapPackages) {
this.mapPackages = mapPackages;
}
public void setMapClasses(String[] mapClasses) {
this.mapClasses = mapClasses;
}
public void setIgnoreInvalidClasses(boolean ignoreInvalidClasses) {
this.ignoreInvalidClasses = ignoreInvalidClasses;
}
}
spring的配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"
default-autowire="byName">
<context:annotation-config />
<!-- 导入属性配置文件 -->
<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath*:Mongo-db.properties</value>
</list>
</property>
</bean>
<bean id="mongo" class="com.mongodb.Mongo">
<constructor-arg index="0">
<value>${mongo.db.host}</value>
</constructor-arg>
</bean>
<bean id="morphia" class="com.easyway.mongodb.ext.MorphiaFactoryBean">
<property name="mapClasses">
<value>com.easyway.mongodb.model.Hotel</value>
</property>
</bean>
<bean id="datastore" class="com.easyway.mongodb.ext.DataStoreFactoryBean" >
<property name="morphia">
<ref bean="morphia"/>
</property>
<property name="mongo">
<ref bean="mongo"/>
</property>
<property name="dbName">
<value>
${mongo.db.databaseName}
</value>
</property>
</bean>
<bean id="hotelDAO" class="com.easyway.mongodb.dao.HotelDAO" >
<constructor-arg index="0" >
<ref bean="mongo"/>
</constructor-arg>
<constructor-arg index="1" >
<ref bean="morphia"/>
</constructor-arg>
<constructor-arg index="2" >
<value>
${mongo.db.databaseName}
</value>
</constructor-arg>
</bean>
</beans>
测试类如下:
package com.easyway.morphia.mongodb.app;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.easyway.morphia.mongodb.model.Hotel;
import com.easyway.morphia.mongodb.services.IHotelService;
/**
*
* @Title: TODO
* @Description: 实现TODO
* @Copyright:Copyright (c) 2011
* @Company:易程科技股份有限公司
* @Date:2012-3-10
* @author
* @version 1.0
*/
public class HotelApp {
public static void main(String[] args) {
ApplicationContext ctx=new ClassPathXmlApplicationContext("classpath:applicationContext-resource.xml");
IHotelService hotelSrv=(IHotelService)ctx.getBean("trackService");
Hotel hotel=new Hotel();
hotel.setAddress("Model 168地址 ");
hotel.setTrackName("跟踪地址");
hotelSrv.save(hotel);
}
}
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com