Skip to content

Commit

Permalink
add jongo & GenericDao
Browse files Browse the repository at this point in the history
  • Loading branch information
zhongliangjun1 committed Aug 5, 2014
1 parent 7a2e75a commit 70fcc3b
Show file tree
Hide file tree
Showing 12 changed files with 362 additions and 2 deletions.
20 changes: 20 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -75,13 +75,33 @@
<version>2.3.20</version>
</dependency>

<!-- mongodb -->
<dependency>
<groupId>org.jongo</groupId>
<artifactId>jongo</artifactId>
<version>0.4</version>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>2.11.2</version>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>bson</artifactId>
<version>2.8.0</version>
<type>jar</type>
<scope>compile</scope>
</dependency>


<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>

</dependencies>

<build>
Expand Down
138 changes: 138 additions & 0 deletions src/main/java/com/enjoylife/common/db/mongo/GenericDao.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
package com.enjoylife.common.db.mongo;

import com.enjoylife.common.model.Page;
import org.jongo.Jongo;
import org.jongo.MongoCollection;
import org.springframework.util.CollectionUtils;

import java.util.LinkedList;
import java.util.List;

/**
* Created with IntelliJ IDEA.
* Author: liangjun.zhong
* Date: 14-1-13
* Time: PM8:43
* To change this template use File | Settings | File Templates.
*/
public class GenericDao<T> {

protected static final Object[] NO_PARAMETERS = {};
protected static final String ALL = "{}";

protected final Class<T> clazz;
protected final MongoCollection collection;

public GenericDao(String collectionName, Class<T> clazz, Jongo jongo) {
this.collection = jongo.getCollection(collectionName);
this.clazz = clazz;
}

private boolean check(int pageNo, int pageSize){
boolean result = true;
if(pageNo<0 || pageSize<=0)
return false;
return result;
}

public T findOne(String query, Object... params){
return collection.findOne(query, params).as(this.clazz);
}

public List<T> find(String query, Object... params){
Iterable<T> iterable = collection.find(query, params).as(this.clazz);
List<T> records = new LinkedList<T>();
for(T t : iterable){
records.add(t);
}
if(CollectionUtils.isEmpty(records)){
return null;
}
return records;
}

public boolean upsert(T t, String query, Object... params){
collection.update(query, params).upsert().merge(t);
return true;
}

public void batchUpsert(List<T> list, String query, Object... params){
if(CollectionUtils.isEmpty(list))
return;
for(T t : list){
upsert(t, query, params);
}
}

public boolean remove(){
collection.remove();
return true;
}

public boolean remove(String query){
collection.remove(query);
return true;
}

public boolean remove(String query, Object... params){
collection.remove(query, params);
return true;
}

public boolean save(T t){
collection.save(t);
return true;
}



public long count(){
return collection.count(ALL);
}

public long count(String query) {
return collection.count(query);
}

public long count(String query, Object... params) {
return collection.count(query, params);
}



public Page<T> paginate(int pageNo, int pageSize){
return paginate(pageNo, pageSize, ALL);
}

public Page<T> paginate(int pageNo, int pageSize, String query){
return paginate(pageNo, pageSize, query, NO_PARAMETERS);
}

public Page<T> paginate(int pageNo, int pageSize, String query, Object... params){
if(!check(pageNo, pageSize))
return null;

pageNo = pageNo<=0?1:pageNo;
Iterable<T> iterable = collection.find(query, params).sort("{_id:1}").skip((pageNo-1)*pageSize).limit(pageSize).as(this.clazz);

List<T> records = new LinkedList<T>();
for(T t : iterable){
records.add(t);
}
if(CollectionUtils.isEmpty(records)){
return null;
}

Page<T> result = new Page<T>();
result.setPageNo(pageNo);
result.setPageSize(pageSize);
result.setRecords(records);

return result;
}





}
51 changes: 51 additions & 0 deletions src/main/java/com/enjoylife/common/db/mongo/JongoFactory.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package com.enjoylife.common.db.mongo;

import com.mongodb.Mongo;
import com.mongodb.MongoURI;
import com.mongodb.WriteConcern;
import org.apache.log4j.Logger;
import org.jongo.Jongo;
import java.net.UnknownHostException;


