您的位置:首页 > 编程语言

自定义search注解,以及相应的default接口,进一步提高bean的内聚性和代码的重用性

2017-05-28 21:01 330 查看
package util.annotation;

import java.lang.annotation.ElementType;

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target;

//自定义search注解,标示参与模糊查询的属性,以及参与的方式是等于还是like

@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.FIELD)

public @interface Searcher {
public static final boolean LIKE = true;
public static final boolean BE = false;

boolean likeorbe();

}

package util.annotation;

import java.lang.reflect.Field;

import java.sql.ResultSet;

import java.util.ArrayList;

import java.util.List;

import util.BeanSQLBuffer;

import util.SQLUtil;

public interface BeanSearch {
public static <E extends BeanSQLBuffer> ArrayList<E> search(String message, E e, Integer cansee) {
Class<? extends BeanSQLBuffer> clazz = e.getClass();
Field[] df = clazz.getDeclaredFields();
StringBuffer sql = new StringBuffer("select *from `" + e.getTable() + "`where (");
StringBuffer term = new StringBuffer();
if (message == null || message.equals(""))
message = "%";

/* 构建模糊查询的sql语句 */
List<String> list = new ArrayList<>();
for (Field f : df) {
if (f.isAnnotationPresent(Searcher.class)) {
if (f.getAnnotation(Searcher.class).likeorbe()) {
term.append("or `" + f.getName() + "` like ? ");
list.add("%" + message + "%");
} else {
term.append("or `" + f.getName() + "` = ?");
list.add(message);
}
}
}
if (term.length() > 0)
sql.append(term.substring(2)+"or");

sql.append(" 1=2 )");

if (cansee != null)
sql.append("and `cansee`=" + cansee);
System.out.println(sql);
System.out.println(list);

//再根据sql语句查询和制作对象,就很随意了

ResultSet rs = SQLUtil.query(sql.toString(), list.toArray());
return SQLUtil.getBeans(e, rs);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  注解 模糊查询 接口