java动态模糊查询_后台实现基于注解实现分页动态模糊查询

packagecom.fyun.common.utils.util;importcom.fyun.common.utils.annottaton.SQLGenerateFieId;importjava.lang.reflect.Field;importjava.math.BigDecimal;importjava.util.Collection;importjava.util.Date;/*** Copyright glbpay.com

*

* Created by wsp on 2018/9/5.

* Descripton:*/

public classSQLGenerateUtils {public static String whereSQLGenerate(Object o) throwsIllegalAccessException {if (o == null)return "";

StringBuffer sb= newStringBuffer();for(Field f : o.getClass().getDeclaredFields()) {

SQLGenerateFieId sqlField= f.getAnnotation(SQLGenerateFieId.class);if (null !=sqlField) {

String alias=sqlField.alias();if(StringUtils.isEmpty(alias))

alias= "";elsealias= alias + ".";

f.setAccessible(true);

Object ob=f.get(o);if (ob != null && (checkType(ob) ||isDate(ob))) {

String value= "";if(isDate(ob)) {

value=DateUtil.format((Date) ob, sqlField.dateFormat());

}else if (ob instanceof Collection ||ob.getClass().isArray()) {

value=collectionToString((Collection) ob);

}else{

value=String.valueOf(ob);

}if(StringUtils.isEmpty(value))continue;if (sqlField.column().length == 1) {//单个字段

if (StringUtils.isNotEmpty(sqlField.column()[0])) {

sb.append(" and " + alias + Underline2CamelUtils.camel2Underline(sqlField.column()[0]) + " ");

}else{

sb.append(" and " + alias + Underline2CamelUtils.camel2Underline(f.getName()) + " ");

}

symbolSql(sb, sqlField, value);

}else if (sqlField.column().length > 1) {//多个字段

boolean first = true;

sb.append("and ( ");for(String column : sqlField.column()

) {if (!first) {

sb.append(" or ");

}else{

first= false;

}

sb.append(alias);

sb.append(Underline2CamelUtils.camel2Underline(column)+ " ");

symbolSql(sb, sqlField, value);

}

sb.append(" )");

}

}

}

}returnsb.toString();

}private static voidsymbolSql(StringBuffer sb, SQLGenerateFieId sqlField, String value) {if(SQLGenerateFieId.Like.equalsIgnoreCase(sqlField.Conform())) {

sb.append(sqlField.Conform()+ "'%" + value + "%' ");

}else if(SQLGenerateFieId.In.equalsIgnoreCase(sqlField.Conform())) {

sb.append(sqlField.Conform()+ " (" + value + ") ");

}else{

sb.append(sqlField.Conform()+ " '" + value + "' ");

}

}private staticString collectionToString(Collection obs) {

StringBuffer sb= newStringBuffer();if (obs.size() <= 0)return "";for(Object ob : obs

) {if(checkType(ob)) {

sb.append("'" + String.valueOf(ob) + "',");

}

}

String result=sb.toString();

result= result.substring(0, result.lastIndexOf(","));returnresult;

}private static booleanisDate(Object ob) {return ob instanceofDate;

}/*** 检查符合查询的对象类型 判断符合基础类型

*

*@paramparam

*@return

*/

private static booleancheckType(Object param) {boolean result = false;if (param instanceofInteger) {

result= true;

}else if (param instanceofShort) {

result= true;

}else if (param instanceofString) {

result= true;

}else if (param instanceofDouble) {

result= true;

}else if (param instanceofFloat) {

result= true;

}else if (param instanceofLong) {

result= true;

}else if (param instanceofBoolean) {

result= true;

}else if (param instanceofBigDecimal) {

result= true;

}else if (param instanceof Collection ||param.getClass().isArray()) {

result= true;

}returnresult;

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值