what:
该程序实现了sql查询语句的生成(数据的持久化层)
1)UaerBean(存储的数据)
@Table("user")
public class UserBean {
@Column("name")
private String name;
@Column("age")
private int age;
@Column("email")
private String email;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
2)produce_sql类实现查询,生成sql语句
public class produce_sql {
public static void main(String[] args)
{
UserBean user1 = new UserBean();
user1.setName("tom"); //查询name==tom
UserBean user2 = new UserBean();
user2.setAge(20); //查询age==20
UserBean user3 = new UserBean();
user3.setEmail("tom@126.com"); //查询email=="tom@126.com"
UserBean user4 = new UserBean(); //查询全部
String sql1 = query(user1);
String sql2 = query(user2);
String sql3 = query(user3);
String sql4 = query(user4);
System.out.println(sql1);
System.out.println(sql2);
System.out.println(sql3);
System.out.println(sql4);
}
public static String query(UserBean user)
{
String src = "";
//注解的解析1.使用类加载器加载类
Class c = user.getClass();
//2找到注解
boolean isExist = c.isAnnotationPresent(Table.class);
if(!isExist)
{
return null;
}
//3拿到注解实例
Table table = (Table)c.getAnnotation(Table.class);
String tableName = table.value();
src += "select * from " + tableName + " where 1=1";
Field[] fields = c.getDeclaredFields();
for (Field field : fields) {
boolean isFExist = field.isAnnotationPresent(Column.class);
if(!isFExist)
{
continue;
}
Column column = field.getAnnotation(Column.class);
String columnName = column.value();
String fieldName = field.getName();
String getMethodName = "get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);
Object fieldValue = "";
try {
Method method = c.getMethod(getMethodName); //通过get方法获取字段的值,此处需要使用反射,因为注解在运行时加载
fieldValue = method.invoke(user);
} catch (Exception e) {
e.printStackTrace();
}
if(fieldValue == null || fieldValue instanceof Integer && (Integer)fieldValue == 0)
{
continue;
}
if(fieldValue instanceof String)
{
src += " and " + columnName + "= \'" + fieldValue + "\'";
}
else{
src += " and " + columnName + "=" +fieldValue;
}
}
return src;
}
}
3)运行结果