`

用反射实现通用Dao

阅读更多
public class MySession {
	/**
	 * 用反射实现的查找
	 */
	public Object find(Class clazz,Object id){
		try {
			//通过反射获取clazz的类名
			QueryRunner query = new QueryRunner();
			String className = clazz.getName();
			String[] split = className.split("\\.");
			String tableName = split[split.length - 1];
			String sql = "select * from " + tableName + " where id=?";
			//Object c =  query.query(sql, new BeanHandler(clazz), new Object[] { id });
			System.out.println(sql);
			return null;
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}
	/*
	 * 实现删除
	 */
	public  void delete(Class clazz,Object id){
		try {
			QueryRunner runner = new QueryRunner();
			String className = clazz.getName();
			String[] split = className.split("\\.");
			String tableName = split[split.length - 1];
			String sql = "delete from " + tableName + "where id=?";
			//runner.update(sql, new Object[] { id });
		} catch (Exception e) {
			
		}
	}
	/**
	 * 实现增加
	 */
	public void add(Class clazz){
		//首先获得表名
		QueryRunner runner = new QueryRunner();
		String className = clazz.getName();
		String[] split = className.split("\\.");
		String tableName = split[split.length - 1];
		//通过反射获得字段
		Field[] fields = clazz.getDeclaredFields();
		StringBuilder sb = new StringBuilder("insert into  ");
		sb.append(tableName+" (");
		for(Field f:fields){
			sb.append(f.getName()+",");
		}
		sb.deleteCharAt(sb.length()-1);
		sb.append(")");
		
		sb.append(" values(");
		for(int i=0;i<fields.length;i++){
			sb.append("?,");
		}
		sb.deleteCharAt(sb.length()-1);
		sb.append(")");
		String sql = sb.toString();
		System.out.println("--------add---------\n"+sql);
	}
	/*
	 * 修改同类增加
	 */

 

分享到:
评论
2 楼 shamusoft 2011-05-27  
try {
Class clazz = bean.getClass();
String className = clazz.getName();
String[] split = className.split("\\.");
String tableName = split[split.length - 1];
Field[] fields = clazz.getDeclaredFields();
QueryRunner runner = new QueryRunner(JbcUtils.getDataResource());
StringBuilder sql = new StringBuilder("insert into ");
sql.append(tableName + " (");
for (Field f : fields) {
sql.append(f + ",");
}
sql.deleteCharAt(sql.length() - 1);
sql.append(" ) values (");
for (Field f : fields) {
sql.append("?,");
}
sql.deleteCharAt(sql.length() - 1);
sql.append(" ) where id=?");
Object params[]= new Object[fields.length];
for(int i=0;i<fields.length;i++){
String value = BeanUtils.getProperty(bean,fields[i].getName());
params[i]=value;
}
int count = runner.update(sql.toString(),params);
if(count>0)return true;
return false;

} catch (Exception e) {
throw new DaoException();
}
1 楼 shamusoft 2011-05-27  
Object[] params = new Object[fields.length];
for(int i=0; i<fields.length; i++) {
String value = BeanUtils.getProperty(bean, fields[i].getName());
System.out.println(value);
params[i] = value;
}

相关推荐

    java 基于泛型与反射的通用 DAO

    在实现通用DAO时,反射通常用于动态调用数据库操作的方法,比如SQL查询。例如,在`UsersDAO.java`中,可能有以下代码: ```java public class UsersDAO extends BaseDao&lt;Users&gt; { @Override public void save...

    C#特性标签实现通用Dao层

    总结起来,通过C#的特性标签和反射技术,我们可以构建一个灵活且可扩展的通用Dao层,大大减少了重复代码,提高了开发效率。这种方法的关键在于利用元数据(特性)来描述实体类和数据库之间的关系,以及利用反射在...

    反射机制反射Dao 反射机制

    在Java中,使用反射可以实现通用的DAO,无需为每种数据表创建特定的DAO类。通过传入不同的类名,可以动态创建对应数据表的DAO实例,执行CRUD操作。 7. **安全性与性能**: 反射虽然强大,但也有其缺点。由于绕过了...

    自定义Dao,反射实现

    自定义Dao并通过反射实现,虽然比使用ORM框架(如Hibernate、MyBatis)更繁琐,但可以更好地控制SQL语句,避免了不必要的映射配置。这种方法适用于小型项目或对性能有较高要求的场景,同时也为学习Java反射机制提供...

    泛型通用DAO,可以很简化DAO层的代码

    泛型通用DAO是这种模式的一种优化,它利用了Java 5.0引入的泛型和反射机制,大大简化了DAO层的编码工作,提高了代码的可复用性和可维护性。 泛型是Java中的一种类型系统扩展,它允许在编译时声明参数化的类型,从而...

    java反射实现数据库操作Dao

    java反射实现数据库增、删、改、查操作Dao

    通用DAO

    本文将深入探讨Java语言中如何使用反射机制实现通用DAO,并通过提供的"通用DAO源码及示例"来阐述这一概念。 首先,我们需要理解什么是DAO模式。DAO模式是一种软件设计模式,它的主要目标是为应用程序提供一个抽象层...

    Hibernate通用Dao设计。

    本篇文章将深入探讨Hibernate的通用Dao设计,帮助开发者理解如何利用Hibernate提高代码复用性和可维护性。 在传统的Java应用程序中,DAO(Data Access Object)层是用于封装数据库访问逻辑的地方,它隔离了业务逻辑...

    基于泛型的通用Dao接口和hibernate的实现

    基于泛型的通用Dao接口是指使用泛型来实现数据访问对象(DAO)的接口,主要是在使用 Hibernate 或 JPA 时使用。泛型可以使得DAO接口更灵活、更通用。 泛型Dao接口的优点: 1. 耦合性低:泛型Dao接口可以与不同的...

    JAVA反射的实现(使DAO层变得更加简单)

    在DAO层中,我们可以利用反射来实现通用的CRUD(创建、读取、更新、删除)操作,减少代码的编写量。 1. **动态创建对象**:通过`Class.forName()`方法,我们可以根据字符串形式的类名获取对应的Class对象,然后使用...

    Java反射泛型,实现数据库的动态增删改查等功能

    在动态数据库操作中,泛型可以用来创建通用的DAO(数据访问对象)接口和实现,以处理不同类型的实体对象。例如,我们可以定义一个`GenericDAO&lt;T&gt;`接口,其中`T`代表任何数据模型类。这个接口可以包含`insert(T ...

    反射完成多功能dao实例

    我们可以在Action中使用上述反射机制,根据请求参数决定调用哪个DAO,实现多表操作的路由。例如,我们可以通过请求参数`tableName`来判断是进行用户操作还是订单操作,然后调用对应的DAO方法。 总的来说,本实例...

    Java 中利用泛型和反射机制抽象DAO的实例

    Java 中利用泛型和反射机制抽象DAO的实例是指在 Java 中使用泛型和反射机制来抽象出一个通用的DAO(Data Access Object),从而将DAO抽象到另一层次,提高代码的质量和可维护性。 在这个实例中,我们首先定义了一个...

    泛型dao 泛型dao 泛型dao

    泛型dao接口 :GenericDao, ID extends Serializable&gt; 泛型作为DAO的通用接口 CRUD方法 dao接口 : PersonDAO extends GenericDao, Integer&gt; 可以不写代码,方法已经在父类泛型dao里了,这里为了说明:可扩展添加 ...

    Java中的反射实现数据库操作

    对于数据库操作,我们通常会有一个包含CRUD(Create、Read、Update、Delete)方法的通用DAO(Data Access Object)类。通过反射,我们可以动态地调用这些方法,处理任何类型的实体对象。例如,一个通用的`save()`...

    JAVA反射实现数据层框架

    3. **通用DAO**:反射可以实现对数据库操作的通用化,通过传入不同的类和方法名,可以执行CRUD操作,无需为每个表单独写一套DAO。 4. **插件化开发**:如Spring AOP(面向切面编程)利用反射实现动态代理,可以在不...

    利用反射实现的增删改查操作的底层代码

    为了解决这个问题,开发者经常使用 DAO(Data Access Object)模式来封装这些操作,而反射可以进一步简化这一过程。 反射的运用在于,我们可以通过Class对象动态获取类的信息,包括类的字段(属性)和方法。在...

    SuperDAO:使用Java Reflection实现通用DAO

    superDAO利用Java的反射机制实现的万能DAO工具类,包含对应的测试代码,利用万能DAO可以对数据库中任意表进行操作,只需一个DAO类即可完成。具体功能包括:单表查询多表查询模糊查询添加修改删除阅读本代码需要掌握...

    利用java反射、注解及泛型模拟ORM实现

    这篇博文“利用java反射、注解及泛型模拟ORM实现”旨在探讨如何结合这三种技术来实现对象关系映射(ORM),这是一种将数据库表与Java对象之间进行绑定的技术,简化了数据操作。 首先,我们来理解一下这三个概念: ...

    hibenate 对DAO的封装

    本主题主要探讨的是如何使用泛型和反射技术来实现Hibernate对DAO的封装,从而创建一个通用的DAO模板,减少开发者重复编写CRUD(Create、Read、Update、Delete)操作的工作。 首先,我们需要理解DAO(Data Access ...

Global site tag (gtag.js) - Google Analytics