/**
* Created with IntelliJ IDEA.
* Author: liangjun.zhong
* Date: 14-7-30
* Time: PM4:58
* To change this template use File | Settings | File Templates.
*/
public class JongoFactory {

private static final Logger logger = Logger.getLogger(JongoFactory.class);
private static Jongo jongo;

public static Jongo getJongo(String uri, String dbName) throws Exception {
if (jongo == null) {
checkDBParams(uri, dbName);
synchronized (JongoFactory.class) {
if (jongo == null) {
jongo = generateJongo(uri, dbName);
}
}
}
return jongo;
}

private static void checkDBParams(String uri, String dbName) throws Exception {
if(uri==null || dbName==null){
Exception exception = new RuntimeException("start mongodb with invalid params");
logger.error(exception);
throw exception;
}
}

private static Jongo generateJongo(String uri, String dbName) throws UnknownHostException {
Mongo mongoSafe = new Mongo(new MongoURI("mongodb://"+uri));
mongoSafe.setWriteConcern( WriteConcern.SAFE );
return new Jongo(mongoSafe.getDB(dbName));
}



}
48 changes: 48 additions & 0 deletions src/main/java/com/enjoylife/common/model/Page.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package com.enjoylife.common.model;

import java.io.Serializable;
import java.util.List;

/**
* Created with IntelliJ IDEA.
* Author: liangjun.zhong
* Date: 13-12-25
* Time: PM5:44
* To change this template use File | Settings | File Templates.
*/
public class Page<T> implements Serializable {

private static final long serialVersionUID = -4272544971040417942L;

private int pageNo;
private int pageSize;
private List<T> records;


public int getPageNo() {
return pageNo;
}

public void setPageNo(int pageNo) {
this.pageNo = pageNo;
}

public int getPageSize() {
return pageSize;
}

public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}

public List<T> getRecords() {
return records;
}

public void setRecords(List<T> records) {
this.records = records;
}



}
10 changes: 10 additions & 0 deletions src/main/java/com/enjoylife/demo/DemoController.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.enjoylife.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.*;
Expand Down Expand Up @@ -89,6 +90,15 @@ public void getpic(HttpServletResponse response) throws IOException {
inputStream.close();
}

@Autowired
private UserTestDao userTestDao;

@RequestMapping(value = "/dao/test", method = RequestMethod.GET )
public @ResponseBody long daoTest() {
long count = userTestDao.count();
return count;
}




Expand Down
5 changes: 4 additions & 1 deletion src/main/java/com/enjoylife/demo/User.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
package com.enjoylife.demo;

import java.io.Serializable;

/**
* Created with IntelliJ IDEA.
* Author: liangjun.zhong
* Date: 14-4-21
* Time: PM10:05
* To change this template use File | Settings | File Templates.
*/
public class User {
public class User implements Serializable {
private static final long serialVersionUID = 3949500216428392695L;

private int userId;

Expand Down
11 changes: 11 additions & 0 deletions src/main/java/com/enjoylife/demo/UserEntity.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.enjoylife.demo;

/**
* Created with IntelliJ IDEA.
* Author: liangjun.zhong
* Date: 14-8-4
* Time: AM2:51
* To change this template use File | Settings | File Templates.
*/
public class UserEntity extends User {
}
21 changes: 21 additions & 0 deletions src/main/java/com/enjoylife/demo/UserTestDao.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.enjoylife.demo;

import com.enjoylife.common.db.mongo.GenericDao;
import org.jongo.Jongo;

import java.util.List;

/**
* Created with IntelliJ IDEA.
* Author: liangjun.zhong
* Date: 14-8-4
* Time: AM2:50
* To change this template use File | Settings | File Templates.
*/
public class UserTestDao extends GenericDao<UserEntity> {

public UserTestDao(Jongo jongo) {
super("UserTest", UserEntity.class, jongo);
}

}
2 changes: 1 addition & 1 deletion src/main/resources/config/spring/appcontext-core.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">

<!-- 通过注解装配对象 -->
<context:component-scan base-package="com.dianping.annotation" />
<context:component-scan base-package="com.enjoylife"></context:component-scan>



Expand Down
22 changes: 22 additions & 0 deletions src/main/resources/config/spring/appcontext-dao.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<?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:context="http://www.springframework.org/schema/context"
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
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">


<bean id="jongo" class="com.enjoylife.common.db.mongo.JongoFactory" factory-method="getJongo">
<constructor-arg value="127.0.0.1:27017" />
<constructor-arg value="enjoylife" />
</bean>






</beans>
16 changes: 16 additions & 0 deletions src/main/resources/config/spring/appcontext-service.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?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:context="http://www.springframework.org/schema/context"
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
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">






</beans>
Loading

0 comments on commit 70fcc3b

Please sign in to comment.