利用Annotation构建针对POJO进行增删改操作

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"));
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值