Java中SQL动态封装工具类--Java自学网
package com.javalearns.util;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
/**
* SQL动态封装工具
*
* simple::
*
* BaseSelector select = new BaseSelector();
* select.setCommand("select * from stat_user ");
* select.createCriteria().andEqualTo("org_code", "YZ1201")
* .andGreaterThanOrEqualTo("day_code", "2009-01-01")
* .andLessThanOrEqualTo("day_code", "2009-03-31");
* List<Map> rowset = SqlTemplate.executeQuery(select.toSql(),new Object[] {});
*
* output:select * from stat_user where org_code = 'YZ1201' and day_code >= '2009-01-01' and day_code <= '2009-03-31'
*
*/
public class BaseSelector {
/**
* sql语句
*/
private String command;
/**
* 表名称
*/
private String tableName;
/**
* 表字段
*/
private String tableField;
/**
* 排序字段
*/
protected String orderByClause;
/**
* 分组字段
*/
protected String groupByClause;
/**
* 统计字段
*/
protected String countClause;
/**
* sql条件
*/
protected List<Criteria> oredCriteria;
public String getCommand()
{
return command;
}
public void setCommand(String command)
{
this.command = command;
}
public BaseSelector() {
oredCriteria = new ArrayList<Criteria>();
}
protected BaseSelector(BaseSelector example) {
this.tableName = example.tableName;
this.orderByClause = example.orderByClause;
this.oredCriteria = example.oredCriteria;
this.groupByClause = example.groupByClause;
this.countClause = example.countClause;
}
/**
* 生成最终sql语句
*/
public String toSql()
{
if(oredCriteria==null||oredCriteria.size()<=0)
return command;
StringBuffer sqlAll = new StringBuffer();
sqlAll.append(command);
sqlAll.append(" ");
if(tableField != null){
sqlAll.append(tableField);
}
sqlAll.append(" ");
if(countClause != null){
sqlAll.append(countClause);
}
sqlAll.append(" ");
command = sqlAll.toString();
if (command != null && command.toUpperCase().indexOf(" WHERE ") == -1)
//if (command != null && command.toUpperCase().indexOf(" WHERE ") == -1)
sqlAll.append(" WHERE ");
else
sqlAll.append(" AND ");
for (Criteria cri : oredCriteria)
{
if(!cri.isValid())
continue;
sqlAll.append("(");
StringBuffer sql = new StringBuffer();
criteriaWithoutValueSql(sql,cri.criteriaWithoutValue);
criteriaWithSingleValueSql(sql,cri.criteriaWithSingleValue);
criteriaWithListValueSql(sql,cri.criteriaWithListValue);
criteriaWithBetweenValueSql(sql,cri.criteriaWithBetweenValue);
sqlAll.append(sql.toString());
sqlAll.append(")");
sqlAll.append(" or ");
}
String sql = sqlAll.substring(0, sqlAll.length()-4);
if(groupByClause != null && groupByClause.toUpperCase().indexOf(" GROUP BY ") == -1){
sql += " GROUP BY ";
sql += groupByClause;
}
if(orderByClause != null && orderByClause.toUpperCase().indexOf(" ORDER BY ") == -1){
sql += " ORDER BY ";
sql += orderByClause;
}
return sql;
//return sqlAll.substring(0, sqlAll.length()-4);
}
@SuppressWarnings("unchecked")
private String criteriaWithoutValueSql(StringBuffer sql,List list)
{
if(list==null)
return "";
int n = list.size();
for (int i = 0;i<n;i++)
{
sql.append(list.get(i));
if(i<n-1)
sql.append(" and ");
}
return sql.toString();
}
@SuppressWarnings("unchecked")
private String criteriaWithSingleValueSql(StringBuffer sql,List list)
{
if(list==null)
return "";
if (sql.length() > 0&&list.size()>0)
sql.append(" and ");
int n = list.size();
for (int i = 0;i<n;i++)
{
Map map = (Map) list.get(i);
sql.append(map.get("condition")).append(map.get("value"));
if(i<n-1)
sql.append(" and ");
}
return sql.toString();
}
@SuppressWarnings("unchecked")
private String criteriaWithListValueSql(StringBuffer sql,List list)
{
if(list==null)
return "";
if (sql.length() > 0&&list.size()>0)
sql.append(" and ");
int n = list.size();
for (int i = 0;i<n;i++)
{
Map map = (Map) list.get(i);
sql.append(map.get("condition")).append("("+join((Collection) map.get("values"),",")+")");
if(i<n-1)
sql.append(" and ");
}
return sql.toString();
}
@SuppressWarnings("unchecked")
private String criteriaWithBetweenValueSql(StringBuffer sql,List list)
{
if(list==null)
return "";
if (sql.length() > 0&&list.size()>0)
sql.append(" and ");
int n = list.size();
for (int i = 0;i<n;i++)
{
Map map = (Map) list.get(i);
sql.append(map.get("condition")).append(join((Collection) map.get("values")," and "));
if(i<n-1)
sql.append(" and ");
}
return sql.toString();
}
@SuppressWarnings("unchecked")
private String join(Collection list,String spe)
{
if(list==null)
return "";
Object array[] = list.toArray();
StringBuffer buff = new StringBuffer();
for (int i = 0; i < array.length; i++)
{
buff.append(array[i]);
if(i<array.length-1)
buff.append(spe);
}
return buff.toString();
}
/**
* 顺序排序
* @param field
*/
public void setOrderByClauseAsc(String field) {
this.orderByClause = getFieldName(field) + " ASC";
}
/**
* 倒序排序
* @param field
*/
public void setOrderByClauseDesc(String field) {
this.orderByClause = getFieldName(field) + " DESC";
}
public String getOrderByClause() {
return orderByClause;
}
public List<Criteria> getOredCriteria() {
return oredCriteria;
}
/**
* 统计总数
* @return
*/
public String getCountClause() {
return countClause;
}
public void setCountClause(String countClause) {
String[] s = countClause.split(",");
if(s.length > 1){
this.countClause = ", count(" + s[s.length-1] + ") ";
}else{
this.countClause = countClause;
}
}
/**
* 获得分组
* @return
*/
public String getGroupByClause() {
return groupByClause;
}
public void setGroupByClause(String groupByClause) {
this.groupByClause = groupByClause;
}
/**
* 表名称
* @return
*/
public String getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
/**
* 表字段
* @return
*/
public String getTableField() {
return tableField;
}
public void setTableField(String tableField) {
this.tableField = tableField;
}
/**
* or 条件
*/
public void or(Criteria criteria) {
oredCriteria.add(criteria);
}
/**
* 创建条件对象
*/
public Criteria createCriteria() {
Criteria criteria = createCriteriaInternal();
if (oredCriteria.size() == 0) {
oredCriteria.add(criteria);
}
return criteria;
}
protected Criteria createCriteriaInternal() {
Criteria criteria = new Criteria();
return criteria;
}
/**
* 清除条件
*/
public void clear() {
oredCriteria.clear();
}
static String getFieldName(String field)
{
if (field == null ) {
throw new RuntimeException( field + " cannot be null");
}
return field.toUpperCase();
//
//
// Pattern pattern = Pattern.compile("[A-Z]{1}");
// Matcher m = pattern.matcher(field);
// StringBuffer sbr = new StringBuffer();
// while(m.find())
// m.appendReplacement(sbr, "_"+m.group());
// m.appendTail(sbr);
// return sbr.toString().toUpperCase();
}
/**
* 查询条件
*/
public static class Criteria {
//没有值
protected List<String> criteriaWithoutValue;
//String值
protected List<Map<String, Object>> criteriaWithSingleValue;
//集合值
protected List<Map<String, Object>> criteriaWithListValue;
//between区间值
protected List<Map<String, Object>> criteriaWithBetweenValue;
//构造函数
protected Criteria() {
super();
criteriaWithoutValue = new ArrayList<String>();
criteriaWithSingleValue = new ArrayList<Map<String, Object>>();
criteriaWithListValue = new ArrayList<Map<String, Object>>();
criteriaWithBetweenValue = new ArrayList<Map<String, Object>>();
}
//是否有效
public boolean isValid() {
return criteriaWithoutValue.size() > 0
|| criteriaWithSingleValue.size() > 0
|| criteriaWithListValue.size() > 0
|| criteriaWithBetweenValue.size() > 0;
}
public List<String> getCriteriaWithoutValue() {
return criteriaWithoutValue;
}
public List<Map<String, Object>> getCriteriaWithSingleValue() {
return criteriaWithSingleValue;
}
public List<Map<String, Object>> getCriteriaWithListValue() {
return criteriaWithListValue;
}
public List<Map<String, Object>> getCriteriaWithBetweenValue() {
return criteriaWithBetweenValue;
}
protected void addCriterion(String condition) {
if (condition == null||"".equals(condition)) {
return;
}
criteriaWithoutValue.add(condition);
}
protected void addCriterion(String condition, Object value, String property) {
if (value == null||"".equals(value)) {
return;
}
Map<String, Object> map = new HashMap<String, Object>();
map.put("condition", condition);
map.put("value", value);
criteriaWithSingleValue.add(map);
}
protected void addCriterion(String condition, List<? extends Object> values, String property) {
if (values == null || values.size() == 0) {
return;
}
Map<String, Object> map = new HashMap<String, Object>();
map.put("condition", condition);
map.put("values", values);
criteriaWithListValue.add(map);
}
protected void addCriterion(String condition, Object value1, Object value2, String property) {
if (value1 == null || value2 == null) {
return;
}
List<Object> list = new ArrayList<Object>();
list.add(value1);
list.add(value2);
Map<String, Object> map = new HashMap<String, Object>();
map.put("condition", condition);
map.put("values", list);
criteriaWithBetweenValue.add(map);
}
public Criteria andIsNull(String field) {
addCriterion(getFieldName(field)+" is null");
return this;
}
public Criteria andIsNotNull(String field) {
addCriterion(getFieldName(field)+" is not null");
return this;
}
/**
* 字符相等
* @param field
* @param value
* @return
*/
public Criteria andEqualTo(String field,String value) {
addCriterion(getFieldName(field)+" =", quoteStr(value), field);
return this;
}
/**
* 字符不相等
* @param field
* @param value
* @return
*/
public Criteria andNotEqualTo(String field,String value) {
addCriterion(getFieldName(field)+" <>", quoteStr(value), field);
return this;
}
/**
* 字符大于
* @param field
* @param value
* @return
*/
public Criteria andGreaterThan(String field,String value) {
addCriterion(getFieldName(field)+" >", quoteStr(value), field);
return this;
}
/**
* 字符大于等于
* @param field
* @param value
* @return Java免费学习 Java自学网 http://www.javalearns.com
*/
public Criteria andGreaterThanOrEqualTo(String field,String value) {
addCriterion(getFieldName(field)+" >=", quoteStr(value), field);
return this;
}
/**
* 字符小于
* @param field
* @param value
* @return
*/
public Criteria andLessThan(String field,String value) {
addCriterion(getFieldName(field)+" <", quoteStr(value), field);
return this;
}
/**
* 字符小于等于
* @param field
* @param value
* @return
*/
public Criteria andLessThanOrEqualTo(String field,String value) {
addCriterion(getFieldName(field)+" <=", quoteStr(value), field);
return this;
}
/**
* 字符相似
* @param field
* @param value
* @return Java免费学习 Java自学网 http://www.javalearns.com
*/
public Criteria andLike(String field,String value) {
addCriterion(getFieldName(field)+" like", quoteStr(value), field);
return this;
}
/**
* 字符不相似
* @param field
* @param value
* @return
*/
public Criteria andNotLike(String field,String value) {
addCriterion(getFieldName(field)+" not like", quoteStr(value), field);
return this;
}
/**
* 字符包含在某个范围内IN
* @param field
* @param value
* @return Java免费学习 Java自学网 http://www.javalearns.com
*/
@SuppressWarnings("unchecked")
public Criteria andIn(String field,List<String> values) {
List vs = new ArrayList();
for (String string : values)
{
vs.add(quoteStr(string));
}
addCriterion(getFieldName(field)+" in", vs, field);
return this;
}
@SuppressWarnings("unchecked")
public Criteria andNotIn(String field,List<String> values) {
List vs = new ArrayList();
for (String string : values)
{
vs.add(quoteStr(string));
}
addCriterion(getFieldName(field)+" not in", vs, field);
return this;
}
public Criteria andBetween(String field,String value1, String value2) {
addCriterion(getFieldName(field)+" between", quoteStr(value1), quoteStr(value2), field);
return this;
}
public Criteria andNotBetween(String field,String value1, String value2) {
addCriterion(getFieldName(field)+" not between", quoteStr(value1), quoteStr(value2), field);
return this;
}
private String quoteStr(String str)
{
if(str==null)
return null;
return "'"+str+"'";
}
}
@SuppressWarnings("unchecked")
public static void main(String[] args)
{
BaseSelector select = new BaseSelector();
//select.setCommand("select * from stat_user ");
select.setCommand("select ");
select.setTableField("uid,uname,pwd");
select.setCountClause("uid,uname,pwd");
select.createCriteria().andEqualTo("org_code", "YZ1201")
.andGreaterThanOrEqualTo("day_code", "2009-01-01")
.andLessThanOrEqualTo("day_code", "2009-03-31");
select.setGroupByClause("uid,uname,pwd");
//select.setOrderByClauseAsc("uid");
System.out.println(select.toSql());
}
}
文章转载自 http://www.javalearns.com/Html/?1644.html
更多Java知识学习请访问 Java免费学习网 http://www.javalearns.com
Java中SQL动态封装工具类--Java自学网相关推荐
- java中常用的日期工具类
java中常用的日期工具类 日期相关的类: package net.yto.ofclacct.core.util;import java.text.ParseException; import jav ...
- java中定义一个CloneUtil 工具类
其实所有的java对象都可以具备克隆能力,只是因为在基础类Object中被设定成了一个保留方法(protected),要想真正拥有克隆的能力, 就需要实现Cloneable接口,重写clone方法.通 ...
- JWT|概述|JWT结构|JWT在java中的使用|JWT工具类的封装|JWT在springboot中的使用|JWT与拦截器的配合
JWT ! 前记: 官网:https://jwt.io/ jwt有人说是用计算力换空间(相对于session) 小程序后台要求全部用springboot实现..登录状态的管理:本来想用自己随便生成UU ...
- JAVA中实用的一个工具类--Hutool
什么是Hutool Hutool是一个Java工具包,也就是一个工具箱,一个utils集合,它帮助我们简化每一行代码,减少每一个方法,让Java语言也可以简单粗暴.Hutool最初是作者项目中&quo ...
- java中文件操作的工具类
代码: package com.lky.pojo;import java.io.BufferedReader; import java.io.BufferedWriter; import java.i ...
- Java中操作字符串的工具类-判空、截取、格式化、转换驼峰、转集合和list、是否包含
场景 某些常用的对字符串进行处理的方法抽离出来成工具类,方便在多处应用. 常用的操作为: 判断是否为空 截取字符串 格式化文本 字符串转set 字符串转list 下划线转驼峰命名 是否包含字符串 注: ...
- java中时间常用处理工具类-DateUtils
仅供参考,收录了一些常用的java中关于时间的处理方法,希望能帮到你! import org.apache.commons.lang3.time.DateFormatUtils;import java ...
- java中常用到的工具类使用
Tool 不定期更新,建议收藏,收录日常所用 1,判断对象是否为空的常用工具类 2,对象和数组的复制 3,关于拼接字符串去掉最后一个符号的三种方式 4,判断对象值属性不为null并且不为空字符串 5, ...
- java des 加密工具的使用,Java中DES加密解密工具类的实现实例
这篇文章主要介绍了Java实现的DES加密解密工具类,结合具体实例形式分析了Java实现的DES加密解密工具类定义与使用方法,需要的朋友可以参考下 本文实例讲述了Java实现的DES加密解密工具类.分 ...
最新文章
- 聊聊分布式定时任务中间件架构及其实现--转
- 1.7 Java try catch finally语句
- GridMask:SOTA 数据增广方法,显著改进分类、检测、分割效果
- Spring5+CXF整合开发REST之一次坑旅
- 简单易扩展的爬虫架构
- repo 的几个使用理解
- Highcharts数据可视化工具功能效果图详解
- HTML表单元素、表单控件
- sonar8.9.1导出扫描结果pdf 实操
- MaxScript与外部程序通讯
- 怎样快速将pdf在线转换成word免费版
- 2022年8月止,国外最佳游戏榜出炉
- DAOS整体设计分析 (二)
- html层叠云标签代码,可以加载个人博客中,非常炫的特效
- 贝格尔编排法之C++版
- 【vue+Element】 el-table根据换行符(回车)换行
- 哪些云主机值得推荐?
- 传说中的程序员最牛表白方式!
- 二维码生成器-客户端
- 图纸上标注的是实际尺寸吗_施工图纸上尺寸标注的标准是什么?