From 733f0db570e76b2bc34e67ba69d5613d77a2b787 Mon Sep 17 00:00:00 2001 From: wangbing <1919101440@qq.com> Date: Tue, 15 Oct 2019 22:42:26 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=94=B9=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/xyz/wbsite/wsqlite/ObjectClient.java | 63 +++++----------- src/main/java/xyz/wbsite/wsqlite/Where.java | 75 +++++++++++++++++-- src/test/java/WsqliteTest.java | 9 ++- 3 files changed, 92 insertions(+), 55 deletions(-) diff --git a/src/main/java/xyz/wbsite/wsqlite/ObjectClient.java b/src/main/java/xyz/wbsite/wsqlite/ObjectClient.java index 069b8ca..6a9410c 100644 --- a/src/main/java/xyz/wbsite/wsqlite/ObjectClient.java +++ b/src/main/java/xyz/wbsite/wsqlite/ObjectClient.java @@ -123,7 +123,7 @@ public class ObjectClient extends Client { return 0; } - public int delete(Class poClass, String... wheres) throws SQLException, ClassNotFoundException { + public int delete(Class poClass, Where where) throws SQLException, ClassNotFoundException { try { Class aClass = classMap.get(poClass.getName()); if (aClass == null) { @@ -132,16 +132,9 @@ public class ObjectClient extends Client { StringBuffer sql = new StringBuffer(); sql.append("DELETE FROM "); sql.append(aClass.getSimpleName()); - - if (wheres.length > 0) { - sql.append(" WHERE "); - for (int i = 0; i < wheres.length; i++) { - String where = wheres[i]; - sql.append(where); - sql.append(i != wheres.length - 1 ? " AND " : ""); - } - } - return executeUpdate(sql.toString()); + sql.append(where.getSql()); + System.out.println("SQL ==> " + sql.toString()); + return executeUpdate(sql.toString(), where.getArgs()); } } finally { destroyed(); @@ -149,7 +142,7 @@ public class ObjectClient extends Client { return 0; } - public int update(Class poClass, T po, String... wheres) throws SQLException, ClassNotFoundException { + public int update(Class poClass, T po, Where where) throws SQLException, ClassNotFoundException { try { Class aClass = classMap.get(poClass.getName()); if (aClass == null) { @@ -175,17 +168,11 @@ public class ObjectClient extends Client { } } - if (wheres.length > 0) { - sql.append(" WHERE "); - for (int i = 0; i < wheres.length; i++) { - String where = wheres[i]; - sql.append(where); - sql.append(i != wheres.length - 1 ? " AND " : ""); - } - } + // 条件 + sql.append(where.getSql()); System.out.println("SQL ==> " + sql.toString()); - return executeUpdate(sql.toString(), values); + return executeUpdate(sql.toString(), concat(values, where.getArgs())); } } catch (IllegalAccessException e) { e.printStackTrace(); @@ -195,7 +182,7 @@ public class ObjectClient extends Client { return 0; } - public List select(Class poClass, int pageNumber, int pageSize, T po, String... wheres) throws SQLException, ClassNotFoundException { + public List select(Class poClass, Where where, int pageNumber, int pageSize) throws SQLException, ClassNotFoundException { ArrayList list = new ArrayList<>(); try { Class aClass = classMap.get(poClass.getName()); @@ -207,8 +194,6 @@ public class ObjectClient extends Client { //获取字段列表 List fs = getFields(poClass); - List poWhere = new ArrayList(); - List args = new ArrayList(); for (int i = 0; i < fs.size(); i++) { Field f = fs.get(i); @@ -216,28 +201,13 @@ public class ObjectClient extends Client { if (i != fs.size() - 1) { sql.append(","); } - if (po != null) { - if (f.get(po) != null) { - poWhere.add(" " + f.getName().toUpperCase() + " = ? "); - args.add(f.get(po)); - } - } } sql.append(" FROM "); sql.append(aClass.getSimpleName()); - poWhere.addAll(Arrays.asList(wheres)); - - //条件参数 - if (poWhere.size() + wheres.length > 0) { - sql.append(" WHERE "); - for (int i = 0; i < poWhere.size(); i++) { - String where = wheres[i]; - sql.append(where); - sql.append(i != wheres.length - 1 ? " AND " : ""); - } - } + // 条件 + sql.append(where.getSql()); //分页参数 if (pageSize > 0) { @@ -245,10 +215,8 @@ public class ObjectClient extends Client { } System.out.println("SQL ==> " + sql.toString()); - list.addAll(executeQuery(poClass, sql.toString(), args)); + list.addAll(executeQuery(poClass, sql.toString(), where.getArgs())); } - } catch (IllegalAccessException e) { - e.printStackTrace(); } finally { destroyed(); } @@ -339,4 +307,11 @@ public class ObjectClient extends Client { } return fs; } + + private T[] concat(T[] arr1, T[] arr2) { + List temp = new ArrayList<>(); + temp.addAll(Arrays.asList(arr1)); + temp.addAll(Arrays.asList(arr2)); + return (T[]) temp.toArray(); + } } \ No newline at end of file diff --git a/src/main/java/xyz/wbsite/wsqlite/Where.java b/src/main/java/xyz/wbsite/wsqlite/Where.java index c600411..34effa6 100644 --- a/src/main/java/xyz/wbsite/wsqlite/Where.java +++ b/src/main/java/xyz/wbsite/wsqlite/Where.java @@ -4,6 +4,32 @@ import java.util.ArrayList; import java.util.List; public class Where { + private String sql; + private Object[] args; + + private Where() { + } + + public String getSql() { + return sql; + } + + public void setSql(String sql) { + this.sql = sql; + } + + public Object[] getArgs() { + return args; + } + + public void setArgs(Object[] args) { + this.args = args; + } + + public Where(String sql, Object[] args) { + this.sql = sql; + this.args = args; + } public static Builder builder() { return new Builder(); @@ -11,25 +37,58 @@ public class Where { public static class Builder { private StringBuilder sb = new StringBuilder(); - private List args = new ArrayList<>(); + private List argsList = new ArrayList<>(); - public Builder eq(boolean condition,String name, Object value) { - if (condition){ - sb.append(name).append("=? "); - } + public Builder eq(String name, Object value) { + return eq(true, name, value); + } - return this; + public Builder like(String name, Object value) { + return like(true, name, value); + } + + public Builder isNull(String name, Object value) { + return isNull(true, name, value); } - public Builder like(boolean condition,String name, Object value) { + public Builder isNotNull(String name, Object value) { + return isNotNull(true, name, value); + } + + public Builder eq(boolean condition, String name, Object value) { + if (condition) { + sb.append(sb.length() > 0 ? " and " : " where ").append(name).append(" = ? "); + argsList.add(value); + } + return this; + } + public Builder like(boolean condition, String name, Object value) { + if (condition) { + sb.append(sb.length() > 0 ? " and " : " where ").append(name).append("like ?"); + argsList.add(value); + } return this; } - public Builder isNull(boolean condition,String name, Object value) { + public Builder isNull(boolean condition, String name, Object value) { + if (condition) { + sb.append(sb.length() > 0 ? " and " : " where ").append(name).append("is null"); + argsList.add(value); + } + return this; + } + public Builder isNotNull(boolean condition, String name, Object value) { + if (condition) { + sb.append(sb.length() > 0 ? " and " : " where ").append(name).append("is not null"); + argsList.add(value); + } return this; } + public Where build() { + return new Where(sb.toString(), argsList.toArray()); + } } } diff --git a/src/test/java/WsqliteTest.java b/src/test/java/WsqliteTest.java index d57527f..f0978b8 100644 --- a/src/test/java/WsqliteTest.java +++ b/src/test/java/WsqliteTest.java @@ -1,4 +1,5 @@ import xyz.wbsite.wsqlite.ObjectClient; +import xyz.wbsite.wsqlite.Where; import xyz.wbsite.wsqlite.entity.Example; import java.io.File; @@ -29,7 +30,8 @@ public class WsqliteTest { h.insert(Example.class, example); System.out.println("测试 select"); - List select = h.select(Example.class, 1, 10); + Where where = Where.builder().eq("S", "wangbing").build(); + List select = h.select(Example.class, where, 1, 10); System.out.println(select.size()); System.out.println("测试 update"); @@ -43,11 +45,12 @@ public class WsqliteTest { example.setF1(0.1f); example.setD1(0.1); example.setDate(new Date()); - int update = h.update(Example.class, example); + int update = h.update(Example.class, example, Where.builder().eq("S", "wangbing").build()); System.out.println(update); System.out.println("测试 delete"); - int delete = h.delete(Example.class, "s = 'wangbing'"); + Where build = Where.builder().eq("S", "wangbing").build(); + int delete = h.delete(Example.class, build); System.out.println(delete); } catch (ClassNotFoundException e) {