import java.lang.annotation.*;
/**
* Created by wangt on 2018/6/17.
*/
@Inherited
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Table {
String value() default "";
}
import java.lang.annotation.*;
/**
* Created by wangt on 2018/6/17.
*/
@Inherited
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Column {
String value() default "";
}
/**
* Created by wangt on 2018/6/17.
*/
@Table("sutdent")
public class StudentDto {
@Column("id")
private String id;
@Column("username")
private String name;
public StudentDto(String id, String name) {
super();
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
import java.lang.reflect.Field;
import java.lang.reflect.Method;
/**
* Created by wangt on 2018/6/17.
*/
public class Test {
public static void main(String[] args){
StudentDto studentDto=new StudentDto("1","wtz");
StudentDto studentDto2=new StudentDto("2","www");
String sql = assembleSqlFromObj(studentDto);
String sql1 = assembleSqlFromObj(studentDto2);
System.out.println(sql);
System.out.println(sql1);
}
private static String assembleSqlFromObj(Object object) {
Table table = object.getClass().getAnnotation(Table.class);
StringBuffer sbSql = new StringBuffer();
String tableName = table.value();
sbSql.append("select * from" + tableName + "where 1=1");
Field[] fileds = object.getClass().getDeclaredFields();
for (Field f : fileds) {
String fieldName = f.getName();
String methodName = "get" + fieldName.substring(0, 1).toUpperCase()
+ fieldName.substring(1);
try {
Column column = f.getAnnotation(Column.class);
if (column != null) {
Method method = object.getClass().getMethod(methodName);
String value = (String) method.invoke(object);
if (value != null && !value.equals("")) {
if (!isNum(column.value()) && !isNum(value)) {
// 判断参数是不是 in 类型参数 1,2,3
if (value.contains(",")) {
sbSql.append("and" + column.value() + "in (" + value + ")");
} else {
sbSql.append("and" + column.value() + "like'%"+ value +"%' ");
}
} else {
sbSql.append("and" + column.value() + "=" + value + " ");
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
return sbSql.toString();
}
public static boolean isNum(String target) {
boolean isNum = false;
if (target.toLowerCase().contains("id")) {
isNum = true;
}
if (target.matches("\\d+")) {
isNum = true;
}
return isNum;
}
}
来源: https://www.cnblogs.com/wtzbk/p/9192265.html