`

Java反射实现类似Hibernate的通用增删改查

    博客分类:
  • Java
 
阅读更多

package com.zsw.util.service;

import java.sql.Connection;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;

import java.lang.reflect.*;

import java.sql.*;

public class DBCommonFunction<T> {

private T ts;

public T getTs() {

return ts;

}

public void setTs(T ts) {

this.ts = ts;

}

public DBCommonFunction(T ts) {

this.ts = ts;

}

public void getClasses() {

Object object = ts.getClass();

System.out.println(getTs().getClass().getName());

try {

Class s = Class.forName(getTs().getClass().getName());

object = s.newInstance(); // 利用T类型 创建一个新的实例

System.out.println((T) object);

} catch (Exception e) {

e.printStackTrace();

}

}

// 获得T的参数并赋值

public void getParam() {

try {

Class s = Class.forName(getTs().getClass().getName());

Object o = s.newInstance();

for (Field f : o.getClass().getDeclaredFields()) {

if (f.getType().getSimpleName().equals("String")) {

f.set(o, 2 + "");

} else {

f.set(o, 1);

}

System.out.println(f);

}

System.out.println((T) o);

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 获取表名

*/

private String getTblName() {

return getTs().getClass().getSimpleName() + "s";

}

/**

* 获取表中的字段

*/

@SuppressWarnings("finally")

private String getPram() {

String pram = "";

try {

Class s = Class.forName(getTs().getClass().getName());

Object o = s.newInstance();

Field[] fs = o.getClass().getDeclaredFields();

for (int i = 1; i < fs.length; i++) {

Field f = fs[i];

if (fs.length - 1 == i)

pram += f.getName();

else

pram += f.getName() + ",";

}

} catch (Exception e) {

e.printStackTrace();

} finally {

return pram;

}

}

/**

* 获取传递进的类型的值

*/

private String getValues(T t) {

Field[] fs = t.getClass().getDeclaredFields();

String ret = "";

try {

Class.forName(t.getClass().getName());


for (int i = 1; i < fs.length; i++) {

if (fs.length - 1 == i)

if (fs[i].getType().getSimpleName().equals("String")) {

ret += "'"+fs[i].get(t).toString()+"'";

} else {

ret += fs[i].get(t);

}

else {

if (fs[i].getType().getSimpleName().equals("String")) {

ret += "'"+fs[i].get(t)+"',";


} else {

ret += fs[i].get(t)+",";

}

}

}

} catch (Exception e) {

e.printStackTrace();

} finally {

return ret;

}

}


public List<T> findAll(){

List<T> list = new ArrayList<T>();

Connection conn = PageService.getConn();

PreparedStatement pstmt = null;

ResultSet rs = null;

try {

pstmt = conn.prepareStatement("select * from "+getTblName());

rs = pstmt.executeQuery();

while (rs.next()) {

Class s = Class.forName(getTs().getClass().getName());

Object o = s.newInstance();

for (Field f : o.getClass().getDeclaredFields()) {

f.set(o,rs.getObject(f.getName()));

}
list.add((T)o);

}

} catch (Exception e) {

e.printStackTrace();

} finally {

return list;

}

}


/**

* 通用的添加

*/

public boolean Add(T t) {

String sql = "insert into " + getTblName() + " (" + getPram()

+ ") values (" + getValues(t) + ")";

Connection conn = PageService.getConn();

PreparedStatement pstmt = null;

int count = 0;

try {

pstmt = conn.prepareStatement(sql);

count = pstmt.executeUpdate();

} catch (Exception e) {

e.printStackTrace();

} finally{

try {

pstmt.close();

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}
}


return count > 0?true:false;

}

}

分享到:
评论

相关推荐

    java数据库增删改查操作实例(hibernate原理)

    本示例通过一个通用的DAO(Data Access Object)类,展示了如何在不依赖Hibernate等ORM框架的情况下,进行数据库的增删改查操作。这有助于理解底层的SQL执行过程,同时也提供了更灵活的控制权。 首先,DAO模式是一...

    java数据库增删改查操作实例(hibernate原理)支持泛型集合

    写了一个通用java访问数据库操作的DAO类,非常简单,非常强大,非常方便,非常好用。绝对原版,绝对原创。把hibernate彻底扔掉。(根据C#改编的,原本我是搞C#开发的)支持泛型集合,让程序运行效率更高。

    JDBC 实现通用的增删改查基础类方法

    BaseDAO 是一个通用的增删改查基础类,使用 Java 语言实现。它提供了基本的数据操作方法,如保存、修改、删除和查询等。BaseDAO 通过反射机制来获取类的信息,并使用 JDBC 连接数据库来执行 SQL 语句。 BaseDAO 的...

    Java增删改技术方案.doc

    【Java增删改查技术方案】是针对Java应用程序中对数据库进行基本操作(添加、删除、修改和查询)的一种通用模板设计。这个方案旨在提高开发效率,降低代码维护难度,并确保对数据库操作的灵活性和可扩展性。 1. **...

    基于Java动态代理和反射机制实现ORM

    例如,我们可以定义一个`BaseDAO`接口,包含增删改查等通用方法,然后使用Proxy创建该接口的代理实现。InvocationHandler的invoke方法会处理这些方法调用,生成对应的SQL并执行。 反射则用于在运行时获取类的信息,...

    Java反射机制

    例如,在进行数据库操作时,通过反射可以避免为每个数据表编写一个DAO类,而是可以创建一个通用的DAO类,通过传入不同的参数动态执行数据库的增删改查操作。 综上所述,Java反射机制是一种强大的特性,能够在运行时...

    hibernate4.0

    Session则负责具体的数据库操作,如增删改查;Transaction则管理事务,确保数据的一致性。 在Hibernate 4.0中,还引入了对JPA 2.1的支持,体现在`hibernate-jpa-2.1-api-1.0.0.Final.jar`文件中。JPA(Java ...

    java文集

    Java 6 RowSet 使用完全剖析 结合Spring2.0和ActiveMQ进行异步消息调用 struts+hibernate增删改查(一) AXIS 布署问题 struts+hibernate增删改查(二) MySQL中如何实现Top N及M至N段的记录查询?...

    Java学习路线jid

    学习 Java 数据库编程需要掌握 Java 与数据库的连接方式、SQL 语句的使用、数据库的增删改查操作等。 Web 开发 Java 也是一种非常流行的 Web 开发语言。学习 Java Web 开发需要掌握 Java Servlet、JSP、JavaBean、...

    反射查询SQL框架

    在IT行业中,反射查询SQL框架是一种高级编程技术,它结合了面向对象的编程特性与数据库操作,使得开发者可以通过对象和属性来动态构建SQL语句,从而实现对数据库的增、删、改、查(CRUD)操作。这种技术极大地提高了...

    反射完成多功能dao实例

    对于DAO,我们可以定义一个基类,包含通用的增删改查方法,然后针对每个数据表创建继承自基类的子类。在运行时,根据表名动态加载相应的DAO子类并实例化。 例如,我们有用户表(User)和订单表(Order),可以创建...

    Java JDBC简单入门之枚举(Enum)、泛型、反射、JDBC整合

    Java JDBC(Java Database Connectivity)是Java编程语言与各种数据库交互的一种标准接口,它允许Java开发者在应用程序中执行SQL语句,实现对数据库的增删改查操作。本篇将介绍如何在Java中使用枚举(Enum)、泛型、...

    通用DAO

    在Java中,DAO通常包含一组方法,比如增删改查(CRUD)操作,针对不同的数据库实体进行操作。然而,对于每个新的实体,我们都需要编写相似的DAO接口和实现,这无疑增加了开发的工作量。这就是通用DAO的出现背景,它...

    hibernate学习文档

    8. **编写业务逻辑**:实现增删改查等基本操作。 9. **测试验证**:运行测试用例确保功能正确。 #### 示例代码 下面是一个简单的 Hibernate 映射文件示例: ```xml &lt;!DOCTYPE hibernate-mapping PUBLIC "-//...

    以下是一些常见的JAVA面试题

    这些接口和类提供了丰富的功能,如增删改查、迭代、排序等。 泛型编程允许在定义类、接口和方法时使用类型参数,提高了代码的通用性和类型安全性。通配符如"? extends T"和"? super T"用于限制泛型类型的范围。 ...

    java笔试内容!!内有大多数公司笔试内容

    掌握它们的特点、用途以及操作方法,如增删改查,是非常重要的。 5. **内存管理与垃圾回收**:了解Java内存模型,包括堆内存和栈内存,以及垃圾收集机制。理解对象的生命周期和引用类型(强引用、软引用、弱引用、...

    java面试资料

    13. **数据库**:了解SQL语言,包括查询、增删改查操作,以及事务处理、索引、存储过程等高级特性。熟悉一种或多种关系型数据库(如MySQL、Oracle)。 14. **网络编程**:理解TCP/IP协议,套接字编程,以及HTTP协议...

    Mapper-master.zip

    而“Mapper-master.zip”正是一个专注于Mybatis单表操作的项目,它简化了常见的增删改查(CRUD)操作,使得开发者可以更加便捷地进行数据处理。 一、Mybatis简介 Mybatis是由Apache基金会维护的开源项目,它摒弃了...

    java封转dao层(源码),只需传路径,版本一

    "java封转dao层(源码),只需传路径,版本一" 提到的技术是一种简化DAO层创建的方法,通过提供一个通用的接口或抽象类,使得开发者无需为每个实体类编写单独的DAO实现,而是通过传入实体类的路径即可自动创建对应的...

    SSH框架面试题

    - **持久化操作**: 执行如增删改查等数据库操作。 - **提交事务**: 成功执行数据库操作后,提交事务。 - **关闭Session**: 操作完成后关闭`Session`。 - **关闭SessionFactory**: 应用退出时关闭`SessionFactory`。 ...

Global site tag (gtag.js) - Google Analytics