作者 钟来

模型更新控制

package com.zhonglai.luhui.dao.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
import com.zhonglai.luhui.dao.sql.MyBaseEntity;
import com.zhonglai.luhui.dao.sql.QueryType;
import com.zhonglai.luhui.dao.util.Sqlutil;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.text.MessageFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
public class PublicTemplateSQL {
private String changTableNameFromObject(Object object)
{
return Sqlutil.toUnderScoreCase(object.getClass().getSimpleName());
}
private String insertListSql(List<?> list, String tableName)
{
if(StringUtils.isBlank(tableName))
{
tableName = changTableNameFromObject(list.get(0));
}
StringBuilder sb = new StringBuilder();
sb.append("INSERT INTO "+tableName);
String values = "";
String mfStr = "";
Field[] fields = list.get(0).getClass().getDeclaredFields( );
Method[] methods = list.get(0).getClass().getMethods();
for(Field field:fields)
{
if(!haveGetMethod(methods,field))
{
continue;
}
if(!"".equals(values) )
{
mfStr += ",";
values += ",";
}
values += "`"+Sqlutil.toUnderScoreCase(field.getName())+"`";
mfStr += "#'{'list[{0}]."+field.getName()+"}";
}
sb.append("("+values+")");
sb.append("VALUES ");
MessageFormat mf = new MessageFormat("("+mfStr+")");
for (int i = 0; i < list.size(); i++) {
sb.append(mf.format(new Object[]{i}));
if (i < list.size() - 1) {
sb.append(",");
}
}
return sb.toString();
}
public String insertAllToTable(Map map)
{
List<?> list = (List<?>) map.get("list");
String tableName = (String) map.get("tableName");
return insertListSql(list,tableName);
}
/**
* 添加对象
* @return
*/
public String insertAll(Map map)
{
List<?> list = (List<?>) map.get("list");
return insertListSql(list,null);
}
/**
* 添加对象
* @param object 对象
* @return
*/
public String insert(Object object)
{
StringBuffer stringBuffer = new StringBuffer("insert into ");
String tableName = changTableNameFromObject(object);
stringBuffer.append(tableName + "(");
Field[] fields = object.getClass().getDeclaredFields( );
Method[] methods = object.getClass().getMethods( );
StringBuffer values = new StringBuffer("(");
for(Field field:fields)
{//
if(!haveGetMethod(methods,field))
{
continue;
}
Method method;
try {
method = object.getClass().getMethod("get"+Sqlutil.getName(field.getName()));
Object value = method.invoke(object);
if(null != value)
{
if(!"(".equals(values.toString()) )
{
stringBuffer.append(",");
values.append( ",");
}
stringBuffer.append( "`"+Sqlutil.toUnderScoreCase(field.getName())+"`");
if (field.isAnnotationPresent(JsonFormat.class) && value instanceof Date)
{
JsonFormat jsonFormat = field.getAnnotation(JsonFormat.class);
value = DateUtils.parseDateToStr(jsonFormat.pattern(), (Date) value);
}
values.append( "'"+ escapeSql(value+"")+"'");
}
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
stringBuffer.append( ")");
values.append( ")");
return stringBuffer.append(" values ").append(values).toString();
}
/**
* 指定表名添加对象
* @return
*/
public String insertToTable(Map map)
{
Object object = map.get("object");
String tableName = changTableNameFromObject(object);
String primaryKey = (String) map.get("primaryKey");
if(map.containsKey("tableName"))
{
tableName = map.get("tableName").toString();
}
StringBuffer sql = new StringBuffer();
sql.append("insert into ");
sql.append(tableName + "(");
Field[] fields = object.getClass().getDeclaredFields( );
String values = "(";
Method[] methods = object.getClass().getMethods();
for(Field field:fields)
{
if(!haveGetMethod(methods,field))
{
continue;
}
Method method;
try {
method = object.getClass().getMethod("get"+Sqlutil.getName(field.getName()));
Object value = method.invoke(object);
if(null != value)
{
if(!"(".equals(values) )
{
sql.append(",");
values += ",";
}
sql.append("`"+Sqlutil.toUnderScoreCase(field.getName())+"`");
if (field.isAnnotationPresent(JsonFormat.class) && value instanceof Date)
{
JsonFormat jsonFormat = field.getAnnotation(JsonFormat.class);
value = DateUtils.parseDateToStr(jsonFormat.pattern(), (Date) value);
}
values += "'"+escapeSql(value+"")+"'";
}
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
sql.append(")");
values += ")";
return sql.toString()+" values "+values;
}
/**
* 更新对象不为空的属性
* @param para
* @return
*/
public String updateObject(Map<String,Object> para)
{
Object object = para.get("object");
String whereFieldNames = (String) para.get("whereFieldNames");
String tableName = changTableNameFromObject(object);
if(para.containsKey("tablename"))
{
tableName = (String) para.get("tablename");
}
String sql = "update ";
sql += tableName;
Field[] fields = object.getClass().getDeclaredFields();
Method[] methods = object.getClass().getMethods();
if(null != fields && fields.length !=0 )
{
sql += " set ";
int j = 0;
for(int i=0;i<fields.length;i++)
{
Field field = fields[i];
if(!haveGetMethod(methods,field))
{
continue;
}
try {
Method method = object.getClass().getMethod("get"+Sqlutil.getName(field.getName()));
Object value = method.invoke(object);
if(null != value)
{
if(j!=0)
{
sql += ",";
}
sql += "`"+Sqlutil.toUnderScoreCase(field.getName())+"`"+"='"+escapeSql(value+"")+"'";
j++;
// if(i!=0)
// {
// sql += ",";
// }
// sql += "`"+Sqlutil.toUnderScoreCase(field.getName())+"`"+"='"+value+"'";
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
sql += " where 1=1 ";
String[] wheres = whereFieldNames.split(",");
if(StringUtils.isNotBlank(whereFieldNames))
{
for(int i =0;i<wheres.length;i++)
{
try {
Method method = object.getClass().getMethod("get"+Sqlutil.getName(wheres[i]));
Object value = method.invoke(object);
sql += " and ";
sql += Sqlutil.toUnderScoreCase(wheres[i]) + "='"+escapeSql(value+"")+"'";
// sql += Sqlutil.getName(wheres[i]) + "='"+value+"'";
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
return sql;
}
/**
* 获得对象
*/
public String getObject(Map<String, Object> para)
{
Class<?> clas = (Class<?>) para.get("class");
String idName = (String) para.get("idName");
String values = (String) para.get("values");
String tableName = null;
if(para.containsKey("tableName"))
{
tableName = (String) para.get("tableName");
}
String select = "";
if(para.containsKey("select") && null != para.get("select"))
{
select = (String) para.get("select");
}else{
select = getSelect(clas);
}
if(StringUtils.isBlank(tableName))
{
tableName = Sqlutil.toUnderScoreCase(clas.getSimpleName());
}
String[] idnames = idName.split(",");
String[] valuess = values.split(",");
String where = "";
for(int i=0;i<idnames.length;i++)
{
if(i != 0)
{
where += " and ";
}
where += "`"+Sqlutil.toUnderScoreCase(idnames[i])+"`='"+escapeSql(valuess[i]+"")+"'";
}
String sql = "select "+select+" from "+tableName + " where " +where;
return sql;
}
/**
* 通过条件删除数据
* @param para
* @return
*/
public String deleteObjectByContent(Map<String, Object> para)
{
Class<?> objectCalss = (Class<?>) para.get("objectCalss");
String tableName = null;
if(para.containsKey("tableName"))
{
tableName = (String) para.get("tableName");
}
@SuppressWarnings("unchecked")
Map<String,String> map = (Map<String, String>) para.get("map");
if(StringUtils.isBlank(tableName))
{
tableName = Sqlutil.toUnderScoreCase(objectCalss.getSimpleName());
}
String sql = "delete from ";
sql += tableName + " where 1=1 ";
for(String key:map.keySet())
{
sql += " and "+"`"+Sqlutil.toUnderScoreCase(key)+"`"+"='"+escapeSql(map.get(key)+"")+"'";
}
return sql;
}
/**
* 通过id删除数据
* @param para
* @return
*/
public String deleteObjectById(Map<String, Object> para)
{
Class<?> objectCalss = (Class<?>) para.get("objectCalss");
String tableName = null;
if(para.containsKey("tableName"))
{
tableName = (String) para.get("tableName");
}
String id = (String) para.get("id");
if(StringUtils.isBlank(tableName))
{
tableName = Sqlutil.toUnderScoreCase(objectCalss.getSimpleName());
}
String sql = "delete from ";
sql += tableName + " where 1=1 ";
sql += " and "+"`id`"+"='"+escapeSql(id)+"'";
return sql;
}
/**
* 获取对象列表总数
*/
public String getObjectListTotle(Map<String, Object> para)
{
Object object = para.get("object");
@SuppressWarnings("unchecked")
Map<String,String> whereMap = (Map<String, String>) para.get("whereMap");
String tableName = changTableNameFromObject(object);
String sql = "select count(*) from "+tableName;
String where = " where 1=1 ";
String like = "";
Field[] fields = object.getClass().getDeclaredFields();
Method[] methods = object.getClass().getMethods();
if(null != fields && fields.length !=0 )
{
for(Field field:fields)
{
if(!haveGetMethod(methods,field))
{
continue;
}
try {
Method method;
method = object.getClass().getMethod("get"+ Sqlutil.getName(field.getName()));
Object value = method.invoke(object);
if(null != value)
{
String orther = "";
String s = "=";
if(null != whereMap && null != whereMap.get(field.getName()))
{
s = whereMap.get(field.getName());
if("like".equals(s))
{
value = "%"+value+"%";
like += " or " + "`"+Sqlutil.toUnderScoreCase(field.getName())+"`"+s+" '"+escapeSql(value+"")+"'"+orther ;
continue;
}
if("time".equals(s))
{
s = ">";
orther = " and `"+Sqlutil.toUnderScoreCase(field.getName())+"`< '"+whereMap.get("end_"+field.getName())+"'";
}
if("in".equals(s))
{
s = "in";
value = (value+"").replace(",","','");
where += " and `"+Sqlutil.toUnderScoreCase(field.getName())+"`"+s+" ("+"'"+value+"'"+")"+orther;
continue;
}
}
where += " and `"+Sqlutil.toUnderScoreCase(field.getName())+"`"+s+" '"+escapeSql(value+"")+"'"+orther;
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
sql += where;
if(StringUtils.isNoneBlank(like))
{
sql += " and (1=2 "+like+")";
}
return sql;
}
/**
* 获取对象列表
*/
public String getObjectList(Map<String, Object> para)
{
Object object = para.get("object");
@SuppressWarnings("unchecked")
Map<String,String> whereMap = (Map<String, String>) para.get("whereMap");
String selectStr = " * ";
String order = "";
if(para.containsKey("order") && null != para.get("order"))
{
order = para.get("order") +"";
}
Integer pageSize = 0;
if(para.containsKey("pageSize") && null != para.get("pageSize"))
{
pageSize = (Integer) para.get("pageSize");
}
Integer pageNo = 0;
if(para.containsKey("pageNo") && null != para.get("pageNo"))
{
pageNo = (Integer) para.get("pageNo");
}
if(para.containsKey("selectStr") && null != para.get("selectStr"))
{
selectStr = para.get("selectStr")+"";
}else{
selectStr = getSelect(object.getClass());
}
String tableName = changTableNameFromObject(object);
if(para.containsKey("tableName") && null != para.get("tableName"))
{
tableName = para.get("tableName")+"";
}
String sql = "select "+selectStr+" from "+tableName;
String where = " where 1=1 ";
String like = "";
Method[] methods = object.getClass().getMethods();
Field[] fields = object.getClass().getDeclaredFields();
if(null != fields && fields.length !=0 )
{
for(int i=0;i<fields.length;i++)
{
Field field = fields[i];
if(!haveGetMethod(methods,field))
{
continue;
}
try {
Method method;
method = object.getClass().getMethod("get"+ Sqlutil.getName(field.getName()));
Object value = method.invoke(object);
if(!(null == value))
{
String orther = "";
String s = "=";
if(!(null == whereMap || null == whereMap.get(field.getName())))
{
s = whereMap.get(field.getName());
if("like".equals(s))
{
value = "%"+value+"%";
like += " or " + "`"+Sqlutil.toUnderScoreCase(field.getName())+"`"+s+" '"+escapeSql(value+"")+"'"+orther ;
continue;
}
if("time".equals(s))
{
s = ">";
orther = " and `"+Sqlutil.toUnderScoreCase(field.getName())+"`< '"+whereMap.get("end_"+field.getName())+"'";
}
if("in".equals(s))
{
s = "in";
value = (value+"").replace(",","','");
where += " and `"+Sqlutil.toUnderScoreCase(field.getName())+"`"+s+" ("+"'"+value+"'"+")"+orther;
continue;
}
}
where += " and `"+Sqlutil.toUnderScoreCase(field.getName())+"`"+s+" '"+escapeSql(value+"")+"'"+orther;
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
sql += where;
if(StringUtils.isNoneBlank(like))
{
sql += " and (1=2 "+like+")";
}
if(StringUtils.isNotBlank(order))
{
sql += " order by "+order;
}
if(0 != pageSize && 0 != pageNo)
{
sql += " limit "+((pageNo-1)*pageSize)+","+pageSize;
}
return sql;
}
/**
* 添加或更新对象
* INSERT INTO test(`in1`,`str1`) VALUES ('1','1');
* @param object 对象
* @return
*/
public String saveOrUpdateObject(Object object)
{
String sql = "insert into ";
String tableName = changTableNameFromObject(object);
sql += tableName + "(";
Field[] fields = object.getClass().getDeclaredFields( );
Method[] methods = object.getClass().getMethods( );
String values = "(";
String update = "";
for(Field field:fields)
{//
if(!haveGetMethod(methods,field))
{
continue;
}
Method method;
try {
method = object.getClass().getMethod("get"+Sqlutil.getName(field.getName()));
Object value = method.invoke(object);
if(null != value)
{
if(!"(".equals(values) )
{
sql += ",";
values += ",";
update += ",";
}
sql += "`"+Sqlutil.toUnderScoreCase(field.getName())+"`";
values += "'"+ escapeSql(value+"")+"'";
update += "`"+Sqlutil.toUnderScoreCase(field.getName())+"`"+"=VALUES("+"`"+Sqlutil.toUnderScoreCase(field.getName())+"`)";
}
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
sql += ")";
values += ")";
return sql+" values "+values+" ON DUPLICATE KEY UPDATE "+update;
}
/**
* 添加或更新对象列表
* INSERT INTO `test` (`in1`,`str1`)VALUES ('1','2'),('2','2') ON DUPLICATE KEY UPDATE `in1`=VALUES(`in1`),`str1`=VALUES(`str1`);
* @param objectlist 对象列表
* @return
*/
public String saveOrUpdateObjectList(List<Object> objectlist)
{
StringBuffer sb =new StringBuffer();
String update = "";
for(int i = 0; i<objectlist.size();i++)
{
Object object = objectlist.get(i);
Field[] fields = object.getClass().getDeclaredFields( );
Method[] methods = object.getClass().getMethods( );
if(i==0)
{
String tableName = changTableNameFromObject(object);
sb.append("INSERT INTO `"+tableName+"` ");
sb.append("(");
for(Field field:fields)
{
if(!haveGetMethod(methods,field))
{
continue;
}
if(!"".equals(update) )
{
sb.append(",");
update += ",";
}
sb.append("`"+Sqlutil.toUnderScoreCase(field.getName())+"`");
update += "`"+Sqlutil.toUnderScoreCase(field.getName())+"`"+"=VALUES("+"`"+Sqlutil.toUnderScoreCase(field.getName())+"`)";
}
sb.append(")");
sb.append("VALUES ");
}else{
sb.append(",");
}
for(int j=0;j<fields.length;j++)
{
Field field = fields[j];
Method method;
try {
if(!haveGetMethod(methods,field))
{
continue;
}
method = object.getClass().getMethod("get"+Sqlutil.getName(field.getName()));
Object value = method.invoke(object);
if(null == value)
{
value = "";
}
if(j!=0)
{
sb.append(",");
}else{
sb.append("(");
}
sb.append("'"+ escapeSql(value+"")+"'");
if(j==fields.length-1)
{
sb.append(")");
}
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
sb.append(" ON DUPLICATE KEY UPDATE ");
sb.append(update);
return sb.toString();
}
public String getObjectListBySQL(Map<String, Object> para)
{
return para.get("sql")+"";
}
public String updateBySql(String sql)
{
return sql;
}
public String selectCountBySql(Map<String, Object> para)
{
String sql = (String) para.get("sql");
if(!sql.toUpperCase().startsWith("SELECT COUNT("))
{
try {
throw new Exception("不是count查询");
} catch (Exception e) {
e.printStackTrace();
}
}
return sql;
}
public static String escapeSql(String str) {
return str == null ? null : StringUtils.replace(str, "'", "''");
}
private String getSelect(Class<?> clas)
{
String select = "";
Field[] fields = clas.getDeclaredFields();
Method[] methods = clas.getMethods();
for(Field field:fields)
{
if(!haveGetMethod(methods,field))
{
continue;
}
if(!"".equals(select))
{
select += ",";
}
String fieldName = field.getName();
select +="`"+ Sqlutil.toUnderScoreCase(fieldName) +"` "+fieldName;
}
if("".equals(select))
{
select = "*";
}
return select;
}
public <T> String selectTList(T t)
{
String tableName = changTableNameFromObject(t);
StringBuffer stringBuffer = new StringBuffer("select * from ");
stringBuffer.append("`");
stringBuffer.append(tableName);
stringBuffer.append("`");
StringBuffer orderbyStringBuffer = new StringBuffer();
StringBuffer whereStringBuffer = new StringBuffer();
if(t instanceof MyBaseEntity)
{
MyBaseEntity baseEntity = (MyBaseEntity) t;
Map<String, Object[]> timeMap = baseEntity.getTimeMap();
String[] keyValues = baseEntity.getKeyValue();
Map<String, QueryType> params = baseEntity.getParams();
String orderBy = baseEntity.getOrderBy();
if(StringUtils.isNotEmpty(timeMap)) //时间条件
{
for (String time:timeMap.keySet())
{
whereStringBuffer.append(" AND ");
whereStringBuffer.append(setObject(time,QueryType.GTE,timeMap.get(time)[0]));// 开始时间
whereStringBuffer.append(" AND ");
whereStringBuffer.append(setObject(time,QueryType.LTE,timeMap.get(time)[1]));// 结束时间
}
}
if(StringUtils.isNotEmpty(params)) //自定义条件
{
Class clas = t.getClass();
for (String key:params.keySet())
{
String getterMethodName = "get"+ org.apache.commons.lang3.StringUtils.capitalize(key);
try {
Method method = clas.getMethod(getterMethodName);
Object value = method.invoke(t);
if(StringUtils.isNotNull(value))
{
QueryType queryType = params.get(key);
whereStringBuffer.append(" AND ");
whereStringBuffer.append(setObject(key,queryType,value));
}
} catch (NoSuchMethodException e) {
throw new RuntimeException(e);
} catch (InvocationTargetException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}
}
if(StringUtils.isNotEmpty(keyValues)) //模糊匹配添加
{
StringBuffer likeString = new StringBuffer();
String value = keyValues[0];
String[] keys = keyValues[1].split(",");
for(String key:keys)
{
likeString.append(" OR ");
likeString.append(setObject(key,QueryType.LIKE,value));
}
if(likeString.length() >0)
{
whereStringBuffer.append(" AND (");
whereStringBuffer.append(likeString.substring(3));
whereStringBuffer.append(")");
}
}
if(StringUtils.isNotEmpty(orderBy)) //排序
{
orderbyStringBuffer.append(" ORDER BY ");
orderbyStringBuffer.append(orderBy);
}
}
getValuseWhere(t,whereStringBuffer); //不带条件的有值参数
if(whereStringBuffer.length()>0)
{
stringBuffer.append(" WHERE ").append(whereStringBuffer.substring(4));
}
if(orderbyStringBuffer.length()>0)
{
stringBuffer.append(orderbyStringBuffer);
}
return stringBuffer.toString();
}
private String setObject(String key,QueryType queryType,Object o)
{
String dengshi = "=";
String yingyong = "'{}'";
switch (queryType)
{
case EQ:
dengshi = " = ";
break;
case NE:
dengshi = " != ";
break;
case GT:
dengshi = " > ";
break;
case GTE:
dengshi = " >= ";
break;
case LT:
dengshi = " < ";
break;
case LTE:
dengshi = " <= ";
break;
case LIKE:
dengshi = " like ";
yingyong = "'%{}%'";
break;
}
if(o instanceof Number)
{
yingyong = "{}";
}else if(o instanceof Date)
{
yingyong = "'"+ DateUtils.parseDateToStr(DateUtils.getTime(), (Date) o)+"'";
}
return " `"+Sqlutil.toUnderScoreCase(key)+"`"+dengshi+ StringUtils.format(yingyong,o) +" ";
}
private <T> void getValuseWhere(T t,StringBuffer stringBuffer)
{
Class clas = t.getClass();
Field[] fields = clas.getDeclaredFields(); //获取所有属性
Method[] methods = clas.getMethods(); //获取所有方法
for (Field field:fields)
{
field.setAccessible(true);
try {
Object value = field.get(t);
if(null != value && haveGetMethod(methods,field))
{
stringBuffer.append(" AND ");
stringBuffer.append(setObject(field.getName(),QueryType.EQ,value));
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
private boolean haveGetMethod(Method[] methods,Field field)
{
for (Method method:methods) //如何没有get方法就过滤掉
{
if(method.getName().equals("get"+ org.apache.commons.lang3.StringUtils.capitalize(field.getName())))
{
return true;
}
}
return false;
}
}
... ...
package com.zhonglai.luhui.dao.mapper;
import com.zhonglai.luhui.dao.dto.PublicSQL;
import com.zhonglai.luhui.dao.dto.PublicTemplateSQL;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Component;
... ... @@ -15,26 +15,26 @@ public interface PublicTemplateMapper {
/**
* 添加对象
*/
@InsertProvider(type = PublicSQL.class, method = "insert")
@InsertProvider(type = PublicTemplateSQL.class, method = "insert")
int insert(Object object);
/**
* 指定表名添加
*/
@InsertProvider(type = PublicSQL.class, method = "insertToTable")
@InsertProvider(type = PublicTemplateSQL.class, method = "insertToTable")
@Options(useGeneratedKeys = true, keyProperty = "object.id")
int insertToTable(@Param("object") Object object,@Param("tableName") String tableName,@Param("primaryKey") String primaryKey);
/**
* 添加对象集合
*/
@InsertProvider(type = PublicSQL.class, method = "insertAll")
@InsertProvider(type = PublicTemplateSQL.class, method = "insertAll")
int insertAll(List<?> list);
/**
* 指定表名添加对象集合
*/
@InsertProvider(type = PublicSQL.class, method = "insertAllToTable")
@InsertProvider(type = PublicTemplateSQL.class, method = "insertAllToTable")
int insertAllToTable(@Param("list")List<?> list,@Param("tableName")String tableName);
/**
... ... @@ -42,17 +42,17 @@ public interface PublicTemplateMapper {
* @param object
* @param whereFieldNames
*/
@UpdateProvider(type = PublicSQL.class, method = "updateObject")
@UpdateProvider(type = PublicTemplateSQL.class, method = "updateObject")
int updateObject(@Param("object") Object object, @Param("whereFieldNames") String whereFieldNames);
@UpdateProvider(type = PublicSQL.class, method = "updateObject")
@UpdateProvider(type = PublicTemplateSQL.class, method = "updateObject")
int updateObjectByTable(@Param("object") Object object, @Param("whereFieldNames") String whereFieldNames, @Param("tablename") String tablename);
/**
* 自定义sql更新
* @param sql
*/
@UpdateProvider(type = PublicSQL.class, method = "updateBySql")
@UpdateProvider(type = PublicTemplateSQL.class, method = "updateBySql")
int updateBySql(String sql);
/**
... ... @@ -62,10 +62,10 @@ public interface PublicTemplateMapper {
* @param values
* @return
*/
@SelectProvider(type = PublicSQL.class, method = "getObject")
@SelectProvider(type = PublicTemplateSQL.class, method = "getObject")
Map<String,Object> getObject(@Param("class") Class<?> clas, @Param("idName") String idName, @Param("values") String values);
@SelectProvider(type = PublicSQL.class, method = "selectCountBySql")
@SelectProvider(type = PublicTemplateSQL.class, method = "selectCountBySql")
Long selectCountBySql(@Param("sql") String sql);
/**
* 查询 通过条件查询
... ... @@ -74,7 +74,7 @@ public interface PublicTemplateMapper {
* @param values
* @return
*/
@SelectProvider(type = PublicSQL.class, method = "getObject")
@SelectProvider(type = PublicTemplateSQL.class, method = "getObject")
Map<String,Object> getObjectForTableName(@Param("class") Class<?> clas, @Param("idName") String idName, @Param("values") String values, @Param("tableName") String tableName);
/**
... ... @@ -85,7 +85,7 @@ public interface PublicTemplateMapper {
* @param values 主鍵值
* @return
*/
@SelectProvider(type = PublicSQL.class, method = "getObject")
@SelectProvider(type = PublicTemplateSQL.class, method = "getObject")
Map<String,Object> getObjectSelectTableName(@Param("class") Class<?> clas, @Param("select") String select, @Param("idName") String idName, @Param("values") String values, @Param("tableName") String tableName);
/**
... ... @@ -97,7 +97,7 @@ public interface PublicTemplateMapper {
* @param pageNo
* @return
*/
@SelectProvider(type = PublicSQL.class, method = "getObjectList")
@SelectProvider(type = PublicTemplateSQL.class, method = "getObjectList")
List<Map<String,Object>> getObjectList(@Param("object") Object object, @Param("selectStr") String selectStr, @Param("whereMap") Map<String, String> whereMap, @Param("order") String order, @Param("pageSize") Integer pagetSize, @Param("pageNo") Integer pageNo);
/**
... ... @@ -106,7 +106,7 @@ public interface PublicTemplateMapper {
* @param whereMap 如果是时间,whereMap里面对应的字段比较符为time,同时添加一个end_字段名的值 表示是结束时间
* @return
*/
@SelectProvider(type = PublicSQL.class, method = "getObjectListTotle")
@SelectProvider(type = PublicTemplateSQL.class, method = "getObjectListTotle")
Long getObjectListTotle(@Param("object") Object object, @Param("whereMap") Map<String, String> whereMap);
/**
... ... @@ -114,7 +114,7 @@ public interface PublicTemplateMapper {
* @param oClass
* @param map
*/
@UpdateProvider(type = PublicSQL.class, method = "deleteObjectByContent")
@UpdateProvider(type = PublicTemplateSQL.class, method = "deleteObjectByContent")
int deleteObjectByContent(@Param("objectCalss") Class<?> oClass, @Param("map") Map<String, String> map);
/**
... ... @@ -122,7 +122,7 @@ public interface PublicTemplateMapper {
* @param sql
* @return
*/
@SelectProvider(type = PublicSQL.class, method = "getObjectListBySQL")
@SelectProvider(type = PublicTemplateSQL.class, method = "getObjectListBySQL")
List<Map<String,Object>> getObjectListBySQL(@Param("sql") String sql);
/**
* 添加或更新对象列表
... ... @@ -130,7 +130,7 @@ public interface PublicTemplateMapper {
* @param objectlist 对象列表
* @return
*/
@UpdateProvider(type = PublicSQL.class, method = "saveOrUpdateObjectList")
@UpdateProvider(type = PublicTemplateSQL.class, method = "saveOrUpdateObjectList")
int saveOrUpdateObjectList(List<Object> objectlist);
/**
... ... @@ -139,21 +139,21 @@ public interface PublicTemplateMapper {
* @param object 对象
* @return
*/
@UpdateProvider(type = PublicSQL.class, method = "saveOrUpdateObject")
@UpdateProvider(type = PublicTemplateSQL.class, method = "saveOrUpdateObject")
int saveOrUpdateObject(Object object);
/**
* 通过id删除数据
* @return
*/
@UpdateProvider(type = PublicSQL.class, method = "deleteObjectById")
@UpdateProvider(type = PublicTemplateSQL.class, method = "deleteObjectById")
int deleteObjectById(@Param("objectCalss") Class<?> oClass, @Param("id") String id);
@Options(useGeneratedKeys = false)
@InsertProvider(type = PublicSQL.class, method = "updateBySql")
@InsertProvider(type = PublicTemplateSQL.class, method = "updateBySql")
int insertIntoBySql(@Param("sql") String sql);
@SelectProvider(type = PublicSQL.class, method = "selectTList")
@SelectProvider(type = PublicTemplateSQL.class, method = "selectTList")
List<Map<String,Object>> selectTList(Object t);
}
... ...
package com.zhonglai.luhui.dao.sql;
import java.util.Map;
/**
* Entity基类
*
* @author ruoyi
*/
public class MyBaseEntity
{
private Map<String,Object[]> timeMap; //时间条件(如:{"create_time":[开始时间,结束时间]})
private String[] keyValue; //模糊匹配的关键字(如:["value","name,no"])
private Map<String, QueryType> params; //字段对应的比较符号(如:{"id":"EQ"})
private String orderBy; //排序(如:"id desc,name asc")
private String remark; //备注
public Map<String, Object[]> getTimeMap() {
return timeMap;
}
public void setTimeMap(Map<String, Object[]> timeMap) {
this.timeMap = timeMap;
}
public String[] getKeyValue() {
return keyValue;
}
public void setKeyValue(String[] keyValue) {
this.keyValue = keyValue;
}
public Map<String, QueryType> getParams() {
return params;
}
public String getOrderBy() {
return orderBy;
}
public void setOrderBy(String orderBy) {
this.orderBy = orderBy;
}
public void setParams(Map<String, QueryType> params) {
this.params = params;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
}
... ...
package com.zhonglai.luhui.dao.sql;
public enum QueryType {
/**
* 等于
*/
EQ,
/**
* 不等于
*/
NE,
/**
* 大于
*/
GT,
/**
* 大于等于
*/
GTE,
/**
* 小于
*/
LT,
/**
* 小于等于
*/
LTE,
/**
* 模糊匹配
*/
LIKE
}
... ...
package com.zhonglai.luhui.dao.util;
public class Sqlutil {
/** 下划线 */
private static final char SEPARATOR = '_';
/**
* 驼峰转下划线命名
*/
public static String toUnderScoreCase(String str)
{
if (str == null)
{
return null;
}
StringBuilder sb = new StringBuilder();
// 前置字符是否大写
boolean preCharIsUpperCase = true;
// 当前字符是否大写
boolean curreCharIsUpperCase = true;
// 下一字符是否大写
boolean nexteCharIsUpperCase = true;
for (int i = 0; i < str.length(); i++)
{
char c = str.charAt(i);
if (i > 0)
{
preCharIsUpperCase = Character.isUpperCase(str.charAt(i - 1));
}
else
{
preCharIsUpperCase = false;
}
curreCharIsUpperCase = Character.isUpperCase(c);
if (i < (str.length() - 1))
{
nexteCharIsUpperCase = Character.isUpperCase(str.charAt(i + 1));
}
if (preCharIsUpperCase && curreCharIsUpperCase && !nexteCharIsUpperCase)
{
sb.append(SEPARATOR);
}
else if ((i != 0 && !preCharIsUpperCase) && curreCharIsUpperCase)
{
sb.append(SEPARATOR);
}
sb.append(Character.toLowerCase(c));
}
return sb.toString();
}
/**
* [简要描述]:首字母大写
*
* @author com.zhonglai
* @param str
* @return
*/
public static String getName(String str) {
char ch = str.toCharArray()[0];
ch = (char) ((ch - 97) + 'A');
str = ch + str.substring(1);
return str;
}
}
... ...
... ... @@ -26,7 +26,7 @@ import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
@Api(tags = "设备控制")
@Api(tags = "控制器")
@RestController
@RequestMapping("/iot/controlDevice")
public class ControlDeviceConreoller extends BaseController {
... ...
... ... @@ -189,7 +189,6 @@ public class IotThingsModelController extends BaseController
iotThingsModel.setMqtt_username(iotProduct.getMqtt_username());
terminalDataThingsModeService.saveIotThingsModel(JSON.parseObject(JSONObject.toJSONString(iotThingsModel),IotThingsModel.class));
return toAjax(ri);
}
... ...