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

JAVA注解的实际应用--生成sql语句

2017-02-21 22:09 489 查看
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)运行结果

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