java sqlcondition,sqlCondition where条件生成器 主要用于表格筛选

package com.yiyikefu.sqlconditionkit;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import java.util.Set;

/**

*

* Title: SqlCondition.java

* Description: sqlWhere条件生成器

* Company: www.yiyikefu.com

*

* @author xsy 906726786@qq.com

* @date 2015年11月27日 下午10:10:36

* @version 1.0 

*/

public class SqlCondition {

public static final int FUZZY_FULL = 1 <

public static final int FUZZY_LEFT = 1 <

public static final int FUZZY_RIGHT = 1 <

public static final int FUZZY_NO = 1 <

private List values = null;// sql中?(变量)代表的值

public List getValues() {

return values;

}

/**

*

* TODO 查询条件 xsy

*

* @param rec

*            键值对:键是字段名,值是相应的值

* @param sqlMap

*            键值对:键代表字段名,值是相应的语句和查询类型

* @return

*/

public StringBuilder buildSqlWhere(Map rec, Map sqlMap) {

StringBuilder sql_where = new StringBuilder();// 初始化sql语句where部分

if (rec != null) {

Set attrNameSet = rec.keySet();

String[] names = attrNameSet.toArray(new String[attrNameSet.size()]);

List values = new ArrayList();// 初始化,代表的值列表

for (int i = 0; i 

String name = names[i];

Object _value = rec.get(name);// 获取字段名所代表的值

if (null == _value || "" == _value.toString()) {

continue;// 如果为null,退出本次循环。

}

Pair pair = sqlMap.get(name);// 获取key对应的value值

if (pair == null) {// 值不存在,则抛异常

throw new NullPointerException("输入的字段对应的value不存在:" + name);

}

String sql = pair.sql;

if (sql == null) {

throw new NullPointerException("conditions条件中sql语句未传入:" + name);

}

if (i == 0 && sql.toLowerCase().indexOf("where") == -1 && sql.toLowerCase().indexOf("and") != -1) {

sql = sql.toLowerCase().replaceFirst("and", "WHERE");

}

int queryType = pair.queryType;// 模糊类型

if (queryType == FUZZY_NO) {

sql_where.append(" " + sql + "  ");

values.add(_value);

} else {

sql_where.append(" " + sql + "  ");

values.add(setQueryType(_value, queryType));

}

}

this.values = values;

}

return sql_where;

}

/**

*

* TODO 根据查询类型加参数值

*

* xsy

*

* @param queryType

*            查询类型

* @param value

*            参数值

*/

public static String setQueryType(Object value, int queryType) {

if (FUZZY_FULL == queryType) {

return "%" + value + "%";

} else if (FUZZY_LEFT == queryType) {

return "%" + value;

} else if (FUZZY_RIGHT == queryType) {

return value + "%";

} else {

return value.toString();

}

}

public static class Pair {

public String sql = null;

public int queryType = FUZZY_NO;

public Pair(String sql) {

this.sql = sql;

}

public Pair(String sql, int queryType) {

this.sql = sql;

this.queryType = queryType;

}

}

/**

*

* xsy

* Description:SqlCondition测试 

*

* @param args

*/

public static void main(String[] args) {

// 筛选条件 放进null 或者"" 该条件不起作用

Map rec = new HashMap<>();

rec.put("hobby", null);// 该条件不起作用 不管男女

rec.put("grade", "");// 该条件不起作用 不管成绩

rec.put("name", "张三");// 筛选名字叫张三

rec.put("sex", 0);// 同时筛选性别为男的

List values = new ArrayList();

SqlCondition conditions = new SqlCondition();

Map sqlMap = new HashMap();

sqlMap.put("sex", new Pair("AND hosp_id like ?"));// 测试成功

sqlMap.put("hcheck_code", new Pair("AND hcheck_code like ?", SqlCondition.FUZZY_RIGHT));// 模糊筛选

StringBuilder sqlWhere = conditions.buildSqlWhere(rec, sqlMap);

values = conditions.getValues();

System.out.println(sqlWhere);

System.out.println(values);

// values.toArray() 变量值的数组

// 使用的时候记得 sql_select + sql_from+sql_where , values.toArray();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值