`

使用注解做添加删除修改

阅读更多
注解类:
package com.sql.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface TableNameAnnotation {
	public String table();
}
package com.sql.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface ColumnNameAnnotation {
	public String column();
}

注解处理器:
public class SQLProcessor {
	private static Map methodMap = new HashMap();
	
	public static String getAnnotationName(Object obj,Class annotationClazz, String name) throws Exception {
		String value = null;
		Annotation annotation = null;
		Class clazz = obj.getClass();
		
		if(clazz.isAnnotationPresent(annotationClazz)) {
			annotation = clazz.getAnnotation(annotationClazz);
		} else {
			throw new Exception("没有需要处理的注解");
		}
		
		Method method = annotation.getClass().getMethod(name, null);
		value = (String) method.invoke(annotation, null);
		return value;
	}
	
	public static int createInsertSQL(Connection conn, Object obj) throws Exception {
		String str1 = "insert into ";
		String tableName = "";
		String str2 = "(";
		StringBuffer columnNmaes = new StringBuffer();
		String str3 = ") values (";
		StringBuffer params = new StringBuffer();
		String str5 = ")";
		Map map = new HashMap();
	
		tableName = getAnnotationName(obj, TableNameAnnotation.class, "table");
		
		Field[] fields = obj.getClass().getDeclaredFields();
		int index = 1;
		for (Field field : fields) {
			ColumnNameAnnotation annotation = field.getAnnotation(ColumnNameAnnotation.class);
			if(annotation == null) {
				continue;
			} else {
				columnNmaes.append(annotation.column()).append(",");
				params.append("?").append(",");
				String typeName = field.getType().toString();
				int tempIndex = typeName.lastIndexOf(".");
				String type = null;
				if(tempIndex > 0) {
					type = typeName.substring(tempIndex+1);
				} else {
					type = typeName;
				}
				field.setAccessible(true);
				map.put(type.toLowerCase()+"," + index, field.get(obj));
				index++;
			}
		}
		
		int deleteIndex = columnNmaes.lastIndexOf(",");
		int deleteIndex2 = params.lastIndexOf(",");
		String columnName = columnNmaes.toString().substring(0, deleteIndex);
		String param = params.toString().substring(0, deleteIndex2);
		
		StringBuffer sql = new StringBuffer();
		sql.append(str1).append(tableName).append(str2).append(columnName).append(str3).append(param).append(str5);
		PreparedStatement pstat = conn.prepareStatement(sql.toString());
		
		
		setSqlParameter(pstat, map);
		
		return pstat.executeUpdate();
	}
	
	public static void setSqlParameter(PreparedStatement pstat, Map map) throws SQLException {
		Set keySet = map.keySet();
		Iterator<String> iterater = keySet.iterator();
		for(;iterater.hasNext();) {
			String key = iterater.next();
			String[] keyAndIndex = key.split(",");
			int type = (Integer) methodMap.get(keyAndIndex[0]);
			int parameterIndex = Integer.valueOf(keyAndIndex[1]);
			switch (type) {
			case 1:
				pstat.setInt(parameterIndex, ((Integer)map.get(key)));
				break;
			case 2:
				pstat.setFloat(parameterIndex, Float.valueOf((String)map.get(key)));
				break;
			case 3:
				pstat.setDouble(parameterIndex, (Float)map.get(key));
				break;
			case 4:
				pstat.setByte(parameterIndex, (Byte)map.get(key));
				break;
			case 5:
				pstat.setLong(parameterIndex, (Long)map.get(key));
				break;
			case 6:
				pstat.setShort(parameterIndex, (Short)map.get(key));
				break;
			case 7:
				pstat.setTime(parameterIndex, (Time)map.get(key));
				break;
			case 8:
				pstat.setTimestamp(parameterIndex, (Timestamp)map.get(key));
				break;
			case 9:
				pstat.setString(parameterIndex, (String)map.get(key));
				break;
			case 10:
				pstat.setDate(parameterIndex, (Date)map.get(key));
				break;
			case 11:
				pstat.setBoolean(parameterIndex, (Boolean)map.get(key));
				break;
			default:
				break;
			}
		}
	}
	
	static {
		methodMap.put("int", 1);
		methodMap.put("float", 2);
		methodMap.put("double", 3);
		methodMap.put("byte", 4);
		methodMap.put("long", 5);
		methodMap.put("short", 6);
		methodMap.put("time", 7);
		methodMap.put("timestamp", 8);
		methodMap.put("string", 9);
		methodMap.put("date", 10);
		methodMap.put("boolean", 11);
	}
}

测试实体类:
@TableNameAnnotation(table="departments")
public class Department {
	private int did;
	@ColumnNameAnnotation(column="department_name")
	private String departmentName;
	
	public int getDid() {
		return did;
	}
	
	public void setDid(int did) {
		this.did = did;
	}
	
	public String getDepartmentName() {
		return departmentName;
	}
	
	public void setDepartmentName(String departmentName) {
		this.departmentName = departmentName;
	}
}
测试类:
	public static void main(String[] args) throws SQLException, SecurityException, NoSuchFieldException {
		
		Department depart = new Department();
		depart.setDepartmentName("gggg");
//从ibatis获得Connection
		SqlMapClient client = SQLMapClient.getSqlMaper();
		
		Connection conn = client.getDataSource().getConnection();
		
		SQLProcessor processor = new SQLProcessor();
		try {
			int b = processor.createInsertSQL(conn, depart);
			System.out.println(b);
			System.out.println("-------------------------------------");
			conn.commit();
			conn.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
0
0
分享到:
评论

相关推荐

    基于ssm框架整合的,用户查询、删除、添加、修改功能的网页

    在这个项目中,我们主要关注如何利用SSM框架实现用户管理的相关功能,包括查询、删除、添加和修改。 1. **Spring框架**:Spring作为核心容器,管理着应用中的对象(bean)以及它们之间的依赖关系。通过IoC...

    课程作业基于C++实现的的通讯录系统源码+超详细注释(显示菜单+添加+删除+修改+清空+退出).zip

    课程作业基于C++实现的的通讯录系统源码+超详细注释(显示菜单+添加+删除+修改+清空+退出).zip课程作业基于C++实现的的通讯录系统源码+超详细注释(显示菜单+添加+删除+修改+清空+退出).zip课程作业基于C++实现的的...

    ssh架构——课程的添加删除查看修改

    在这个“ssh架构——课程的添加删除查看修改”的主题中,我们将深入探讨如何利用SSH架构来实现课程管理的相关功能。 首先,Struts2作为MVC(模型-视图-控制器)框架,负责处理HTTP请求,调度业务逻辑,并呈现用户...

    WinRAR压缩文件批量添加和删除文件 批量添加注释设置密码

    总结来说,WinRAR的批量处理功能极大地提升了工作效率,无论是添加、删除文件,还是添加注释和设置密码,都能通过编写批处理脚本一次性完成。这使得文件管理和维护变得更加便捷和安全。在实际应用中,熟练掌握这些...

    c++课程设计 学籍管理系统 能够对学生的学号灯基本信息添加修改删除显示灯功能

    最后,考虑代码的可读性和效率,遵循良好的编程规范,如使用有意义的变量名,保持函数的单一职责,避免冗余代码,以及适当使用注释来解释关键逻辑。 通过以上步骤,我们可以构建一个完整的C++学籍管理系统。这个...

    Java学生管理系统(控制台)实现了学生姓名,学号,居住地,年龄的添加,删除,修改,查询。解决了学号的重复问题,不存在的问题等

    Java学生管理系统(控制台)实现了学生姓名,学号,居住地,年龄的添加,删除,修改,查询。解决了学号的重复问题,不存在的问题等。为个人原创作品。内有详细注释,可供使用。 文件编码格式为gbk,如有乱码,请调整...

    linux下添加,删除,修改,查看用户和用户组.pdf

    Linux 下添加、删除、修改、查看用户和用户组 Linux 操作系统中,用户和用户组是非常重要的概念,正确地管理用户和用户组对于系统的安全和稳定性至关重要。本文将详细介绍 Linux 下添加、删除、修改、查看用户和...

    pdf文件编辑器 添加 修改 删除

    本篇文章将深入探讨如何使用PDF编辑器来添加、修改和删除PDF文件中的内容。 首先,我们要明白PDF编辑器的功能。一款好的PDF编辑器如Adobe Acrobat、Foxit PhantomPDF或Nuance PowerPDF等,允许用户对PDF进行编辑...

    对XML文件进行修改的代码并有注解

    在本节中,我们将学习如何使用 Dom4j 库对 XML 文件进行修改,包括添加、删除和修改节点,属性的添加和删除等操作。 Dom4j 简介 Dom4j 是一个 Java 库,用于解析和操作 XML 文件。它提供了一个灵活的 API,允许...

    Winrar批量助手 可以批量添加文本注释

    这意味着用户无需逐个打开每个压缩文件来添加注释,而是可以一次设置,快速完成整个文件夹的注释添加工作,大大提高了工作效率。 标签“Winrar批量助手 可以批量添加文本注释”再次明确了这个工具的核心功能,用于...

    删除 vsftp FTP用户 以及添加用户全过程

    通过以上步骤,我们可以有效地管理vsftp环境下的FTP用户,包括添加新用户、删除用户、修改用户密码等操作。这对于确保服务器安全、提高数据保护水平至关重要。此外,还可以根据实际需求调整FTP服务的端口,进一步...

    jquery动态增加修改删除表格,上移下移功能

    在IT行业中,jQuery是一个广泛使用的JavaScript库,它极大地简化了DOM操作、事件处理、动画设计以及Ajax交互。在这个“jquery动态增加修改删除表格,上移下移功能”的项目中,开发者利用jQuery实现了对表格的动态操作...

    TreeWidget节点得删除和修改

    本篇文章将深入探讨如何在QT的TreeWidget中进行节点的删除和修改操作,同时提供相应的代码示例和详细注释,以帮助开发者更好地理解和应用。 首先,我们需要了解QTreeWidgetItem类,它是QT中的一个基础类,用于表示...

    用WebService实现对数据库进行操作(添加+删除+修改)

    ### 使用WebService实现对数据库进行操作(添加、删除、修改) #### 概述 在现代软件开发过程中,Web服务(WebService)被广泛应用于不同系统之间的数据交互和服务调用。通过WebService,客户端可以远程调用服务器...

    批量修改MP3标题艺术家唱片集注释等信息

    2. **导入MP3文件**:通过拖放或使用菜单中的“文件”&gt;“添加”将需要修改元数据的MP3文件添加到软件中。 3. **批量编辑**:在主界面中,你可以看到所有导入的MP3文件及其当前的元数据信息。在顶部的输入框中输入新...

    C# Winform 操作Xml(显示,添加,删除,修改)解析任何Xml

    在本文中,我们将深入探讨如何使用C# Winform来操作XML文件,包括显示、添加、删除和修改XML数据。XML(可扩展标记语言)是一种结构化数据存储格式,广泛用于软件开发中。C#提供了丰富的类库,如System.Xml命名空间...

    控制面板添加删除选项不存在IIS组件选项的解决方案

    ### 控制面板添加删除选项不存在IIS组件选项的解决方案 #### 背景与问题概述 在使用Windows操作系统的过程中,可能会遇到控制面板中的“添加/删除程序”(或在较新版本的Windows中称为“程序和功能”)不显示...

    注释删除,欢迎使用

    标题 "注释删除,欢迎使用" 暗示了这个压缩包可能包含了一些工具或脚本,用于自动化删除代码中的注释。Source Insight 是一款强大的源代码查看和编辑器,尤其适合 C/C++、Java 和其他多种编程语言,它提供了高效的...

    PDF文件修改软件文字修改 部分图形删除

    1. **文字修改**:在PDF Editor中,用户可以选择需要修改的文字部分,点击工具栏上的“编辑文本”按钮,就可以对选中的文字进行修改,包括替换、添加、删除等操作。同时,还能调整字体、大小、颜色和对齐方式,以...

    SSM实现用户注册登录以及增加删除修改用户

    在用户管理中,Mybatis可以方便地进行增删查改操作,如添加用户、删除用户、查找用户信息和更新用户信息。 **实现步骤**: 1. **环境配置**:首先需要在IDEA中创建一个Java Web项目,导入Spring、SpringMVC和...

Global site tag (gtag.js) - Google Analytics