diff --git a/pom.xml b/pom.xml
index 6bc6135..94a1628 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
com.bladejava
blade-jdbc
- 0.1.2
+ 0.1.3-beta
jar
blade-jdbc
@@ -70,7 +70,7 @@
${slf4j-log4j12.version}
test
-
+
diff --git a/src/main/java/com/blade/jdbc/Model.java b/src/main/java/com/blade/jdbc/Model.java
index 5af17c1..2f25f1f 100644
--- a/src/main/java/com/blade/jdbc/Model.java
+++ b/src/main/java/com/blade/jdbc/Model.java
@@ -38,6 +38,8 @@ public class Model extends HashMap {
private Map params = new TreeMap();
+ private PageRow pageRow;
+
private String sql;
private String order;
@@ -240,25 +242,21 @@ private List list(String sql) {
query.withParams(paramValues);
LOGGER.debug("Parameters\t=> {}", Arrays.toString(paramValues));
}
- return (List) query.executeAndFetchModels(clazz);
+
+ List list = (List) query.executeAndFetchModels(clazz);
+ this.clear();
+ return list;
}
public Paginator page(int page, int limit) {
-
// query count
- long total = this.count();
+ long total = this.count(false);
Paginator pager = new Paginator(total, page, limit);
-
int offset = (pager.getPageNum() - 1) * limit;
-
- String sql = dialect.getQueryPageSql(null, this);
-
- int index = params.size() + 1;
- this.params.put(new ParamKey(index, "offset"), offset);
- this.params.put(new ParamKey(index + 1, "limit"), limit);
-
- List result = this.list(sql);
+ pageRow = new PageRow(offset, limit);
+ List result = this.list(null);
pager.setList(result);
+ pageRow = null;
return pager;
}
@@ -280,6 +278,9 @@ public T findOne() {
}
List models = (List) query.executeAndFetchTable().asModel(clazz);
+
+ this.clear();
+
if(null != models && !models.isEmpty()){
return models.get(0);
}
@@ -287,6 +288,10 @@ public T findOne() {
}
public int count(){
+ return this.count(true);
+ }
+
+ public int count(boolean clear){
String sql = dialect.getQueryCountSql(this.sql, this);
LOGGER.debug("Preparing\t=> {}", sql);
Query query = Base.sql2o.open().createQuery(sql);
@@ -296,7 +301,11 @@ public int count(){
query.withParams(paramValues);
LOGGER.debug("Parameters\t=> {}", Arrays.toString(paramValues));
}
- return query.executeScalar(Integer.class);
+ int count = query.executeScalar(Integer.class);
+ if(clear){
+ this.clear();
+ }
+ return count;
}
private void close(Connection connection){
@@ -322,7 +331,17 @@ public Map params() {
return this.params;
}
+ public PageRow getPageRow() {
+ return pageRow;
+ }
+
public String getOrder(){
return this.order;
}
+
+ @Override
+ public void clear() {
+ super.clear();
+ this.params.clear();
+ }
}
diff --git a/src/main/java/com/blade/jdbc/PageRow.java b/src/main/java/com/blade/jdbc/PageRow.java
new file mode 100644
index 0000000..2b405f7
--- /dev/null
+++ b/src/main/java/com/blade/jdbc/PageRow.java
@@ -0,0 +1,24 @@
+package com.blade.jdbc;
+
+import java.io.Serializable;
+
+public class PageRow implements Serializable {
+
+ private static final long serialVersionUID = -1221241722858484846L;
+ private int offset;
+ private int limit;
+
+ public PageRow(int offset, int limit) {
+ this.offset = offset;
+ this.limit = limit;
+ }
+
+ public int getOffset() {
+ return offset;
+ }
+
+ public int getLimit() {
+ return limit;
+ }
+
+}
diff --git a/src/main/java/com/blade/jdbc/dialect/DefaultDialect.java b/src/main/java/com/blade/jdbc/dialect/DefaultDialect.java
index 497783b..9aecb3e 100644
--- a/src/main/java/com/blade/jdbc/dialect/DefaultDialect.java
+++ b/src/main/java/com/blade/jdbc/dialect/DefaultDialect.java
@@ -4,6 +4,7 @@
import java.util.Set;
import com.blade.jdbc.Model;
+import com.blade.jdbc.PageRow;
import com.blade.jdbc.ParamKey;
public class DefaultDialect implements Dialect {
@@ -77,6 +78,13 @@ public String getQuerySql(String sql, Model model) {
if(null != order){
realSql += "order by " + order;
}
+ PageRow pageRow = model.getPageRow();
+ if(null != pageRow){
+ int index = model.params().size() + 1;
+ model.params().put(new ParamKey(index, "offset"), pageRow.getOffset());
+ model.params().put(new ParamKey(index + 1, "limit"), pageRow.getLimit());
+ realSql += " limit :p" + index + ", :p" + (index + 1);
+ }
return realSql;
}
@@ -122,7 +130,18 @@ public String getQueryOneSql(String sql, Model model) {
public String getQueryCountSql(String sql, Model model) {
StringBuffer sqlBuf = new StringBuffer();
if(null != sql){
- sqlBuf.append(sql);
+ sqlBuf.append("select count(1) from");
+ int pos = sql.indexOf("from") + 4;
+ int w = sql.indexOf("where");
+ int o = sql.indexOf("order by");
+
+ if(w != -1){
+ sqlBuf.append(sql.substring(pos, w));
+ } else if(o != -1){
+ sqlBuf.append(sql.substring(pos, 0));
+ } else{
+ sqlBuf.append(sql.substring(pos));
+ }
} else {
sqlBuf.append("select count(")
.append(model.pkName())
@@ -130,16 +149,7 @@ public String getQueryCountSql(String sql, Model model) {
.append(model.table());
}
sqlBuf.append(' ').append(this.whereSql(1, model));
- return sql.toString();
+ return sqlBuf.toString();
}
- @Override
- public String getQueryPageSql(String sql, Model model) {
- String realSql = this.getQuerySql(sql, model);
- Map where = model.params();
- int whereSize = where.size();
- realSql += " limit :p" + (whereSize+1) + ", :p" + (whereSize+2);
- return realSql;
- }
-
}
diff --git a/src/main/java/com/blade/jdbc/dialect/Dialect.java b/src/main/java/com/blade/jdbc/dialect/Dialect.java
index f7d9524..75962fe 100644
--- a/src/main/java/com/blade/jdbc/dialect/Dialect.java
+++ b/src/main/java/com/blade/jdbc/dialect/Dialect.java
@@ -3,19 +3,17 @@
import com.blade.jdbc.Model;
public interface Dialect {
-
+
String getSaveSql(Model model);
-
+
String getUpdateSql(Model model);
-
+
String getDeleteSql(Model model);
String getQuerySql(String sql, Model model);
-
+
String getQueryOneSql(String sql, Model model);
-
+
String getQueryCountSql(String sql, Model model);
-
- String getQueryPageSql(String sql, Model model);
-}
+}
\ No newline at end of file
diff --git a/src/test/java/com/blade/jdbc/test/CRUDTest.java b/src/test/java/com/blade/jdbc/test/CRUDTest.java
index b45bc40..b6f9453 100644
--- a/src/test/java/com/blade/jdbc/test/CRUDTest.java
+++ b/src/test/java/com/blade/jdbc/test/CRUDTest.java
@@ -150,5 +150,11 @@ public void testQuery9() {
System.out.println(count);
}
-
+ @Test
+ public void testQuery10() {
+ Person p = new Person();
+ Paginator paginator = p.sql("select id, name from person").where("id > ?", 5).order("id desc").page(1, 10);
+ System.out.println(paginator);
+ }
+
}