`

反射机制在JDBC连接中的使用

 
阅读更多

1、数据库当中的表设计



 

2、对应数据表的实体Bean (id为主键)

 

 

public class EnginConfigVO {
	int id = 0;
	int THREADS_COUNT;

	/**
	 * @return the id
	 */
	public int primaryGetId() {
		return id;
	}
	/**
	 * @param id the id to set
	 */
	public void primarySetId(int id) {
		this.id = id;
	}
	/**
	 * @return the tHREADS_COUNT
	 */
	public int getTHREADS_COUNT() {
		return THREADS_COUNT;
	}

	/**
	 * @param tHREADS_COUNT the tHREADS_COUNT to set
	 */
	public void setTHREADS_COUNT(int tHREADS_COUNT) {
		THREADS_COUNT = tHREADS_COUNT;
	}
}

由于没有像hibernate那样的注解机制,所以只能在主键的setter和getter方法上动动手脚primaryGetId() ,primarySetId(int id)

 

而实体bean的类名在与数据表的匹配上最后多了“vo” 两个字母,所以在下面方法中将这两个字母剪裁掉。

 

反射方法: 

T o 对应的就是实体Bean,这样的方法当然是写在DAO层中,供上层的service调用,传入需要修改的实体Bean

 

public <T> void updatePropertiesValues(T o) {
		StringBuilder sd = new StringBuilder("update ");
		sd.append(o.getClass().getSimpleName().toLowerCase().substring(0, o.getClass().getSimpleName().length()-2)).append(" ");
		sd.append("set ");
		StringBuilder id = new StringBuilder("where ");
		try {
			for(Method m : o.getClass().getDeclaredMethods()) {
				String name = m.getName();
				if (name.startsWith("get")) {
					sd.append(name.substring(3).toLowerCase()).append("=");
					if(m.invoke(o) instanceof String) {
						sd.append("'").append(m.invoke(o)).append("', ");
					}else {
						sd.append(m.invoke(o)).append(", ");
					}
				}
				if(name.startsWith("primaryGet")) {
					id.append(name.substring(10).toLowerCase()).append("=");
					if(m.invoke(o) instanceof String) {
						id.append("'").append(m.invoke(o)).append("';");
					}else {
						id.append(m.invoke(o)).append(";");
					}
				}
			}
			sd.delete(sd.length()-2, sd.length());
			sd.append(" ");
			sd.append(id);
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			e.printStackTrace();
		}
		
		executeTrans(sd.toString());
		
	}

 这样以后便可以拼凑出完整的sql语句,为我们解决了功能相似代码的冗余。。

 

另外在查找时,我们还可以利用发射机制,将数据库返回的resultset 对象包装成List<T>

public static <T> List<T> getObjectsList(ResultSet rs, Class<T> k)
			throws SQLException {
		List<T> bl = new ArrayList<T>();
		if (rs != null) {
			while (rs.next()) {
//				System.out.println("result is not null");
				T o = null;
				try {
					o = k.newInstance();
					for (Method m : k.getDeclaredMethods()) {
						String name = m.getName();
						if (name.startsWith("set")) {
//							System.out.println(rs.getObject(name.substring(3)).getClass().getName());
							m.invoke(o, rs.getObject(name.substring(3)));
						}
					}
					bl.add(o);
				} catch (InstantiationException e) {
					e.printStackTrace();
				} catch (IllegalAccessException e) {
					e.printStackTrace();
				} catch (IllegalArgumentException e) {
					e.printStackTrace();
				} catch (InvocationTargetException e) {
					e.printStackTrace();
				}
			}
			return bl;
		}
		return null;
	}

这样,我们就可以从底层直接获得包装好的List<T>集合。。不足之处,欢迎大家讨论。。 

 

  • 大小: 26.1 KB
分享到:
评论

相关推荐

    JAVA反射机制和JDBC和各种数据库的连接

    总结来说,Java反射机制提供了运行时对类的动态访问和操作能力,而JDBC则是Java与数据库交互的桥梁,两者结合,可以在运行时动态地连接不同的数据库并进行数据操作,大大提高了代码的通用性和灵活性。

    java注解、java反射机制 jdbc 封装

    通过学习这个案例,开发者可以深入理解如何在实际项目中有效利用Java的注解和反射机制,提升代码质量和可维护性。 总之,这个案例结合了Java的三大利器——注解、反射和JDBC,旨在创建一个高效、灵活且易于扩展的...

    [反射机制]建立数据库连接

    在本案例中,标题提到的“[反射机制]建立数据库连接”是一个关于如何利用反射来动态地创建和管理数据库连接的知识点。通过反射,开发者可以更加灵活地处理数据库连接,特别是在需要动态加载不同数据库驱动或处理未知...

    通过类反射机制实现底层数据库连接

    在数据库连接中,反射机制被广泛应用,特别是在ORM(Object-Relational Mapping)框架如Hibernate中,它帮助我们实现了对底层数据库的操作。 Hibernate是一个流行的Java ORM框架,它的核心功能是将Java对象映射到...

    jdbc连接数据库类

    ### JDBC连接数据库类知识点解析 #### 一、JDBC简介 ...通过上述分析,我们可以了解到如何在 Java 中使用 JDBC 连接数据库的基本原理及实践方法。这对于从事 Java 开发工作的程序员来说是非常重要的基础知识。

    Oracle JDBC连接字符串

    通过反射机制调用`Class.forName()`方法加载驱动类,再通过`newInstance()`创建一个实例。注意,这种方式在较新的版本中已被弃用,推荐使用`DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());`...

    使用java的反射机制来模拟hibernater的jdbc操作

    在本案例中,我们将探讨如何利用反射机制来模拟Hibernate的JDBC操作,实现数据库的增删改查(CRUD)功能,以及简单的分页封装。 首先,让我们了解什么是Hibernate。Hibernate是一个强大的对象关系映射(ORM)框架,...

    JDBC连接操作Oracle及Mysql详解

    2. **反射**: 反射机制允许我们在运行时动态地获取类的信息并操作类的对象。在JDBC中,反射常用于创建数据库连接对象,如`Class.forName("oracle.jdbc.driver.OracleDriver")`来加载Oracle驱动。 3. **读取属性文件...

    JDBC(连接池)连接三种数据库

    此外,我们还将涉及Java Naming and Directory Interface (JNDI)的简单应用以及在配置中使用XML文件。 首先,JDBC是Java语言访问数据库的标准API,它提供了一组接口和类,使得Java开发者能够编写与数据库无关的代码...

    JAVA反射,降低JDBC使用难度

    在标题“JAVA反射,降低JDBC使用难度”中,我们可以理解到,通过反射机制,可以简化Java数据库连接(JDBC)的操作,使其更灵活且易于维护。反射提供了一种动态访问和修改类、接口、字段和方法的能力,即使这些元素在...

    jdbc连接数据库(jndi连接池)

    在描述中提到的"使用反射,简单工厂模式实现jdbc数据库操作",意味着开发者利用反射机制动态地创建和调用JDBC对象,而简单工厂模式则用于根据需求创建对应的数据库连接类,提高了代码的灵活性和封装性。 2. JNDI:...

    JAVA反射机制原理剖析配经典例子,以及模拟DBUTIL发射实现的JDBC操作包自己写的一个DEMO.★

    总之,Java反射机制为程序员提供了运行时的类信息访问和动态操作能力,使得代码能够在运行时根据条件改变行为,而DBUTIL则是反射机制的一个典型应用场景,它简化了JDBC的使用,降低了数据库操作的复杂性。...

    jdbc连接池封装及ORM框架jdbc.rar

    在这个“jdbc连接池封装及ORM框架jdbc.rar”文件中,我们可以探讨几个核心概念和技术,包括设计模式的应用、注解的使用以及反射机制。 首先,**设计模式**在软件开发中起着至关重要的作用。例如,工厂模式可能被...

    jdbc面试题

    在实际开发中,我们可以使用 JDBC 来连接数据库,执行 SQL 查询,存储过程,并处理返回的结果。 3. JDBC 驱动类型 有四类 JDBC 驱动: * A JDBC-ODBC Bridge plus ODBC Driver(类型 1):使用 ODBC 驱动连接...

    JDBC连接数据库的步骤

    - **JDBC-ODBC桥**:这是最早的JDBC驱动类型,通过Java反射机制的`Class.forName()`方法加载,例如: ```java Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); ``` - **Oracle驱动程序**:Oracle提供了专用的...

    通过反射机制写的通用的方法

    在Java编程语言中,反射机制是一项强大的工具,它允许程序在运行时检查和操作类、接口、字段和方法的信息。这个“通过反射机制写的通用的方法”是为了解决数据库查询和对象映射的问题,实现更加灵活和动态的数据访问...

    运用反射做的一个经典JDBC模板

    然而,直接使用JDBC进行数据库操作通常涉及大量重复性代码,这在大型项目中会显得繁琐且易出错。为了解决这一问题,开发人员通常会采用模板方法或框架,如Hibernate,来简化这个过程。然而,有时候由于项目需求或...

    java反射机制的实现与使用

    描述中提到的"jdbc.ppt"可能是指使用反射机制来动态加载数据库驱动并执行SQL语句的例子。在Java JDBC中,通常我们会先加载数据库驱动的Class,然后通过反射调用`DriverManager.getConnection()`方法建立数据库连接。...

    反射机制与抽象工厂结合多数据库模型源码.zip

    在多数据库模型中,反射机制可以用来动态加载数据库驱动,根据不同的数据库类型创建相应的连接。例如,通过Class.forName()方法加载JDBC驱动,然后利用反射调用Connection的newInstance()方法创建数据库连接。 接着...

    java中的常用反射机制详细分析案例

    Java中的反射机制是Java语言一个强大的特性,它允许在运行时检查类的信息并动态地创建对象和调用方法。在实际开发中,反射机制被广泛应用于框架设计、插件系统、序列化、元数据处理等多个场景。下面我们将深入探讨...

Global site tag (gtag.js) - Google Analytics