`
xiasheng
  • 浏览: 70630 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

    博客分类:
  • DB
阅读更多
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.jar eclipse插件,根据数据库自动生成pojo

    annotation.jar eclipse插件,根据数据库自动生成pojo

    利用annotation完成对象间的属性拷贝

    本文将深入探讨如何利用注解(Annotation)来实现这一功能,以提高代码的可读性和可维护性。我们将从标题“利用annotation完成对象间的属性拷贝”出发,结合描述中提到的博客链接,探讨这一技术。 首先,注解是一种...

    再改struts1.2.*,让struts1再焕发表春,支持Annotation和POJO风格的Action

    在新的改进中,我们可以利用注解将Action类转化为POJO,摆脱对特定基类的依赖。 2. **Annotation支持**:注解在Java开发中已经成为一种常见的元数据声明方式。通过引入注解,我们可以简化配置,比如在Action类或...

    jsf1.2+spring3.0+hibernate3.3例子-单表增删改查

    使用jsf1.2+spring3.0+hibernate3.3实现集成,利用annotation实现自动对象管理注入,用户表的登录增删改查操作,包括验证码ajax集成,消息机制,国际化处理,自定义转换器,自定义验证器等 qq:38732796 欢迎讨论

    Annotation手册

    例如,编译器可以根据Annotation发出警告,或者文档生成器可以利用Annotation自动生成API文档。 2. **Annotation的语法**:在Java中,创建Annotation使用类似于访问修饰符的新语法。每个Annotation都有一个名称和零...

    Annotation技术

    Annotation是Java中的注解,它允许程序员在源代码中插入一些元数据,这些元数据可以被编译器、构建工具或者运行时环境用来生成代码、验证代码、配置系统等。它提供了一种安全、可扩展的方式来关联信息到代码中,而...

    annotation

    Java提供了Annotation Processing Tool(apt),可以在编译阶段对带有特定注解的代码进行处理,如生成额外的源代码或修改现有代码,从而实现自动化代码生成或代码检查。 #### 六、标准Annotation与Meta-Annotation ...

    springboot增删改查

    本知识点将深入探讨如何利用SpringBoot实现数据库的增删改查操作。 一、SpringBoot入门 SpringBoot的核心理念是“约定优于配置”,它内置了Tomcat服务器,自动配置了Spring MVC、Spring Data JPA等模块,使得开发者...

    JDK5.0 Java Annotation 介绍(ppt)

    Java Annotation 是 JDK5.0 引入的一种元数据机制,它允许程序员在代码中嵌入额外的信息,这些信息可以被编译器、构建工具或运行时系统用来执行特定的任务。Annotation 提供了一种安全、灵活的方式来描述代码的属性...

    TsignRecgTrain4170Annotation.rar

    "TsignRecgTrain4170Annotation.rar"数据集是针对手势识别训练的一个资源,尤其是手语识别。它包含了4170个样本,每个样本代表一个特定的手势。数据集中的“Annotation”部分可能指的是每个手势样本的注释信息,例如...

    jakarta.annotation-api-1.3.5-API文档-中文版.zip

    赠送jar包:jakarta.annotation-api-1.3.5.jar; 赠送原API文档:jakarta.annotation-api-1.3.5-javadoc.jar; 赠送源代码:jakarta.annotation-api-1.3.5-sources.jar; 赠送Maven依赖信息文件:jakarta.annotation...

    自定义annotationProcessor

    在Java编程中,注解(Annotation)是一种元数据,它提供了在代码中插入信息的方式,这些信息...在IDEA这样的集成开发环境中,利用`annotationProcessor`变得非常方便,只需简单的配置即可享受到这一功能带来的便利。

    eclipse插件,根据数据库表自动生成DTO(pojo)插件

    在生成的DTO和POJO类中,注解可以用来标记字段,以便于框架如Hibernate或MyBatis进行ORM(对象关系映射)操作。 `JavaBeanTool_2.0`可能是插件的一个版本号,暗示这个工具已经经过了多次迭代和优化。JavaBean是一种...

    javax.annotation

    在Java世界里,注解是一种强大的工具,允许程序员在代码中添加元数据,这些元数据可以被编译器、构建工具或者运行时环境用来进行各种验证和处理。 【描述】"java.lang.ClassNotFoundException: javax.annotation....

    前端开源库-get-annotation

    使用"get-annotation"库,开发者可以方便地进行以下操作: 1. **提取文档元数据**:通过解析JSDoc注释,获取函数的参数、返回值、类的属性等信息,为自动生成API文档提供数据。 2. **代码分析**:注释包含了代码的...

    用连接池配置写的BaseDao及增删改查询

    例如,对于`CommonDao_V1.01`这样的子文件,可能包含的是某个具体数据表的DAO实现,它继承自`BaseDao`,并提供针对该表的定制化操作。 总结来说,连接池配置是提升系统性能的重要手段,而`BaseDao`类则是数据库操作...

    javax.annotation-api-1.2-API文档-中文版.zip

    赠送jar包:javax.annotation-api-1.2.jar; 赠送原API文档:javax.annotation-api-1.2-javadoc.jar; 赠送源代码:javax.annotation-api-1.2-sources.jar; 赠送Maven依赖信息文件:javax.annotation-api-1.2.pom;...

Global site tag (gtag.js) - Google Analytics