java减少数据访问层代码—反射3—数据访问层就一个接口一个实现

来源:互联网 发布:mcs-51单片机寻址方式 编辑:程序博客网 时间:2024/06/10 02:38

 

在前面几篇文章里已经将增删改查进行了代码的封装,今天在想可不可以把数据访问层在进行封装,数据访问层只留下一个接口一个实现呢,结果在宿舍没事干,考研不想看书被保研又不给保计算机烦的没事就试了试,就写了出来了,呵呵呵,现在废话不说了,先看一下图片

整个数据访问层就剩下这两个类,一个是接口,一个是接口的实现,还有上几篇文章封装的类

 

 

 

       

 

--------------------------------------------使用-----------------------------------------

//得到一个省份 

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>();
  //序列seqid自增加
  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

有问题再说,的看书了,本来考研希望就不大,得看书去
原创粉丝点击