`

用反射实现通用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

    java的基于泛型+反射的通用DAO例子,原创,没事写着玩的,请多指教哈。。。

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

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

    java反射实现数据库操作Dao

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

    自定义Dao,反射实现

    NULL 博文链接:https://brooke.iteye.com/blog/996621

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

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

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

    自己写的泛型通用DAO,可以很简化DAO层的代码,但是目前只能支持单表的增,删,查,改。可以充分的理解jdk5.0的泛型和反射机制。希望大家指正不足之处!

    泛型dao 泛型dao 泛型dao

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

    通用DAO

    每次写sql语句的时候都非常恼火,这种体力活还真不是人干的,没一点技术含量,自己终于研究了半天的java反射机制,利用它写了这个通用的dao,终于省去了好多的功夫.

    SuperDAO:使用Java Reflection实现通用DAO

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

    xml与反射.txt

    2 用反射机制能干什么事 刚开始在使用jdbc时侯,在编写访问数据库时写到想吐,有八个表,每个表都有增删改查中操作,那时候还不知道有反射 机制这个概念,所以就对不同的表创建不同的dao类,这样不仅开发速率慢,而且...

    虚拟数据层 Struts2、Hibernate、Spring整合的泛型DAO Version 2010.9.27

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

    论文研究-可重用Java数据库操作组件的设计和实现.pdf

    基于Data Access Object(DAO)设计模式,利用抽象、接口、类反射技术设计和实现了可重用Java数据库操作组件。它封装了注册和载入JDBC驱动程序、建立数据库连接、运行Structured Query Language(SQL)语句及处理查询...

    连接数据库,和一个完成基本数据库操作的通用类

    文件解压后当成文件夹导入到src里面就行了 database.properties文件用来设置数据库连接的参数 主要的操作类是BaseDAO 包含了基本数据库操作(增,删,改,查)方法有注释。...DAO包里面的其他几个类都没什么用。

    day_45_bookstore.rar

     通用翻页、使用 AOP 编程思想实现事务操作、面向接口编程、高可重用性DAO、反射、ORM 思想、使用 jQuery 实现 Ajax等。 学习本案例后,将初步具备 JavaEE 企业级开发技能,并为学习后面的框架和项目扫除障碍。

    SSH项目1

    否则只能查看 11) Dao 操作优化 BaseDao.java 所有dao的通用方法,dao都必须继承此类 (反射泛型)实现步骤代码:1) 设计数据库:

    尚硅谷jdbc源码整理

    除了常规的 JDBC 技术外,本Java视频教程更涵盖 &lt;利用反射及 JDBC 元数据编写通用的查询方法&gt;、&lt;使用 DBUtils 工具类&gt;、&lt;DAO设计模式&gt;、&lt;编写通用的 DAO 接口实现类&gt; 等企业级开发内容。  源码级讲授 DBUtils 工具...

    尚硅谷_佟刚_JDBC.pptx

    除了常规的 JDBC 技术外,更涵盖 &lt;利用反射及 JDBC 元数据编写通用的查询方法&gt;、&lt;使用 DBUtils 工具类&gt;、&lt;DAO设计模式&gt;、&lt;编写通用的 DAO 接口实现类&gt; 等企业级开发内容。源码级讲授 DBUtils 工具类的实现思想,...

    MJDU v4.0 及使用教程(注解+反射+XML)

    组件出版于 2012 年末横空出世,由于不会炒作,至今无人问津。 DAO层万能组件,将CRUD、登陆,修改密码等功能完美封装。只需服务层调用即可!

    Spring.3.x企业应用开发实战(完整版).part2

    11.1.2 在DAO中使用JDBCTemplate 11.2 基本的数据操作 11.2.1 更改数据 11.2.2 返回数据库的表自增主键值 11.2.3 批量更改数据 11.2.4 查询数据 11.2.5 查询单值数据 11.2.6 调用存储过程 11.3 BLOB/CLOB类型数据的...

    Spring3.x企业应用开发实战(完整版) part1

    11.1.2 在DAO中使用JDBCTemplate 11.2 基本的数据操作 11.2.1 更改数据 11.2.2 返回数据库的表自增主键值 11.2.3 批量更改数据 11.2.4 查询数据 11.2.5 查询单值数据 11.2.6 调用存储过程 11.3 BLOB/CLOB类型数据的...

Global site tag (gtag.js) - Google Analytics