ISqlUtils.java 7.8 KB

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