您的位置:首页 > 编程语言 > Java开发

利用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.java

DAO的实现类 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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: