ISqlUtils.java 4.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. package com.yihu.jw.util;/**
  2. * Created by nature of king on 2018/4/27.
  3. */
  4. import javax.persistence.Column;
  5. import javax.persistence.Table;
  6. import java.lang.reflect.Field;
  7. import java.lang.reflect.Method;
  8. /**
  9. * @author wangzhinan
  10. * @create 2018-04-27 12:47
  11. * @desc sql自定义编辑
  12. **/
  13. public class ISqlUtils {
  14. public static String getSql(Object object,Integer page,Integer size,String isFlag){
  15. StringBuffer sb = new StringBuffer();
  16. Class c =object.getClass();
  17. Table table = (Table)c.getAnnotation(Table.class);
  18. String tableName = table.name();
  19. if (isFlag.equalsIgnoreCase("count")){
  20. sb.append("select count(1) AS total from ").append(tableName).append(" where 1=1");
  21. }else if(isFlag.equalsIgnoreCase("*")){
  22. sb.append("select * from ").append(tableName).append(" where 1=1 ");
  23. }
  24. Field[] fArray= c.getDeclaredFields();
  25. for(Field f:fArray){
  26. //拿到字段后与实体类中的属性匹配,并得到其get方法,用来获取他的属性值
  27. String getMethodName ="";
  28. boolean isCExist =f.isAnnotationPresent(Column.class);
  29. if(isCExist){
  30. Column mc =f.getAnnotation(Column.class);
  31. String columeName =mc.name(); //字段对应数据库名字
  32. String name =f.getName(); //字段名字
  33. Object value=null; //字段值
  34. getMethodName="get"+name.substring(0,1).toUpperCase()+name.substring(1);//拼接属性的get方法
  35. try {
  36. Method m =c.getMethod(getMethodName);
  37. value =(Object)m.invoke(object); //拿到属性的值
  38. if(value == null || "".equals(value) || value.equals(Integer.parseInt("0"))){ //如果属性没值,不拼接sql
  39. continue;
  40. }
  41. else if(value instanceof String){
  42. value ="'"+value+"'";
  43. }
  44. } catch (Exception e) {
  45. e.printStackTrace();
  46. }
  47. sb.append(" and ").append(columeName +"=" ).append(value+"");
  48. }
  49. }
  50. if(isFlag.equalsIgnoreCase("*")){
  51. sb.append("ORDER BY update_time DESC ").append("LIMIT ").append((page-1)*size+",").append(size);
  52. }
  53. return sb.toString();
  54. }
  55. public static String getAllSql(Object object){
  56. StringBuffer sb = new StringBuffer();
  57. Class c =object.getClass();
  58. Table table = (Table)c.getAnnotation(Table.class);
  59. String tableName = table.name();
  60. sb.append("select * from ").append(tableName).append(" where 1=1 ");
  61. Field[] fArray= c.getDeclaredFields();
  62. for(Field f:fArray){
  63. //拿到字段后与实体类中的属性匹配,并得到其get方法,用来获取他的属性值
  64. String getMethodName ="";
  65. boolean isCExist =f.isAnnotationPresent(Column.class);
  66. if(isCExist){
  67. Column mc =f.getAnnotation(Column.class);
  68. String columeName =mc.name(); //字段对应数据库名字
  69. String name =f.getName(); //字段名字
  70. Object value=null; //字段值
  71. getMethodName="get"+name.substring(0,1).toUpperCase()+name.substring(1);//拼接属性的get方法
  72. try {
  73. Method m =c.getMethod(getMethodName);
  74. value =(Object)m.invoke(object); //拿到属性的值
  75. if(value == null || "".equals(value) || value.equals(Integer.parseInt("0"))){ //如果属性没值,不拼接sql
  76. continue;
  77. }
  78. else if(value instanceof String){
  79. value ="'"+value+"'";
  80. }
  81. } catch (Exception e) {
  82. e.printStackTrace();
  83. }
  84. sb.append(" and ").append(columeName +"=" ).append(value+"");
  85. }
  86. }
  87. return sb.toString();
  88. }
  89. }