package com.example.pms.Common;
import com.example.pms.Bean.Page;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import static com.example.pms.Common.MethodEnum.*;
// TODO 待完善
public class SQLHelper {
private final StringBuilder sql;
private final ArrayList<Object> params;
public SQLHelper() {
sql = new StringBuilder();
params = new ArrayList<>();
}
/**
* 将obj转换成SQL语句与参数, 用于查询对应的条件结果的数量
*
* @param table 查询表名
* @param objClazz obj对象
* @param clazz obj的类
*/
public void queryCount(String table, Object objClazz, Class<?> clazz) {
sql.append("SELECT COUNT(*) FROM ").append(table).append(" ");
where();
conditions(objClazz, clazz);
}
/**
* 查询一个对象
* @param table 表名
* @param obj mapper对象
* @param objClazz mapper对象类
*/
public void queryForObject(String table, Object obj, Class<?> objClazz) {
sql.append("SELECT * FROM ").append(table).append(" ");
where();
conditions(obj, objClazz);
}
/**
* 将obj和PageBean转换成SQL语句与参数, 用于查询对应的条件结果
*
* @param table 查询表名
* @param obj obj对象
* @param objClazz obj的类
* @param page Page
* @param orderBy 查询结果以什么列名排序
*/
public void query(String table, Object obj, Class<?> objClazz, Page page, String orderBy) {
sql.append("SELECT * FROM ").append(table).append(" ");
where();
conditions(obj, objClazz);
pageConditions(page, orderBy);
}
/**
* 将obj和PageBean转换成SQL语句与参数, 用于查询对应的条件结果
*
* @param selects 查询语句
* @param obj obj对象
* @param objClazz obj的类
* @param page Page
* @param orderBy 查询结果以什么列名排序
* @param joins 多个Join语句
*/
public void Query(String selects, String from, Object obj, Class<?> objClazz, Page page, String orderBy, String... joins) {
sql.append(" ").append(selects).append(" ");
sql.append(" ").append(from).append(" ");
for (String join : joins)
sql.append(" ").append(join).append(" ");
where();
conditions(obj, objClazz);
pageConditions(page, orderBy);
}
/**
* @param table 插入表名
* @param bean 插入的对象
* @param beanClazz 插入对象的类
*/
public void insert(String table, Object bean, Class<?> beanClazz) {
sql.append("INSERT INTO ").append(table).append(" ");
ArrayList<String> cols = new ArrayList<>();
ArrayList<String> values = new ArrayList<>();
try {
Field[] fields = beanClazz.getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
SQLCondition conditions = field.getAnnotation(SQLCondition.class);
if (field.isAnnotationPresent(SQLCondition.class) && contains(insert, conditions.method())) {
String key = field.getName();
Object val = field.get(bean);
cols.add(key);
values.add("?");
params.add(val);
}
}
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
String colsStr = String.join(",", cols);
String valuesStr = String.join(",", values);
sql.append("(").append(colsStr).append(")");
sql.append(" VALUES (").append(valuesStr).append(")");
}
/**
* @param table 插入表名
* @param obj 插入的对象
* @param objClazz 插入对象的类
* @param pkName 主键的列名
*/
public void update(String table, Object obj, Class<?> objClazz, String pkName) {
sql.append("UPDATE ").append(table).append(" ");
ArrayList<String> keys = new ArrayList<>();
Object pkValue = null;
try {
Field[] fields = objClazz.getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
SQLCondition conditions = field.getAnnotation(SQLCondition.class);
if (field.isAnnotationPresent(SQLCondition.class) && contains(update, conditions.method())) {
String key = field.getName();
Object val = field.get(obj);
if (key.equals(pkName)) {
pkValue = val;
continue;
}
keys.add(" " + key + " = ? ");
params.add(val);
}
}
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
String colsStr = String.join(",", keys);
sql.append("SET ").append(colsStr).append(" ");
sql.append("WHERE ").append(pkName).append(" = ? ");
assert (pkValue != null);
params.add(pkValue);
}
/**
* @param table 插入表名
* @param obj 插入的对象
* @param objClazz 插入对象的类
* @param pkName 主键的列名
*/
public void delete(String table, Object obj, Class<?> objClazz, String pkName) {
sql.append("DELETE ").append(table).append(" ");
Object pkValue = null;
try {
Field[] fields = objClazz.getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
SQLCondition conditions = field.getAnnotation(SQLCondition.class);
if (field.isAnnotationPresent(SQLCondition.class) && contains(delete, conditions.method())) {
String key = field.getName();
Object val = field.get(obj);
if (key.equals(pkName)) {
pkValue = val;
break;
}
}
}
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
sql.append("WHERE ").append(pkName).append(" = ").append(pkValue);
}
/**
* 拼接条件 key [like,=] [%value%,value]
*
* @param key 条件名
* @param compareOperator like 或者 =
* @param value 参数
*/
private void doOperation(String key, String compareOperator, Object value) {
sql.append(" ").append(key).append(" ").append(compareOperator).append(" ? ");
String param = "";
if ("like".equalsIgnoreCase(compareOperator))
param = "%" + value + "%";
else if ("=".equals(compareOperator))
param = value.toString();
params.add(param);
}
/**
* 拼接条件 [and,or] key [like,=] [%value%,value]
*
* @param logicOperator and 或者 or
* @param key 条件名
* @param compareOperator like 或者 =
* @param value 参数
*/
private void append(String logicOperator, String key, String compareOperator, Object value) {
if ("or".equalsIgnoreCase(logicOperator)) {
Object[] values = (Object[]) value;
if (values != null && values.length > 1) {
sql.append(" and (");
for (Object val : values) {
doOperation(key, compareOperator, val);
sql.append(" or ");
}
sql.append(" 1 = 0) ");
}
} else if ("and".equalsIgnoreCase(logicOperator)) {
if (value != null && !"".equals(value)) {
sql.append(" and ");
doOperation(key, compareOperator, value);
}
}
}
/**
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
Java毕业设计基于Servlet+JQuery+Ajax实现的小区物业管理系统源代码+数据库,采用MVC模式 代码均经过实测运行,有数据库文件,导入库即可,小白可以操作,eclipse/idea均可。
资源推荐
资源详情
资源评论
收起资源包目录
Java毕业设计基于Servlet+JQuery+Ajax实现的小区物业管理系统源代码+数据库,采用MVC模式 (161个子文件)
mvnw.cmd 7KB
jquery-ui.min.css 35KB
subPage.css 5KB
home.css 2KB
Notice.css 2KB
index.css 2KB
AD_Apply.css 1KB
An_iframe.css 491B
AN_Display.css 425B
Remind.css 285B
.gitignore 490B
.gitignore 182B
favicon.ico 1.03MB
maven-wrapper.jar 57KB
SQLHelper.java 10KB
OwnerServlet.java 5KB
Staff.java 4KB
SalaryServlet.java 4KB
StaffServlet.java 4KB
WO.java 4KB
WOPO.java 3KB
ANServlet.java 3KB
ReimServlet.java 3KB
Fin.java 3KB
WOServlet.java 3KB
WODaoImpl.java 3KB
Owner.java 3KB
OwnerDaoImpl.java 3KB
StaffDaoImpl.java 3KB
SalaryDaoImpl.java 3KB
ANDaoImpl.java 2KB
ADServlet.java 2KB
Tasks.java 2KB
ReimDaolmpl.java 2KB
TasksVO.java 2KB
AN.java 2KB
FinServlet.java 2KB
Reim.java 2KB
AD.java 2KB
ADDaoImpl.java 2KB
TasksDaoImpl.java 2KB
WOServiceImpl.java 2KB
DispatchServlet.java 2KB
Salary.java 2KB
BeanUtil.java 2KB
TasksServlet.java 2KB
OwnerServiceImpl.java 1KB
StaffServiceImpl.java 1KB
Page.java 1KB
FinDaoImpl.java 1KB
TasksServiceImpl.java 1KB
ReimServiceImpl.java 1KB
JDBCUtils.java 1KB
ANServiceImpl.java 1KB
ADServiceImpl.java 926B
SQLCondition.java 884B
SalaryServiceImpl.java 834B
DepPosServlet.java 761B
FinServiceImpl.java 736B
DepPos.java 724B
SalaryDao.java 672B
DepPosDaoImpl.java 608B
OwnerService.java 569B
OwnerDao.java 558B
StaffService.java 529B
WODao.java 512B
ReimDao.java 511B
StaffDao.java 503B
WOService.java 481B
ReimService.java 479B
DepPosServiceImpl.java 461B
TasksDao.java 412B
ANDao.java 405B
FinDao.java 400B
TasksService.java 391B
ANService.java 378B
ADDao.java 370B
ADService.java 345B
SalaryService.java 339B
FinService.java 279B
DepPosService.java 140B
DepPosDao.java 127B
MethodEnum.java 93B
1.jpg 2.66MB
3.jpg 587KB
4.jpg 454KB
2.jpg 219KB
5.jpg 175KB
jquery-ui.min.js 517KB
jquery-3.6.4.min.js 286KB
Salary_MS.js 10KB
CustomComponents.js 8KB
Staff_MS.js 7KB
WO_MS.js 6KB
AN_MS.js 6KB
WO_USER.js 6KB
Owner_Audit.js 6KB
Owner_MS.js 6KB
AD_Audit.js 6KB
Staff_Tasks.js 5KB
共 161 条
- 1
- 2
资源评论
Python代码大全
- 粉丝: 2730
- 资源: 688
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功