利用JAVA反射机制设计通用的DAO
2017-05-04 18:21
183 查看
利用JAVA反射机制设计一个通用的DAO
反射机制
反射机制指的是程序在运行时能够获取自身的信息。在java中,只要给定类的名字,那么就可以通过反射机制来获得类的所有信息。
反射机制创建类对象
Class c=Class.forName("className");注明:className必须为全名,也就是得包含包名,比如,com.cnblog.Bean;
Object obj=c.newInstance();//创建对象的实例
有了类对象就可以对该类的方法及属性进行操作
通用DAO
可以对所有单表的增删查改,无需新建对应的DAO文件,即新增表操作的的时候,只需要建立表的对应的javabean即可,无需新建表的DAO文件代码结构也比较简单
连接数据库的类 DBConnection.javaDAO的实现类 DAOImpl.java
DAO的代理类 DAOProxy.java
各个表的bean
DBConnection.java 连接数据库的类
package Utils; import java.sql.Connection; import java.sql.DriverManager; public class DBConnection { private Connection conn; private String url; private String user; private String password; private String driver; public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getUser() { return user; } public void setUser(String user) { this.user = user; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getDriver() { return driver; } public void setDriver(String driver) { this.driver = driver; } public Connection connection()throws Exception{ try{ Class.forName(driver); }catch(Exception e){ System.out.println("Load error!"); e.printStackTrace(); } try{ conn=DriverManager.getConnection(url, user, password); }catch(Exception e){ System.out.println("Login error ,please check your login information"); e.printStackTrace(); } return conn; } public void close() throws Exception{ this.conn.close(); } }
DAOImpl.java 增删查改的实现类,所有的bean都作为Object进来,然后通过反射机制拼装数据库操作的sql
query() 传入的bean不需要每个属性都赋值,筛选已赋值的属性拼装sql,筛选的时候利用反射机制中的反射属性Field[] fields =object.getClass().getFields()insert() 拼装sql时无需筛选未赋值的属性,未赋值的直接插入null
update() 传入两个bean,第一个是更新前的记录,第二个是更新后的记录
delete() 传入的bean不需要每个属性都赋值,筛选已赋值的属性拼装sql,筛选的时候利用反射机制中的反射属性Field[] fields =object.getClass().getFields()
package Bean; import java.math.BigDecimal; import java.util.Date; public class Employee { public BigDecimal emp_id; public String emp_name; public String emp_dep; public Date entry_time; public BigDecimal getEmp_id() { return emp_id; } public void setEmp_id(BigDecimal emp_id) { this.emp_id = emp_id; } public String getEmp_name() { return emp_name; } public void setEmp_name(String emp_name) { this.emp_name = emp_name; } public String getEmp_dep() { return emp_dep; } public void setEmp_dep(String emp_dep) { this.emp_dep = emp_dep; } public Date getEntry_time() { return entry_time; } public void setEntry_time(Date entry_time) { this.entry_time = entry_time; } }
View Code
测试代码
public static void main(String[] args){
//设置数据库连接
DBConnection dbSource=new DBConnection();
dbSource.setDriver(driver);
dbSource.setUser(user);
dbSource.setPassword(password);
dbSource.setUrl(url);
DAOProxy testDAO=new DAOProxy(dbSource)
Employee jack=new Employee();
jack.setEmp_id(123);
jack.setEmp_name("jack");
jack.setEmp_dep("dev");
testDAO.doInsert(jack);
Employee jack2=new Employee();
jack2.setEmp_id(123);
jack2.setEmp_name("jack");
jack2.setEmp_dep("test");
testDAO.doUpdate(jack, jack2);
}
相关文章推荐
- 边做边学小型封装--利用主流框架进行Dao层通用化,Spring3.0+Hibernate3.3.2通用Dao层整合(二)
- 边做边学小型封装--利用主流框架进行Dao层通用化,Spring3.0+Hibernate3.3.2通用Dao层整合(五)
- 利用Java Swing设计通用对话框
- Mybatis通用DAO设计封装(mybatis)
- 边做边学小型封装--利用主流框架进行Dao层通用化,Spring3.0+Hibernate3.3.2通用Dao层整合(三)
- 利用反射泛型编写一个通用Dao
- 通用Dao 设计 2
- 利用反射泛型编写通用的Dao
- notepad Mybatis通用DAO设计封装
- 利用java反射机制编写通用的toString 方法
- 利用工厂设计模式实现业务层和dao层的解耦
- 利用java反射机制实现通用Excel导出
- 利用java的反射机制实现通用dao
- Mybatis通用DAO设计封装(mybatis)
- 利用java反射机制,子类从父类拷贝属性--解决信息修改类设计的模式
- Mybatis通用DAO设计封装(mybatis)
- 边做边学小型封装--利用主流框架进行Dao层通用化,Spring3.0+Hibernate3.3.2通用Dao层整合(四)
- 边做边学小型封装--利用主流框架进行Dao层通用化,Spring3.0+Hibernate3.3.2通用Dao层整合(一)
- JPA通用Dao类设计
- DAO组件通用设计方法