package com.core.annotation;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
/**
* @author zy
* @version 创建时间:Jul 2, 2010 2:39:20 PM
*/
@Target({TYPE})
@Retention(RUNTIME)
public @interface Table {
public abstract String name() default "";
public abstract String catalog() default "";
public abstract String schema() default "";
}
package com.core.annotation;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
/**
* @author zy
* @version 创建时间:Jul 2, 2010 2:54:28 PM
*/
@Target({FIELD,METHOD})
@Retention(RUNTIME)
public @interface Column {
public abstract String name() default "";
public abstract boolean unique() default false;
public abstract boolean nullable() default true;
public abstract String type() default "string";
public abstract String definition() default "";
public abstract int length() default 32;
}
package com.entity;
import java.io.Serializable;
import com.core.annotation.Column;
import com.core.annotation.Table;
/**
* @author zy
* @version 创建时间:Jul 6, 2010 9:15:18 AM
*/
@Table(name="T_USER")
public class User implements Serializable{
private static final long serialVersionUID = 6602217772155966261L;
String id;
String name;
String sex;
@Column(name="USER_NAME")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Column(name="SEX")
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
package com.core.util;
import java.io.Serializable;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import com.entity.User;
import com.core.annotation.Column;
import com.core.annotation.Table;
/**
* @author zy
* @version 创建时间:Jul 2, 2010 2:00:55 PM
*/
public class AnnotationUtil {
@SuppressWarnings("unchecked")
public static String save(User u){
String temp = null;
StringBuffer sb = new StringBuffer();
String id = String.valueOf(u.getId());
if(id == null || id.trim().equals("")){
StringBuffer key = new StringBuffer();
StringBuffer value = new StringBuffer();
sb.append("insert into ");
Class c = u.getClass();
Object [] obj = null;
if(c != null && c.isAnnotationPresent(Table.class)){
Table table = (Table) c.getAnnotation(Table.class);
try {
temp = table.name();
if(temp.trim().equals("")){
sb.append(c.getName().trim());
}else{
sb.append(temp.trim());
}
} catch (Exception e) {
sb.append(c.getName().trim());
}
}else{
sb.append(c.getName().trim());
}
Method [] method = u.getClass().getDeclaredMethods();
for(Method m : method){
if(m != null && m.isAnnotationPresent(Column.class)){
Column column = m.getAnnotation(Column.class);
temp = column.name();
if(temp.trim().equals("")){
key.append(m.getName().substring(3).trim()).append(",");
}else{
key.append(temp.trim()).append(",");
}
try {
temp = String.valueOf(m.invoke(u, obj));
value.append("'").append(temp.trim()).append("',");
} catch (IllegalArgumentException e) {
e.printStackTrace();
value.append("'',");
} catch (IllegalAccessException e) {
e.printStackTrace();
value.append("'',");
} catch (InvocationTargetException e) {
e.printStackTrace();
value.append("'',");
}
}
}
key.deleteCharAt(key.lastIndexOf(","));
value.deleteCharAt(value.lastIndexOf(","));
sb.append(" (").append(key).append(") values");
sb.append(" (").append(value).append(")");
}else{
sb.append("update ");
Class c = u.getClass();
Object [] obj = null;
if(c != null && c.isAnnotationPresent(Table.class)){
Table table = (Table) c.getAnnotation(Table.class);
try {
temp = table.name();
if(temp.trim().equals("")){
sb.append(c.getName().trim());
}else{
sb.append(temp.trim());
}
} catch (Exception e) {
sb.append(c.getName().trim());
}
}else{
sb.append(c.getName().trim());
}
sb.append(" set ");
Method [] method = u.getClass().getDeclaredMethods();
for(Method m : method){
if(m != null && m.isAnnotationPresent(Column.class)){
Column column = m.getAnnotation(Column.class);
temp = column.name();
if(temp.trim().equals("")){
sb.append(m.getName().substring(3).trim()).append("=");
try {
temp = String.valueOf(m.invoke(u, obj));
sb.append("'").append(temp.trim()).append("',");
} catch (IllegalArgumentException e) {
e.printStackTrace();
sb.append("'',");
} catch (IllegalAccessException e) {
e.printStackTrace();
sb.append("'',");
} catch (InvocationTargetException e) {
e.printStackTrace();
sb.append("'',");
}
}else{
sb.append(temp.trim()).append("=");
try {
temp = String.valueOf(m.invoke(u, obj));
sb.append("'").append(temp.trim()).append("',");
} catch (IllegalArgumentException e) {
e.printStackTrace();
sb.append("'',");
} catch (IllegalAccessException e) {
e.printStackTrace();
sb.append("'',");
} catch (InvocationTargetException e) {
e.printStackTrace();
sb.append("'',");
}
}
}
}
sb.deleteCharAt(sb.lastIndexOf(","));
sb.append(" where id='").append(id.trim()).append("'");
}
return sb.toString();
}
@SuppressWarnings("unchecked")
public static String delete(User u,Serializable id){
String temp = null;
StringBuffer sb = new StringBuffer("delete from ");
Class c = u.getClass();
if(c != null && c.isAnnotationPresent(Table.class)){
Table table = (Table)c.getAnnotation(Table.class);
try {
temp = table.name();
if(temp.trim().equals("")){
sb.append(c.getName().trim());
}else{
sb.append(temp.trim());
}
} catch (Exception e) {
sb.append(c.getName().trim());
}
}else{
sb.append(c.getName().trim());
}
sb.append(" where id='").append(String.valueOf(id)).append("'");
return sb.toString();
}
@SuppressWarnings("unchecked")
public static void main(String[] args) {
User user = new User();
user.setId("234");
user.setName("历史");
user.setSex("男");
System.out.println(save(user));
System.out.println(delete(user,"123"));
}
}
利用Annotation构建针对POJO进行增删改操作
最新推荐文章于 2024-10-11 20:06:06 发布