java dao层设计_DAO层基础设计原理

//BasDaoUtil.java代码,共7个方法

packagecom.sxt.mvcpro.dao.impl;importjava.lang.reflect.Field;importjava.sql.Connection;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.util.ArrayList;importjava.util.Iterator;importjava.util.List;public classBaseDAOUtil {private staticPreparedStatement pst;private staticResultSet rst;/***

*@paramconn

*@paramsql

*@paramclz

*@paramvo

*@return*@throwsException*/

public int save(Connection conn, String sql, Class clz, T vo) throwsException {//取得预编译对象

pst =conn.prepareStatement(sql);//为sql设置占位符内容(insert into 表(字段1,字段2,字段3,字段4)VALUES(?,?,?,?))

String[] coulums = sql.split("\\(")[1].split("\\)")[0].split(",");for (int i = 0; i < coulums.length; i++) {

Field f=vo.getClass().getDeclaredField(coulums[i]);//取消私有封装访问限制

f.setAccessible(true);//取得字段对应的属性的值

Object fvalue =f.get(vo);

pst.setObject(i+ 1, fvalue);

}returnpst.executeUpdate();

}/***

*@paramconn

*@paramsql

*@paramvo

*@return*@throwsException*/

public int edit(Connection conn,String sql,T vo) throwsException{//update emp SET sal=?,job=?,comm=? WHERE empno=? AND ... ;//取得预编译对象

pst=conn.prepareStatement(sql);

String[] strs= sql.split("SET")[1].split("WHERE")[0].split(",");int i=0;for(i=0;i

String column=strs[i].split("=")[0];//通过反射取得column对应在vo中的属性对象(就是拿vo的变量,比如ename)

Field f =vo.getClass().getDeclaredField(column.trim());//取消私有封装访问限制

f.setAccessible(true);//取得该字段在vo对象中的值

Object fvalue=f.get(vo);//为占位符设置具体的内容

pst.setObject(i+1, fvalue);

}

String coditions= sql.split("WHERE")[1].split("=")[0];

Field f=vo.getClass().getDeclaredField(coditions.trim());

f.setAccessible(true);

Object fvalue=f.get(vo);

pst.setObject(i+1, fvalue);returnpst.executeUpdate();

}/***

*@paramconn

*@paramsql

*@paramid

*@return*@throwsException*/

public int removeById(Connection conn,String sql,Object id) throwsException{//取得预编译对象

pst=conn.prepareStatement(sql);

pst.setObject(1, id);returnpst.executeUpdate();

}/***

*@paramconn

*@paramsql

*@paramids

*@return*@throwsException*/

public int removeBatch(Connection conn,StringBuffer sql,List ids) throwsException{

Iterator iter=ids.iterator();while(iter.hasNext()) {

sql.append(iter.next()+",");

}

sql.delete(sql.length()-1, sql.length());

sql.append(")");

pst=conn.prepareStatement(sql.toString());returnpst.executeUpdate();

}/***

*@paramconn

*@paramsql

*@paramclz

*@paramid

*@return*@throwsException*/

public T selectOne(Connection conn,String sql,Class clz,Object id) throwsException{//取得预编译对象

pst=conn.prepareStatement(sql);

pst.setObject(1, id);//执行sql语句

rst=pst.executeQuery();

T t=null;if(rst.next()) {

t=clz.newInstance();//取得所有属性

Field[] fs =clz.getDeclaredFields();for(Field f : fs) {//为属性取消私有封装

f.setAccessible(true);//取得属性名

String fname=f.getName();//使用该属性名称从结果集中取得数据

Object fvalue=rst.getObject(fname);//将取得的值保存t对象的属性

f.set(t, fvalue);

}returnt;

}return null;

}/***

*@paramconn

*@paramsql

*@paramclz

*@paramparams

*@return*@throwsException*/

public List selectList(Connection conn,String sql,Class clz,Object...params) throwsException{

List list= new ArrayList();

pst=conn.prepareStatement(sql);for(int i=0;i

pst.setObject(i+1, params[i]);

}//执行sql语句

rst=pst.executeQuery();

T t=null;while(rst.next()) {

t=clz.newInstance();//取得所属性

Field[] fs =clz.getDeclaredFields();for(Field f : fs) {//为属性取消私有封装

f.setAccessible(true);//取得属性名

String fname =f.getName();//使用该属性名称从结果集中取得数据

Object fvalue=rst.getObject(fname);//将取得的值保存给t对象的属性

f.set(t, fvalue);

}

list.add(t);

}returnlist;

}/***

*@paramconn

*@paramsql

*@paramparams

*@return*@throwsException*/

public int selectCount(Connection conn,String sql,Object...params) throwsException{

pst=conn.prepareStatement(sql);for(int i=0;i

pst.setObject(i+1, params[i]);

}//执行sql语句

rst=pst.executeQuery();

rst.next();//让指针往下移动

return rst.getInt(1);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值