优化改版

master
wangbing 5 years ago
parent 2c7f0fb3f0
commit 733f0db570

@ -123,7 +123,7 @@ public class ObjectClient extends Client {
return 0; return 0;
} }
public <T> int delete(Class<T> poClass, String... wheres) throws SQLException, ClassNotFoundException { public <T> int delete(Class<T> poClass, Where where) throws SQLException, ClassNotFoundException {
try { try {
Class aClass = classMap.get(poClass.getName()); Class aClass = classMap.get(poClass.getName());
if (aClass == null) { if (aClass == null) {
@ -132,16 +132,9 @@ public class ObjectClient extends Client {
StringBuffer sql = new StringBuffer(); StringBuffer sql = new StringBuffer();
sql.append("DELETE FROM "); sql.append("DELETE FROM ");
sql.append(aClass.getSimpleName()); sql.append(aClass.getSimpleName());
sql.append(where.getSql());
if (wheres.length > 0) { System.out.println("SQL ==> " + sql.toString());
sql.append(" WHERE "); return executeUpdate(sql.toString(), where.getArgs());
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());
} }
} finally { } finally {
destroyed(); destroyed();
@ -149,7 +142,7 @@ public class ObjectClient extends Client {
return 0; return 0;
} }
public <T> int update(Class<T> poClass, T po, String... wheres) throws SQLException, ClassNotFoundException { public <T> int update(Class<T> poClass, T po, Where where) throws SQLException, ClassNotFoundException {
try { try {
Class aClass = classMap.get(poClass.getName()); Class aClass = classMap.get(poClass.getName());
if (aClass == null) { if (aClass == null) {
@ -175,17 +168,11 @@ public class ObjectClient extends Client {
} }
} }
if (wheres.length > 0) { // 条件
sql.append(" WHERE "); sql.append(where.getSql());
for (int i = 0; i < wheres.length; i++) {
String where = wheres[i];
sql.append(where);
sql.append(i != wheres.length - 1 ? " AND " : "");
}
}
System.out.println("SQL ==> " + sql.toString()); System.out.println("SQL ==> " + sql.toString());
return executeUpdate(sql.toString(), values); return executeUpdate(sql.toString(), concat(values, where.getArgs()));
} }
} catch (IllegalAccessException e) { } catch (IllegalAccessException e) {
e.printStackTrace(); e.printStackTrace();
@ -195,7 +182,7 @@ public class ObjectClient extends Client {
return 0; return 0;
} }
public <T> List<T> select(Class<T> poClass, int pageNumber, int pageSize, T po, String... wheres) throws SQLException, ClassNotFoundException { public <T> List<T> select(Class<T> poClass, Where where, int pageNumber, int pageSize) throws SQLException, ClassNotFoundException {
ArrayList<T> list = new ArrayList<>(); ArrayList<T> list = new ArrayList<>();
try { try {
Class aClass = classMap.get(poClass.getName()); Class aClass = classMap.get(poClass.getName());
@ -207,8 +194,6 @@ public class ObjectClient extends Client {
//获取字段列表 //获取字段列表
List<Field> fs = getFields(poClass); List<Field> fs = getFields(poClass);
List<String> poWhere = new ArrayList();
List<Object> args = new ArrayList();
for (int i = 0; i < fs.size(); i++) { for (int i = 0; i < fs.size(); i++) {
Field f = fs.get(i); Field f = fs.get(i);
@ -216,28 +201,13 @@ public class ObjectClient extends Client {
if (i != fs.size() - 1) { if (i != fs.size() - 1) {
sql.append(","); 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(" FROM ");
sql.append(aClass.getSimpleName()); sql.append(aClass.getSimpleName());
poWhere.addAll(Arrays.asList(wheres)); // 条件
sql.append(where.getSql());
//条件参数
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 " : "");
}
}
//分页参数 //分页参数
if (pageSize > 0) { if (pageSize > 0) {
@ -245,10 +215,8 @@ public class ObjectClient extends Client {
} }
System.out.println("SQL ==> " + sql.toString()); 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 { } finally {
destroyed(); destroyed();
} }
@ -339,4 +307,11 @@ public class ObjectClient extends Client {
} }
return fs; return fs;
} }
private <T> T[] concat(T[] arr1, T[] arr2) {
List<T> temp = new ArrayList<>();
temp.addAll(Arrays.asList(arr1));
temp.addAll(Arrays.asList(arr2));
return (T[]) temp.toArray();
}
} }

@ -4,6 +4,32 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
public class Where { 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() { public static Builder builder() {
return new Builder(); return new Builder();
@ -11,25 +37,58 @@ public class Where {
public static class Builder { public static class Builder {
private StringBuilder sb = new StringBuilder(); private StringBuilder sb = new StringBuilder();
private List<Object> args = new ArrayList<>(); private List<Object> argsList = new ArrayList<>();
public Builder eq(String name, Object value) {
return eq(true, name, value);
}
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 isNotNull(String name, Object value) {
return isNotNull(true, name, value);
}
public Builder eq(boolean condition, String name, Object value) { public Builder eq(boolean condition, String name, Object value) {
if (condition) { if (condition) {
sb.append(name).append("=? "); sb.append(sb.length() > 0 ? " and " : " where ").append(name).append(" = ? ");
argsList.add(value);
} }
return this; return this;
} }
public Builder like(boolean condition, String name, Object value) { 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; 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; return this;
} }
public Where build() {
return new Where(sb.toString(), argsList.toArray());
}
} }
} }

@ -1,4 +1,5 @@
import xyz.wbsite.wsqlite.ObjectClient; import xyz.wbsite.wsqlite.ObjectClient;
import xyz.wbsite.wsqlite.Where;
import xyz.wbsite.wsqlite.entity.Example; import xyz.wbsite.wsqlite.entity.Example;
import java.io.File; import java.io.File;
@ -29,7 +30,8 @@ public class WsqliteTest {
h.insert(Example.class, example); h.insert(Example.class, example);
System.out.println("测试 select"); System.out.println("测试 select");
List<Example> select = h.select(Example.class, 1, 10); Where where = Where.builder().eq("S", "wangbing").build();
List<Example> select = h.select(Example.class, where, 1, 10);
System.out.println(select.size()); System.out.println(select.size());
System.out.println("测试 update"); System.out.println("测试 update");
@ -43,11 +45,12 @@ public class WsqliteTest {
example.setF1(0.1f); example.setF1(0.1f);
example.setD1(0.1); example.setD1(0.1);
example.setDate(new Date()); 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(update);
System.out.println("测试 delete"); 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); System.out.println(delete);
} catch (ClassNotFoundException e) { } catch (ClassNotFoundException e) {

Loading…
Cancel
Save

Powered by TurnKey Linux.