在前面几篇文章里已经将增删改查进行了代码的封装,今天在想可不可以把数据访问层在进行封装,数据访问层只留下一个接口一个实现呢,结果在宿舍没事干,考研不想看书被保研又不给保计算机烦的没事就试了试,就写了出来了,呵呵呵,现在废话不说了,先看一下图片
整个数据访问层就剩下这两个类,一个是接口,一个是接口的实现,还有上几篇文章封装的类
--------------------------------------------使用-----------------------------------------
//得到一个省份
IDaoImpl<Provinces> dao=new IDaoImpl<Provinces>("com.fendou.vo.Provinces");
Provinces p = dao.getone(111);
System.out.println(p.getPv_name());
//得到一个订单
IDaoImpl<Orders> dao2=new IDaoImpl<Orders>("com.fendou.vo.Orders");
Orders o = dao2.getone(10);
if(o!=null){
System.out.println(o.getOr_city());
}else{
System.out.println("空");
}
使用没大变化吧
-------------------------------------------------------今天封装的源码--------------------------------------
-----------------IDao接口类
package com.fendou.dao;
import java.util.List;
import com.fendou.vo.Orders;
/**
* 2012-9-19
* @author 牟云飞
*数据访问层
* @param 类名
*/
public interface IDao<T> {
//添加数据
public boolean add(T t);
//删除数据
public boolean delete(int id);
//根据条件删除
public boolean deleteAll(String conif);
//修改数据
public boolean update(int id,T t);
//获取所有
public List<T> getAll();
//获取一条数据
public T getone(int id);
//分页获取
public List<T> getPage(int max ,int min , String conif);
}
---------IDaoImpl类接口IDao接口的实现
package com.fendou.dao.impl;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import com.fendou.DBUtil.DButil;
import com.fendou.DBUtil.WrapperAddDao;
import com.fendou.DBUtil.WrapperUpdateDao;
import com.fendou.dao.IDao;
import com.fendou.vo.Orders;
/**
* 2012-9-19
* @author 牟云飞
*数据访问层
*注意用到序列,数据库序列名为:seq_<表明 >如:seq_orders
*
* @param 类名
*/
public class IDaoImpl<T> implements IDao<T>{
//新建一个dbutil
DButil<T> db =new DButil<T>();
/**
* 默认构造
*/
public IDaoImpl(){}
/**
* 有参构造
* @param classPath
*/
public IDaoImpl(String classPath){
this.classpath=classPath;
}
public String classpath;
/**
* 得到类名,首字母大写
* @return
*/
public String className(){
String name = null;
name=classpath.toLowerCase().substring(classpath.toLowerCase().lastIndexOf(".")+1, classpath.toLowerCase().length());
return name;
}
/**
* 获得该类的id
* @return
*/
public String classid(){
String id = null;
Class cl;
try {
cl = Class.forName(classpath);
Field fields[] = cl.getDeclaredFields();
id=fields[0].getName();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return id;
}
/**
* 添加
*/
public boolean add(T t) {
boolean flag=false;
WrapperAddDao<T> w = new WrapperAddDao<T>();
//序列seq,id自增加
String seq = "seq_"+ className();
flag = w.insertBatch(classpath, t,seq);
return flag;
}
/**
* 根据id删除
*/
public boolean delete(int id) {
String s = "delete from "+className()+" where "+classid()+"=?";
int k = db.update(s, id);
if(k>0){
return true;
}else{
return false;
}
}
/**
* 根据条件删除全部
*/
public boolean deleteAll(String conif) {
String s = "delete from "+className();
if(conif.trim()!=""){
s+=conif;
}
int k = db.update(s);
if(k>0){
return true;
}else{
return false;
}
}
/**
* 得到全部数据
*/
public List<T> getAll() {
List<T> list = new ArrayList<T>();
String sql = "select * from "+className();
list = db.getResultList(classpath, sql);
return list;
}
/**
* 根据条件获得数据,并分页
*/
public List<T> getPage(int max, int min, String conif) {
String sql = "select * from" +
" (select rownum r ,a.* from " +
"(select * from "+className()+") a )b " +
"where b.r<=? and b.r>=?" ;
if(conif.trim()!=""){
sql+= " and ( " +conif+" )";
}
List<T> list = new ArrayList<T>();
list = db.getResultList(classpath, sql,max,min);
return list;
}
/**
* 根据id获得一条数据
*/
public T getone(int id) {
List<T> list = new ArrayList<T>();
String sql = "select * from "+className()+" where "+classid()+"=?";
list = db.getResultList(classpath, sql, id);
try{
return list.get(0);
}catch (Exception e) {
return null;
}
}
/**
* 更新一条数据
*/
public boolean update(int id, T t) {
WrapperUpdateDao<T> up = new WrapperUpdateDao<T>();
return up.updateBatch(classpath, t,id);
}
}
怎么样整个数据访问层就这个两个类,是不是开发更快了
联系邮箱:1147417467@qq.com
有问题再说,的看书了,本来考研希望就不大,得看书去