java basedao t_Java中的BaseDAO

package javaee.db;

import java.lang.reflect.Method;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.Statement;

import java.util.ArrayList;

import java.util.List;

/**

* 父类DAO

* @author kidd

*

*/

public class BaseDAO {

private Connection con;//数据库连接

private Statement stmt;//发送数据库执行请求

private ResultSet rs;//数据库返回

private PreparedStatement pstmt;//注册参数发送数据库执行请求

/**

* 获取连接

* @return

*/

public Connection getConnection(){

return ConnectionManager.getConnectionByTomcat();

}

/**

* 查询

* @return 集合

*/

public List query(Class type,String sql,Object...args){

List list=new ArrayList();//返回的集合

this.con=getConnection();//con赋值

try {

this.pstmt=con.prepareStatement(sql);//发送SQL请求

for (int i = 0; i < args.length; i++) {//循环注册传进来的参数

pstmt.setObject(i+1, args[i]);

}

rs=pstmt.executeQuery();//执行查询返回结果集

while(rs.next()){

T entity=(T) type.getConstructor().newInstance();//实例化T

Method[] methods=type.getMethods();//获取实体的所有方法

for (Method method : methods) {//循环出所有的方法

String methodName=method.getName();//获取所有的方法名字

ColMapping colMapping=method.getAnnotation(ColMapping.class);

if(methodName.startsWith("set") ){//所有方法名字是SET的方法

String colName="";

if(colMapping==null){

colName=methodName.substring(3);//如果没有注解就截取他的SET后面的名字

}else{

colName=colMapping.value();//有注释就获取注释的值

}

Object colValue=rs.getObject(colName);//将要执行的值转换层OBJECT类型

if(colValue!=null){

method.invoke(entity, colValue);//执行这个方法

}

}

}

list.add(entity);//添加到这个集合

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return list;//返回这个集合

}

/**

* 更新

* @return

*/

public int update(String sql,Object...agrs){

this.con=getConnection();//获取连接

try {

this.pstmt=con.prepareStatement(sql);//发送执行SQL语句

for (int i = 0; i < agrs.length; i++) {//注册参数

pstmt.setObject(i+1, agrs[i]);

}

int result=pstmt.executeUpdate();//获取返回值

return result;

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return 0;//出错返回0

}

/**

* 关闭数据库

* @param rs

* @param pstmt

* @param con

*/

public static void  dbClose(ResultSet rs,PreparedStatement pstmt ,Connection con){

try {

if (rs != null)rs.close();

if (pstmt != null)pstmt.close();

if (con != null)con.close();

} catch (Exception e2) {

// TODO: handle exception

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值