ISqlUtils.java 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  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. }else if (isFlag.equalsIgnoreCase("sort")){
  28. sb.append("select * from ").append(tableName).append(" where 1=1 ");
  29. }
  30. JSONObject object1 = (JSONObject) JSONObject.toJSON(object);
  31. if (object1.getString("id") !=null){
  32. sb.append(" and id = '" + object1.getString("id")+"' ");
  33. }
  34. Field[] fArray= c.getDeclaredFields();
  35. for(Field f:fArray){
  36. //拿到字段后与实体类中的属性匹配,并得到其get方法,用来获取他的属性值
  37. String getMethodName ="";
  38. boolean isCExist =f.isAnnotationPresent(Column.class);
  39. if(isCExist){
  40. Column mc =f.getAnnotation(Column.class);
  41. String columeName =mc.name(); //字段对应数据库名字
  42. String name =f.getName(); //字段名字
  43. Class a= f.getType(); //字段类型
  44. Object value=null; //字段值
  45. getMethodName="get"+name.substring(0,1).toUpperCase()+name.substring(1);//拼接属性的get方法
  46. try {
  47. Method m =c.getMethod(getMethodName);
  48. value =(Object)m.invoke(object); //拿到属性的值
  49. if(value == null || "".equals(value)){ //如果属性没值,不拼接sql
  50. continue;
  51. }
  52. else if(value instanceof String){
  53. value ="'%"+value+"%'";
  54. sb.append(" and ").append(columeName +" like " ).append(value+"");
  55. }else if (value instanceof Integer){
  56. value = value;
  57. sb.append(" and ").append(columeName +" = " ).append(value+"");
  58. }
  59. } catch (Exception e) {
  60. e.printStackTrace();
  61. }
  62. }
  63. }
  64. JSONObject jsonObject = (JSONObject) JSONObject.toJSON(object);
  65. SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  66. Date date1 = jsonObject.getDate("startTime");
  67. Date date2 = jsonObject.getDate("endTime");
  68. String startTime = null;
  69. String endTime = null;
  70. if (date1 != null){
  71. startTime = sdf.format(date1);
  72. }
  73. if (date2 != null) {
  74. endTime = sdf.format(date2);
  75. }
  76. if (StringUtils.isNoneBlank(startTime)&& StringUtils.isNoneBlank(endTime)){
  77. sb.append(" and start_time >= '"+startTime+"' and end_time <='"+endTime+"'");
  78. } else if (StringUtils.isNoneBlank(startTime)&&!StringUtils.isNoneBlank(endTime)) {
  79. sb.append(" and start_time >= '"+startTime+"'");
  80. }else if (StringUtils.isNoneBlank(endTime)&&!StringUtils.isNoneBlank(startTime)){
  81. sb.append(" and end_time <= '"+endTime+"'");
  82. }
  83. if(isFlag.equalsIgnoreCase("*")){
  84. sb.append(" ORDER BY create_time DESC ").append("LIMIT ").append((page-1)*size+",").append(size);
  85. }
  86. if(isFlag.equalsIgnoreCase("sort")){
  87. sb.append(" ORDER BY sort ASC ").append("LIMIT ").append((page-1)*size+",").append(size);
  88. }
  89. return sb.toString();
  90. }
  91. public static String getAllSql(Object object){
  92. StringBuffer sb = new StringBuffer();
  93. Class c =object.getClass();
  94. Table table = (Table)c.getAnnotation(Table.class);
  95. String tableName = table.name();
  96. sb.append("select * from ").append(tableName).append(" where 1=1 ");
  97. Field[] fArray= c.getDeclaredFields();
  98. for(Field f:fArray){
  99. //拿到字段后与实体类中的属性匹配,并得到其get方法,用来获取他的属性值
  100. String getMethodName ="";
  101. boolean isCExist =f.isAnnotationPresent(Column.class);
  102. if(isCExist){
  103. Column mc =f.getAnnotation(Column.class);
  104. String columeName =mc.name(); //字段对应数据库名字
  105. String name =f.getName(); //字段名字
  106. Object value=null; //字段值
  107. getMethodName="get"+name.substring(0,1).toUpperCase()+name.substring(1);//拼接属性的get方法
  108. try {
  109. Method m =c.getMethod(getMethodName);
  110. value =(Object)m.invoke(object); //拿到属性的值
  111. if(value == null || "".equals(value) || value.equals(Integer.parseInt("0"))){ //如果属性没值,不拼接sql
  112. continue;
  113. }
  114. else if(value instanceof String){
  115. value ="'"+value+"'";
  116. }
  117. } catch (Exception e) {
  118. e.printStackTrace();
  119. }
  120. sb.append(" and ").append(columeName +"=" ).append(value+"");
  121. }
  122. }
  123. return sb.toString();
  124. }
  125. public static String getUpdateSql(Object object){
  126. StringBuffer sb = new StringBuffer();
  127. Class c = object.getClass();
  128. Table table = (Table)c.getAnnotation(Table.class);
  129. String tableName = table.name();
  130. sb.append("update ").append(tableName).append(" set ");
  131. Field[] fArray = c.getDeclaredFields();
  132. for (Field f:fArray){
  133. String getMethoName = "";
  134. boolean isCExist = f.isAnnotationPresent(Column.class);
  135. if (isCExist){
  136. Column mc = f.getAnnotation(Column.class);
  137. String columeName = mc.name();
  138. String name = f.getName();
  139. Class a= f.getType();
  140. Object value= null;
  141. getMethoName = "get" + name.substring(0,1).toUpperCase()+name.substring(1);
  142. try {
  143. Method m = c.getMethod(getMethoName);
  144. if (Date.class.isAssignableFrom(a)){
  145. SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  146. value = sdf.format((Object)m.invoke(object));
  147. }else {
  148. value = (Object)m.invoke(object);
  149. }
  150. if (value == null || "".equals(value)){
  151. continue;
  152. }
  153. else if (value instanceof String){
  154. value = "'"+value+"'";
  155. }
  156. }catch (Exception e){
  157. e.printStackTrace();
  158. }
  159. sb.append(columeName + "=").append(value+"").append(",");
  160. }
  161. }
  162. sb.deleteCharAt(sb.length()-1);
  163. JSONObject jsonObject = (JSONObject) JSONObject.toJSON(object);
  164. sb.append(" where ").append("id = ").append("'"+jsonObject.get("id")+"'");
  165. return sb.toString();
  166. }
  167. }