Java生成 sql查询语句 通用方法(带排序/分页)(未测试)
2016-07-22 12:16
555 查看
1.SqlParameter.java
2.sql生成方法:
3.测试调用:
sql输出:
测试2:
sql输出2:
package com.wuhx.util; public class SqlParameter { private String tableName; //物理表名 private Integer minrow = 1; //分页最小行[默认1] private Integer maxrow; //分页最大行 private String[] orderBy; //排序eg: {"columnA","columnB DESC"} public Integer getMinrow() { return minrow; } public void setMinrow(Integer minrow) { this.minrow = minrow; } public Integer getMaxrow() { return maxrow; } public void setMaxrow(Integer maxrow) { this.maxrow = maxrow; } public String[] getOrderBy() { return orderBy; } public void setOrderBy(String[] orderBy) { this.orderBy = orderBy; } public String getTableName() { return tableName; } public void setTableName(String tableName) { this.tableName = tableName; } }
2.sql生成方法:
/** * * @param obj SQL参数 * @param param 分页/排序参数 * @return * @throws Exception */ public static String createSQL(Object obj, SqlParameter param) throws Exception { StringBuilder sb = new StringBuilder("SELECT t.* FROM "+param.getTableName()+" t WHERE 1=1 "); Field[] fields = obj.getClass().getDeclaredFields(); for(Field f: fields){ f.setAccessible(true); Object fName = f.getName(); Object fValue = f.get(obj); if(fValue != null && !fValue.equals("")){ sb.append(" AND t."+fName+" = '"+fValue+"'"); } f.setAccessible(false); } if(param.getOrderBy() != null){ String orderStr = " ORDER BY "; for(String str:param.getOrderBy()){ orderStr += " "+str+","; } orderStr = orderStr.substring(0,orderStr.length()-1); sb.append(orderStr); } if((param.getMinrow() != null) && (param.getMaxrow() != null)){ StringBuilder sb2 = new StringBuilder("SELECT * FROM ( SELECT A.*, ROWNUM RN FROM ( "); sb2.append(sb.toString()); sb2.append( " ) A WHERE ROWNUM <= "+param.getMaxrow()+" ) WHERE RN >= "+param.getMinrow() ); sb = sb2; } return sb.toString(); }
3.测试调用:
Teacher t = new Teacher(); t.setTeaId(123456789); //t.setTeaLevel("副教授"); //t.setTeaName("王老师"); SqlParameter p = new SqlParameter(); p.setTableName("PROPAGANDA_LOG"); p.setOrderBy(new String[]{"columnA","columnB DESC"}); p.setMaxrow(10); p.setMinrow(5); System.out.println(createSQL(t,p));
sql输出:
SELECT * FROM ( SELECT A.*, ROWNUM RN FROM ( SELECT t.* FROM PROPAGANDA_LOG t WHERE 1=1 AND t.teaId = '123456789' ORDER BY columnA, columnB DESC ) A WHERE ROWNUM <= 10 ) WHERE RN >= 5
测试2:
Student s = new Student(); s.setStuAge("18"); s.setStuName("张三"); SqlParameter p = new SqlParameter(); p.setTableName("STUDENT_LOG"); System.out.println(createSQL(s,p));
sql输出2:
SELECT t.* FROM STUDENT_LOG t WHERE 1=1 AND t.stuName = '张三' AND t.stuAge = '18'
相关文章推荐
- java中length,length(),size()区别
- java intall 相关
- spring动态代理
- java获取服务器一些信息方法集合(访问路径之类的) (未测试)
- SpringBoot入门系列:第三篇 日志输出
- Java 多线程之线程监控
- 一个Java实现的简单的多个客户端聊天程序(未测试)
- JAVA 发送下载文件(未测试)
- 生成验证码的java类(未测试)
- java选择排序算法(未测试)
- Java获取本地机器MAC地址
- HDPCD:Java认证考试经验总结
- java学习之计算器基本实现
- SpringBoot入门系列:第二篇 再学Hello World
- Java 完美判断中文字符的方法
- Java实现GB2312文件转UTF8文件
- SpringBoot入门系列:第一篇 Hello World
- java 项目打包流程速记
- SpringMVC给控制器添加自定义注解控制访问权限(未测试)
- [转]怎样解决Myeclipse内存溢出?