ISqlUtils.java 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. package com.yihu.jw.util;/**
  2. * Created by nature of king on 2018/4/27.
  3. */
  4. import com.alibaba.fastjson.JSONObject;
  5. import org.apache.commons.lang3.StringUtils;
  6. import javax.persistence.Column;
  7. import javax.persistence.Table;
  8. import java.lang.reflect.Field;
  9. import java.lang.reflect.Method;
  10. import java.text.SimpleDateFormat;
  11. import java.util.Date;
  12. /**
  13. * @author wangzhinan
  14. * @create 2018-04-27 12:47
  15. * @desc sql自定义编辑
  16. **/
  17. public class ISqlUtils {
  18. public static String getSql(Object object,Integer page,Integer size,String isFlag){
  19. StringBuffer sb = new StringBuffer();
  20. Class c =object.getClass();
  21. Table table = (Table)c.getAnnotation(Table.class);
  22. String tableName = table.name();
  23. if (isFlag.equalsIgnoreCase("count")){
  24. sb.append("select count(1) AS total from ").append(tableName).append(" where 1=1");
  25. }else if(isFlag.equalsIgnoreCase("*")){
  26. sb.append("select * from ").append(tableName).append(" where 1=1 ");
  27. }
  28. JSONObject object1 = (JSONObject) JSONObject.toJSON(object);
  29. if (object1.getString("id") !=null){
  30. sb.append(" and id = '" + object1.getString("id")+"' ");
  31. }
  32. Field[] fArray= c.getDeclaredFields();
  33. for(Field f:fArray){
  34. //拿到字段后与实体类中的属性匹配,并得到其get方法,用来获取他的属性值
  35. String getMethodName ="";
  36. boolean isCExist =f.isAnnotationPresent(Column.class);
  37. if(isCExist){
  38. Column mc =f.getAnnotation(Column.class);
  39. String columeName =mc.name(); //字段对应数据库名字
  40. String name =f.getName(); //字段名字
  41. Class a= f.getType(); //字段类型
  42. Object value=null; //字段值
  43. getMethodName="get"+name.substring(0,1).toUpperCase()+name.substring(1);//拼接属性的get方法
  44. try {
  45. Method m =c.getMethod(getMethodName);
  46. value =(Object)m.invoke(object); //拿到属性的值
  47. if(value == null || "".equals(value)){ //如果属性没值,不拼接sql
  48. continue;
  49. }
  50. else if(value instanceof String){
  51. value ="'%"+value+"%'";
  52. sb.append(" and ").append(columeName +" like " ).append(value+"");
  53. }else if (value instanceof Integer){
  54. value = value;
  55. sb.append(" and ").append(columeName +" = " ).append(value+"");
  56. }
  57. } catch (Exception e) {
  58. e.printStackTrace();
  59. }
  60. }
  61. }
  62. JSONObject jsonObject = (JSONObject) JSONObject.toJSON(object);
  63. SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  64. Date date1 = jsonObject.getDate("startTime");
  65. Date date2 = jsonObject.getDate("endTime");
  66. String startTime = null;
  67. String endTime = null;
  68. if (date1 != null){
  69. startTime = sdf.format(date1);
  70. } else if (date2 != null) {
  71. endTime = sdf.format(date2);
  72. }
  73. if (StringUtils.isNoneBlank(startTime)&& StringUtils.isNoneBlank(endTime)){
  74. sb.append(" and start_time between "+startTime+" and "+endTime);
  75. } else if (StringUtils.isNoneBlank(startTime)&&!StringUtils.isNoneBlank(endTime)) {
  76. sb.append(" and start_time > '"+startTime+"'");
  77. }else if (StringUtils.isNoneBlank(endTime)&&!StringUtils.isNoneBlank(startTime)){
  78. sb.append(" and end_time < '"+endTime+"'");
  79. }
  80. if(isFlag.equalsIgnoreCase("*")){
  81. sb.append(" ORDER BY create_time DESC ").append("LIMIT ").append((page-1)*size+",").append(size);
  82. }
  83. return sb.toString();
  84. }
  85. public static String getAllSql(Object object){
  86. StringBuffer sb = new StringBuffer();
  87. Class c =object.getClass();
  88. Table table = (Table)c.getAnnotation(Table.class);
  89. String tableName = table.name();
  90. sb.append("select * from ").append(tableName).append(" where 1=1 ");
  91. Field[] fArray= c.getDeclaredFields();
  92. for(Field f:fArray){
  93. //拿到字段后与实体类中的属性匹配,并得到其get方法,用来获取他的属性值
  94. String getMethodName ="";
  95. boolean isCExist =f.isAnnotationPresent(Column.class);
  96. if(isCExist){
  97. Column mc =f.getAnnotation(Column.class);
  98. String columeName =mc.name(); //字段对应数据库名字
  99. String name =f.getName(); //字段名字
  100. Object value=null; //字段值
  101. getMethodName="get"+name.substring(0,1).toUpperCase()+name.substring(1);//拼接属性的get方法
  102. try {
  103. Method m =c.getMethod(getMethodName);
  104. value =(Object)m.invoke(object); //拿到属性的值
  105. if(value == null || "".equals(value) || value.equals(Integer.parseInt("0"))){ //如果属性没值,不拼接sql
  106. continue;
  107. }
  108. else if(value instanceof String){
  109. value ="'"+value+"'";
  110. }
  111. } catch (Exception e) {
  112. e.printStackTrace();
  113. }
  114. sb.append(" and ").append(columeName +"=" ).append(value+"");
  115. }
  116. }
  117. return sb.toString();
  118. }
  119. public static String getUpdateSql(Object object){
  120. StringBuffer sb = new StringBuffer();
  121. Class c = object.getClass();
  122. Table table = (Table)c.getAnnotation(Table.class);
  123. String tableName = table.name();
  124. sb.append("update ").append(tableName).append(" set ");
  125. Field[] fArray = c.getDeclaredFields();
  126. for (Field f:fArray){
  127. String getMethoName = "";
  128. boolean isCExist = f.isAnnotationPresent(Column.class);
  129. if (isCExist){
  130. Column mc = f.getAnnotation(Column.class);
  131. String columeName = mc.name();
  132. String name = f.getName();
  133. Class a= f.getType();
  134. Object value= null;
  135. getMethoName = "get" + name.substring(0,1).toUpperCase()+name.substring(1);
  136. try {
  137. Method m = c.getMethod(getMethoName);
  138. if (Date.class.isAssignableFrom(a)){
  139. SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  140. value = sdf.format((Object)m.invoke(object));
  141. }else {
  142. value = (Object)m.invoke(object);
  143. }
  144. if (value == null || "".equals(value)){
  145. continue;
  146. }
  147. else if (value instanceof String){
  148. value = "'"+value+"'";
  149. }
  150. }catch (Exception e){
  151. e.printStackTrace();
  152. }
  153. sb.append(columeName + "=").append(value+"").append(",");
  154. }
  155. }
  156. sb.deleteCharAt(sb.length()-1);
  157. JSONObject jsonObject = (JSONObject) JSONObject.toJSON(object);
  158. sb.append(" where ").append("id = ").append("'"+jsonObject.get("id")+"'");
  159. return sb.toString();
  160. }
  161. }