日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

java中mongodb中dao通用_Spring配置MongoDB及 构建通用Dao

發布時間:2024/9/30 javascript 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中mongodb中dao通用_Spring配置MongoDB及 构建通用Dao 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

(文章的編寫雖然不至于花費很多時間,但轉載請注明來源。本文參考了:http://liuluo129.iteye.com/blog/1994045,在此基礎上進行了部分優化,及詳細的介紹了流程)

1.首先引入Maven 依賴,如果不是用Maven管理項目,那么應該下載對應的Jar包并添加到項目lib下

1

2 org.springframework.data

3 spring-data-mongodb

4 1.4.1.RELEASE

5

6

7

8 org.mongodb

9 casbah_2.9.3

10 2.7.0-RC2

11

2.Spring中配置MongoDB,創建 spring-mongo.xml

http://www.springframework.org/schema/context/spring-context-3.2.xsd

http://www.springframework.org/schema/data/mongo

http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">

3.?config.properties 內容

#--------------MongoDB

mongo.host=localhost

mongo.port=27017mongo.connectionsPerHost=8mongo.threadsAllowedToBlockForConnectionMultiplier=3mongo.connectTimeout=3000mongo.maxWaitTime=1500mongo.autoConnectRetry=truemongo.socketKeepAlive=truemongo.socketTimeout=2000mongo.slaveOk=true

4.將spring-mongo.xml引入到web.xml 目的當然是使Spring容器能檢測并加載到容器中

springmvc

org.springframework.web.servlet.DispatcherServlet

contextConfigLocation

classpath*:/applicationContext-mvc.xml,classpath*:/applicationContext-data-jpa.xml,classpath*:/spring-mongo.xml

1

5.關鍵的部分 注解及查詢套件的構建

QueryField.java

importjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;importjava.lang.annotation.Target;/*** type表示查詢類似,默認為equals

* attribute表示要查詢的屬性,默認為空串,如果為空則為字段名稱*/@Target(ElementType.FIELD)

@Retention(RetentionPolicy.RUNTIME)public @interfaceQueryField {

QueryType type()defaultQueryType.EQUALS;

String attribute()default "";

}

QueryType.java

importorg.springframework.data.mongodb.core.query.Criteria;importorg.springframework.util.StringUtils;importjava.lang.reflect.Field;importjava.util.List;/*** 查詢媒介

* 1. equals:相等

* 2. like:mongodb的like查詢

* 3. in:用于列表的in類型查詢*/

public enumQueryType {

EQUALS {

@OverridepublicCriteria buildCriteria(QueryField queryFieldAnnotation, Field field, Object value) {if(check(queryFieldAnnotation, field, value)) {

String queryField=getQueryFieldName(queryFieldAnnotation, field);returnCriteria.where(queryField).is(value.toString());

}return newCriteria();

}

},

LIKE {

@OverridepublicCriteria buildCriteria(QueryField queryFieldAnnotation, Field field, Object value) {if(check(queryFieldAnnotation, field, value)) {

String queryField=getQueryFieldName(queryFieldAnnotation, field);returnCriteria.where(queryField).regex(value.toString());

}return newCriteria();

}

},

IN {

@OverridepublicCriteria buildCriteria(QueryField queryFieldAnnotation, Field field, Object value) {if(check(queryFieldAnnotation, field, value)) {if (value instanceofList) {

String queryField=getQueryFieldName(queryFieldAnnotation, field);//此處必須轉型為List,否則會在in外面多一層[]

return Criteria.where(queryField).in((List>)value);

}

}return newCriteria();

}

};private static booleancheck(QueryField queryField, Field field, Object value) {return !(queryField == null || field == null || value == null);

}public abstractCriteria buildCriteria(QueryField queryFieldAnnotation, Field field, Object value);/*** 如果實體bean的字段上QueryField注解沒有設置attribute屬性時,默認為該字段的名稱

*

*@paramfield

*@return

*/

private staticString getQueryFieldName(QueryField queryField, Field field) {

String queryFieldValue=queryField.attribute();if (!StringUtils.hasText(queryFieldValue)) {

queryFieldValue=field.getName();

}returnqueryFieldValue;

}

}

QueryField.java和QueryType.ava的編寫的目的是為了公用Dao服務。注意不要引入錯誤的包。

6.公用Dao的構建

MongoDao.java

packagenet.shopxx.commons.component.mongo;importorg.springframework.data.mongodb.core.MongoTemplate;importorg.springframework.data.mongodb.core.query.Query;importorg.springframework.data.mongodb.core.query.Update;importjava.util.List;public interface MongoDao{//保存一個對象到mongodb

publicT save(T bean);//根據id刪除對象

public voiddeleteById(T t);//根據對象的屬性刪除

public voiddeleteByCondition(T t);//通過條件查詢更新數據

public voidupdate(Query query, Update update);//根據id進行更新

public voidupdateById(String id, T t);//通過條件查詢實體(集合)

public Listfind(Query query);public ListfindByCondition(T t);//通過一定的條件查詢一個實體

publicT findOne(Query query);//通過ID獲取記錄

publicT get(String id);//通過ID獲取記錄,并且指定了集合名(表的意思)

publicT get(String id, String collectionName);publicMongoTemplate getMongoTemplate();

}

實現類MongoDaoSupport.java

importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.beans.factory.annotation.Qualifier;importorg.springframework.data.mongodb.core.MongoTemplate;importorg.springframework.data.mongodb.core.query.Criteria;importorg.springframework.data.mongodb.core.query.Query;importorg.springframework.data.mongodb.core.query.Update;importjava.lang.reflect.Field;importjava.lang.reflect.ParameterizedType;importjava.util.List;public abstract class MongoDaoSupport implements MongoDao{

@Autowired

@Qualifier("mongoTemplate")protectedMongoTemplate mongoTemplate;//保存一個對象到mongodb

publicT save(T bean) {

mongoTemplate.save(bean);returnbean;

}//根據id刪除對象

public voiddeleteById(T t) {

mongoTemplate.remove(t);

}//根據對象的屬性刪除

public voiddeleteByCondition(T t) {

Query query=buildBaseQuery(t);

mongoTemplate.remove(query, getEntityClass());

}//通過條件查詢更新數據

public voidupdate(Query query, Update update) {

mongoTemplate.updateMulti(query, update,this.getEntityClass());

}//根據id進行更新

public voidupdateById(String id, T t) {

Query query= newQuery();

query.addCriteria(Criteria.where("id").is(id));

Update update=buildBaseUpdate(t);

update(query, update);

}//通過條件查詢實體(集合)

public Listfind(Query query) {return mongoTemplate.find(query, this.getEntityClass());

}public ListfindByCondition(T t) {

Query query=buildBaseQuery(t);returnmongoTemplate.find(query, getEntityClass());

}//通過一定的條件查詢一個實體

publicT findOne(Query query) {return mongoTemplate.findOne(query, this.getEntityClass());

}//通過ID獲取記錄

publicT get(String id) {return mongoTemplate.findById(id, this.getEntityClass());

}//通過ID獲取記錄,并且指定了集合名(表的意思)

publicT get(String id, String collectionName) {return mongoTemplate.findById(id, this.getEntityClass(), collectionName);

}//根據vo構建查詢條件Query

privateQuery buildBaseQuery(T t) {

Query query= newQuery();

Field[] fields=t.getClass().getDeclaredFields();for(Field field : fields) {

field.setAccessible(true);try{

Object value=field.get(t);if (value != null) {

QueryField queryField= field.getAnnotation(QueryField.class);if (queryField != null) {

query.addCriteria(queryField.type().buildCriteria(queryField, field, value));

}

}

}catch(IllegalArgumentException e) {

e.printStackTrace();

}catch(IllegalAccessException e) {

e.printStackTrace();

}

}returnquery;

}privateUpdate buildBaseUpdate(T t) {

Update update= newUpdate();

Field[] fields=t.getClass().getDeclaredFields();for(Field field : fields) {

field.setAccessible(true);try{

Object value=field.get(t);if (value != null) {

update.set(field.getName(), value);

}

}catch(Exception e) {

e.printStackTrace();

}

}returnupdate;

}//獲取需要操作的實體類class

@SuppressWarnings("unchecked")protected ClassgetEntityClass() {return ((Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]);

}publicMongoTemplate getMongoTemplate() {returnmongoTemplate;

}

}

7.-------------------------------正式開始使用

>>>實體

importnet.xxx.commons.component.mongo.QueryField;public class DeviceToken extendsBaseEntity {

@QueryFieldprivateLong uid;

@QueryFieldprivateString token;

@QueryFieldprivateString device;

@QueryFieldprivateString userAgent;publicDeviceToken(Long uid, String token, String device, String userAgent) {this.uid =uid;this.token =token;this.device =device;this.userAgent =userAgent;

}publicLong getUid() {returnuid;

}public voidsetUid(Long uid) {this.uid =uid;

}publicString getToken() {returntoken;

}public voidsetToken(String token) {this.token =token;

}publicString getDevice() {returndevice;

}public voidsetDevice(String device) {this.device =device;

}publicString getUserAgent() {returnuserAgent;

}public voidsetUserAgent(String userAgent) {this.userAgent =userAgent;

}

}

>>>Service

public interface DeviceTokenService extends MongoDao{

}

>>>ServiceImpl

@Service("deviceTokenServiceImpl")public class DeviceTokenServiceImpl extends MongoDaoSupport implementsDeviceTokenService {

}

>>> 應用

@Resourceprivate DeviceTokenService deviceTokenService; //注入到需要應用的文件//查詢示例

List dts= deviceTokenService.find(new BasicQuery(new BasicDBObject("uid",uid),new BasicDBObject("userAgent",userAgent)));

具體其他方法的使用可以擴充MongDao 和MongoDaoSupport.

總結

以上是生活随笔為你收集整理的java中mongodb中dao通用_Spring配置MongoDB及 构建通用Dao的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。