`
jackson_jar
  • 浏览: 36520 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

设计的非常非常好用的DAO(哈)

    博客分类:
  • java
阅读更多

 收集下来,方便自己,也方便大家!


package com.scitel.gdnumcommon.utils;  
 
import java.math.BigDecimal;  
import java.sql.Connection;  
import java.sql.PreparedStatement;  
import java.sql.ResultSet;  
import java.sql.ResultSetMetaData;  
import java.sql.Types;  
import java.util.ArrayList;  
import java.util.HashMap;  
import java.util.Iterator;  
import java.util.List;  
import java.util.Map;  
 
import org.apache.commons.beanutils.BeanUtils;  
import org.apache.commons.logging.Log;  
import org.apache.commons.logging.LogFactory;  
 
import com.scitel.gdnumcommon.entity.Pagination;  
import com.scitel.gdnumcommon.entity.BaseVO;  
 
public class BaseDAO {  
    private static final Log log = LogFactory.getLog(BaseDAO.class);  
 
    /** 
     * 保存数据,新建和修改都用这个 
     * 
     * @param con 
     * @param SQL 
     * @param params 
     * @throws Exception 
     * @author  
     */ 
    public void save(Connection con, String SQL, List params)  
            throws Exception {  
        PreparedStatement ps = null;  
        try {  
            ps = con.prepareStatement(SQL);  
            if (SQL == null) {  
                throw new Exception();  
            }  
 
            if (params != null && params.size() > 0) {  
                int count = 0;  
                for (Iterator iterator = params.iterator(); iterator.hasNext(); count++) {  
                    Object object = iterator.next();  
                    setObjectValue(ps, count + 1, object);  
                }  
            }  
            ps.executeUpdate();  
        } catch (Exception e) {  
            log.error(e);  
            throw e;  
        } finally {  
            try{  
                if(ps != null) {  
                    ps.close();  
                }  
            }catch(Exception e){  
 
            }  
        }  
    }  
 
    /** 
     * 保存数据,新建和修改都用这个,通过字段名称匹配类型 
     * @param con 
     * @param SQL 
     * @param voclass 
     * @param paramMap 
     * @throws Exception 
     * @author  
     */ 
    public void save(Connection con, String SQL, Class voclass, Map paramMap)  
            throws Exception {  
        PreparedStatement ps = null;  
        try {  
            ps = con.prepareStatement(SQL);  
            if (SQL == null) {  
                throw new Exception();  
            }  
 
            if (paramMap != null && paramMap.size() > 0) {  
                int count = 0;  
                for (Iterator iterator = paramMap.keySet().iterator(); iterator.hasNext(); count++) {  
 
                    String key = (String)iterator.next();  
                    Object object = paramMap.get(key);  
                    setObjectValue(ps, voclass, count+1, key, object);  
                }  
            }  
            ps.executeUpdate();  
        } catch (Exception e) {  
            log.error(e);  
            throw e;  
        } finally {  
            try{  
                if(ps != null) {  
                    ps.close();  
                }  
            }catch(Exception e){  
 
            }  
        }  
    }  
 
    /** 
     * 删除数据 
     * 
     * @param con 
     * @param SQL 
     * @param params 
     * @throws Exception 
     * @author  
     */ 
    public void remove(Connection con, String SQL, List params)  
            throws Exception {  
        PreparedStatement ps = null;  
        try {  
            ps = con.prepareStatement(SQL);  
            if (SQL == null) {  
                throw new Exception();  
            }  
            if (params != null && params.size() > 0) {  
                int count = 0;  
                for (Iterator iterator = params.iterator(); iterator.hasNext(); count++) {  
                    Object object = iterator.next();  
                    setObjectValue(ps, count + 1, object);  
                }  
            }  
            ps.executeUpdate();  
        } catch (Exception e) {  
            log.error(e);  
            throw e;  
        } finally {  
            try{  
                if(ps != null) {  
                    ps.close();  
                }  
            }catch(Exception e){  
 
            }  
        }  
    }  
 
    /** 
     * 根据ID选择数据 
     * 
     * @param con 
     * @param SQL 
     * @param id 
     * @param voclass 
     * @return 
     * @throws Exception 
     * @author  
     */ 
    public BaseVO selectById(Connection con, String SQL, String id,  
            Class voclass) throws Exception {  
        Object po = null; // 承载值对象  
        PreparedStatement ps = null;  
        ResultSet rs = null;  
        ResultSetMetaData rsm = null;  
        try {  
            ps = con.prepareStatement(SQL);  
            if (SQL == null) {  
                throw new Exception();  
            }  
 
            ps.setString(1, id);  
 
            rs = ps.executeQuery();  
            rsm = rs.getMetaData();  
            if (rs.next()) {  
                Map entity = new HashMap();  
                for (int i = 1; i <= rsm.getColumnCount(); i++) {  
                    String columnName = rsm.getColumnName(i).toLowerCase();  
                    Object columnValue = getObjectValue(rs, voclass, i, columnName);  
                    entity.put(columnName, columnValue);  
                }  
                if (voclass != null) {  
                    po = voclass.newInstance();  
                    BeanUtils.populate(po, entity);  
                }  
                   
            }  
        } catch (Exception e) {  
            log.error(e);  
            throw e;  
        } finally {  
            try {  
                if (rs != null) {  
                    rs.close();  
                }  
            } catch (Exception e) {  
 
            }  
            try {  
                if (ps != null) {  
                    ps.close();  
                }  
            } catch (Exception e) {  
 
            }  
        }  
        return (BaseVO) po;  
    }  
 
    /** 
     * 选择记录,不分页 
     * @param con 
     * @param SQL 
     * @param params 
     * @param voclass 
     * @return 
     * @throws Exception 
     * @author  
     */ 
    public List select(Connection con, String SQL, List params, Class voclass)  
            throws Exception {  
        Object vo = null; // 承载值对象  
        PreparedStatement ps = null;  
        ResultSet rs = null;  
        ResultSetMetaData rsm = null;  
        List relist = null;  
        try {  
            ps = con.prepareStatement(SQL);  
            if (SQL == null) {  
                throw new Exception();  
            }  
            if (params != null && params.size() > 0) {  
                int count = 0;  
                for (Iterator iterator = params.iterator(); iterator.hasNext(); count++) {  
                    Object object = iterator.next();  
                    setObjectValue(ps, count + 1, object);  
                }  
            }  
            rs = ps.executeQuery();  
            rsm = rs.getMetaData();  
            relist = new ArrayList();  
            while (rs.next()) {  
                Map entity = new HashMap();  
                for (int i = 1; i <= rsm.getColumnCount(); i++) {  
                    String columnName = rsm.getColumnName(i).toLowerCase();  
                    Object columnValue = getObjectValue(rs, voclass, i, columnName);  
                    entity.put(columnName, columnValue);  
                      
                }  
                if (voclass != null) {  
                    vo = voclass.newInstance();  
                    BeanUtils.populate(vo, entity);  
                    relist.add(vo);  
                } else {  
                    relist.add(entity);  
                }  
            }  
        } catch (Exception e) {  
            log.error(e);  
            throw e;  
        } finally {  
            try {  
                if (rs != null) {  
                    rs.close();  
                }  
            } catch (Exception e) {  
 
            }  
            try {  
                if (ps != null) {  
                    ps.close();  
                }  
            } catch (Exception e) {  
 
            }  
              
        }  
        return relist;  
    }  
 
    /** 
     * 分页查询 
     * 
     * @param con 
     * @param SQL 
     * @param params 
     * @param voclass 
     * @param pagination 
     * @return 
     * @throws Exception 
     * @author  
     */ 
    public List selectPagination(Connection con, String SQL, List params,  
            Class voclass, Pagination pagination) throws Exception {  
        if (SQL == null) {  
            throw new NullPointerException("SQL不能为空!");  
        }  
        if (pagination == null) {  
            throw new NullPointerException("分页类不能为空!");  
        }  
 
        // TODO Auto-generated method stub  
        Object vo = null; // 承载值对象  
        PreparedStatement ps = null;  
        ResultSet rs = null;  
        ResultSetMetaData rsm = null;  
        List relist = null;  
        try {  
 
            ps = con.prepareStatement("select count(1) as count_ from ( " + SQL + " )");  
 
            if (params != null && params.size() > 0) {  
                int count = 0;  
                for (Iterator iterator = params.iterator(); iterator.hasNext(); count++) {  
                    Object object = iterator.next();  
                    setObjectValue(ps, count + 1, object);  
                }  
            }  
 
            rs = ps.executeQuery();  
            if (rs.next()) {  
                pagination.setTotalCount(rs.getInt(1));  
                  
            }  
              
 
            if (pagination.getTotalCount() > 0) {  
                /* 组成分页内容 */ 
                StringBuffer pagingSelect = new StringBuffer(100);  
                pagingSelect  
                        .append("select * from ( select row_.*, rownum rownum_ from ( ");  
                pagingSelect.append(SQL);  
                pagingSelect  
                        .append(" ) row_ where rownum <= ?) where rownum_ > ?");  
 
                ps = con.prepareStatement(pagingSelect.toString());  
                int count = 0;  
                if (params != null && params.size() > 0) {  
                    for (Iterator iterator = params.iterator(); iterator.hasNext(); count++) {  
                        Object object = iterator.next();  
                        setObjectValue(ps, count + 1, object);  
                    }  
                }  
                  
                ps.setInt(count + 1, pagination.getPage()  
                        * pagination.getCount());  
                ps.setInt(count + 2, (pagination.getPage() - 1)  
                        * pagination.getCount());  
 
                log.info("pagination.getPage():" + pagination.getPage());  
                log.info("pagination.getCount():" + pagination.getCount());  
                rs = ps.executeQuery();  
                rsm = rs.getMetaData();  
                relist = new ArrayList();  
                while (rs.next()) {  
                    Map entity = new HashMap();  
                    for (int i = 1; i <= rsm.getColumnCount(); i++) {  
                        String columnName = rsm.getColumnName(i).toLowerCase();  
                        Object columnValue = getObjectValue(rs, voclass, i, columnName);  
                        entity.put(columnName, columnValue);  
                    }  
                    if (voclass != null) {  
                        vo = voclass.newInstance();  
                        BeanUtils.populate(vo, entity);  
                        relist.add(vo);  
                    } else {  
                        relist.add(entity);  
                    }  
                }  
            }  
        } catch (Exception e) {  
            log.error(e);  
            throw e;  
        } finally {  
            try {  
                if (rs != null) {  
                    rs.close();  
                }  
            } catch (Exception e) {  
 
            }  
            try {  
                if (ps != null) {  
                    ps.close();  
                }  
            } catch (Exception e) {  
 
            }  
 
        }  
        return relist;  
    }  
 
    /** 
     * 获得SequenceValue 
     * @param sequenceName 
     * @return 
     * @throws Exception 
     * @author  
     */ 
    public Long getSequenceValue(Connection con, String sequenceName)throws Exception {  
        PreparedStatement ps = null;  
        ResultSet rs = null;  
        Long sequenceValue = null;  
        try{  
            ps = con.prepareStatement("select " + sequenceName + ".nextval from dual");  
            rs = ps.executeQuery();  
            if(rs.next()) {  
                sequenceValue = new Long(rs.getLong(1));  
            }  
        }catch(Exception e){  
            log.error(e);  
            throw e;  
        }finally{  
            try {  
                if (rs != null) {  
                    rs.close();  
                }  
            } catch (Exception e) {  
 
            }  
            try {  
                if (ps != null) {  
                    ps.close();  
                }  
            } catch (Exception e) {  
 
            }  
        }  
        return sequenceValue;  
    }  
    /** 
     * 把对象传入数据库 
     * @param ps 
     * @param count 
     * @param object 
     * @author  
     */ 
    private final void setObjectValue(PreparedStatement ps, int count, Object object) throws Exception {  
        log.debug("count is " + count + " object is " + object);  
        if(object != null) {  
            if(object instanceof Integer){  
                ps.setInt(count, ((Integer)object).intValue());  
            }else if(object instanceof Long) {  
                ps.setLong(count, ((Long)object).longValue());  
            }else if(object instanceof BigDecimal){  
                ps.setBigDecimal(count, (BigDecimal)object);  
            }else if(object instanceof String){  
                ps.setString(count, (String)object);  
            }else if(object instanceof java.util.Date) {  
                if(object!=null){  
                    long time = ((java.util.Date)object).getTime();  
                    ps.setDate(count, new java.sql.Date(time));  
                }else{  
                    ps.setDate(count, null);  
                }  
            }else{  
                ps.setObject(count, object);  
            }  
        }else{  
            ps.setNull(count, Types.INTEGER);  
        }  
    }  
 
    /** 
     * 把对象传入数据库 
     * @param ps 
     * @param clazz 
     * @param count 
     * @param columnName 
     * @param object 
     * @throws Exception 
     * @author  
     */ 
    private final void setObjectValue(PreparedStatement ps, Class clazz, int count,  
            String columnName, Object object)throws Exception {  
        log.debug("count is " + count + " columnName is " + columnName + " object is " + object);  
        String classType = clazz.getDeclaredField(columnName).getType().getName();  
        if(classType.equals("java.lang.Integer")){  
            if(object != null) {  
                ps.setInt(count, ((Integer)object).intValue());  
            }else{  
                ps.setNull(count, Types.INTEGER);  
            }  
        }else if(classType.equals("java.lang.Long")) {  
            if(object != null ) {  
                ps.setLong(count, ((Long)object).longValue());  
            }else{  
                ps.setNull(count, Types.INTEGER);  
            }  
        }else if(classType.equals("java.math.BigDecimal")){  
            if(object != null) {  
                ps.setBigDecimal(count, (BigDecimal)object);  
            }else{  
                ps.setNull(count, Types.NUMERIC);  
            }  
        }else if(classType.equals("java.lang.String")){  
            if(object != null) {  
                ps.setString(count, (String)object);  
            }else{  
                ps.setString(count, null);  
            }  
        }else if(classType.equals("java.util.Date")) {  
            if(object!=null){  
                long time = ((java.util.Date)object).getTime();  
                ps.setDate(count, new java.sql.Date(time));  
            }else{  
                ps.setDate(count, null);  
            }  
        }else{  
            ps.setObject(count, object);  
        }  
    }  
 
    /** 
     * 把数据从数据取出来 
     * @param rs 
     * @param clazz 
     * @param count 
     * @param columnName 
     * @return 
     * @throws Exception 
     * @author  
     */ 
    private final Object getObjectValue(ResultSet rs, Class clazz, int count, String columnName) throws Exception {  
        Object fieldValue = null;  
        log.debug("columnName is " + columnName + " count is " + count);  
        if(columnName != null) {  
            if("rownum".equals(columnName)) {  
                fieldValue = new Long(rs.getLong(count));  
            }else if("rownum_".equals(columnName)) {  
                fieldValue = new Long(rs.getLong(count));  
            }else if("count_".equals(columnName)) {  
                fieldValue = new Long(rs.getLong(count));  
            }else{  
                String classType = clazz.getDeclaredField(columnName).getType().getName();  
 
                if(classType.equals("java.lang.Integer")){  
                    fieldValue =new Integer( rs.getInt(count));  
                }else if(classType.equals("java.lang.Long")) {  
                    fieldValue =new Long( rs.getLong(count));  
                }else if(classType.equals("java.math.BigDecimal")){  
                    fieldValue = rs.getBigDecimal(count);  
                }else if(classType.equals("java.lang.String")){  
                    fieldValue = rs.getString(count);  
                }else if(classType.equals("java.util.Date")) {  
                    java.sql.Date date = rs.getDate(count);  
                    if(date!= null){  
                        fieldValue = new java.util.Date(date.getTime());  
                    }  
                }else{  
                    fieldValue = rs.getString(count);  
                }  
            }  
        }  
        return fieldValue;  
    }  
 
 

 

有什么更好的意见,可以发到这里来交流,欢迎!!

分享到:
评论

相关推荐

    图书馆管理系统概要设计.docx

    系统的目标用户是哈尔滨工程大学(简称“哈工程”),运行单位为软件开发小组。 ##### 1.3 定义 **Java EE应用的分层模型**主要包括以下几层: - **Domain Object (领域对象)层**:该层包含一系列POJO(Plain Old ...

    struts1(老师穿的课件哈)

    在分析压缩包中的源代码时,你可以关注Action类的实现、ActionForm的设计、JSP页面的布局,以及可能存在的DAO(Data Access Object)层,这些都是Struts1应用的核心组成部分。同时,也可以学习如何结合分页和CRUD...

    操作系统学习资料

    最后,"计算机操作系统(7).doc"可能探讨更高级或现代操作系统的话题,如分布式系统、云计算环境下的操作系统特性、操作系统的微内核设计或者实时操作系统的特性。 "教育手拉手 - Powered By Molyx.com.url"是一个...

    用VB编写的学生管理信息系统 相当的实用

    7. **用户界面设计**:VB的Form设计器允许开发者通过拖放方式构建用户界面,无需编写大量界面布局代码。 8. **代码调试**:VB集成的调试工具,如Breakpoints、Watch窗口,便于开发者找出并修复程序中的问题。 9. *...

    sale二手拍卖项目.7z

    "需要的朋友可以下载哈!"这句提示表明该项目对学习和实践SSM框架或者了解二手拍卖系统开发的人来说具有实际价值。 【标签】中涉及的关键点: 1. **SSM框架**:Spring框架提供了依赖注入和事务管理等功能,Spring ...

    javaWeb在线考试系统

    DAO是数据访问对象,是Java编程中用于访问数据库的一种设计模式。在本系统中,DAO层负责与数据库进行交互,封装了所有的SQL操作,实现了业务逻辑与数据操作的解耦。这样,即使数据库结构发生变化,也不会影响到上层...

    Java Web课设-个人博客(双端系统)

    用于课设那可是再好不过了哈哈哈,用到了Mysql、SpringBoot、MyBatis、Maven、Thymeleaf。用到比较新颖的应该是markdown转html,人脸识别,还有好看的登录页面哦 个人博客管理系统主要分为管理员模块和览客模块。...

    Java-企业员工信息管理系统

    1. 源代码文件夹:包含Java后端代码,如控制器、服务层、DAO层等。 2. 视图文件夹:可能使用JSP或Thymeleaf等技术,用于渲染前端页面。 3. 配置文件:如web.xml,用于配置Web应用的初始化参数和Servlet映射。 4. SQL...

    spring+spring mvc+hibernate框架整合简单小例子

    在IT行业中,Spring、Spring MVC和Hibernate是三个非常重要的开源框架,它们分别在不同层面上为Java应用提供了强有力的支持。本篇文章将详细讲解这三个框架的基本概念、整合过程以及为何适合初学者。 首先,Spring...

    spring+spring mvc+hibernate开发工程财务管理辅助系统

    它遵循模型-视图-控制器(MVC)设计模式,将业务逻辑、数据展示和用户交互分离,使得代码结构清晰,易于维护。Spring MVC通过DispatcherServlet处理HTTP请求,通过ModelAndView对象来传递数据到视图层,同时支持多种...

    spring3.0 项目源码

    在实际项目中,mdm(可能是MetaData Management的缩写)可能代表元数据管理,这可能是一个模块或者包名,它可能包含了Spring的配置文件、实体类、DAO层、服务层以及控制器层的代码。你可以从中学习如何组织和设计一...

    学生管理系统源代码

    5. 数据访问对象(DAO):如`StudentDAO.java`,执行数据库操作。 6. SQL脚本文件:如`create_table.sql`,用于创建数据库表结构。 7. 配置文件:如`web.xml`,定义Web应用的部署描述符。 深入研究这些文件,我们...

    ssh最少jar包

    - Struts2是一个基于MVC设计模式的Web应用框架,处理用户请求并生成响应。 - 它提供了一套强大的拦截器(Interceptor)机制,可以实现请求的预处理和后处理,比如登录检查、权限验证等。 - 使用Struts2,可以通过...

    项目源码.rar

    3. **MyBatis**:是一个持久层框架,它允许开发者将SQL语句直接写在XML配置文件或注解中,解决了DAO层繁琐的代码编写工作,提高了开发效率。 描述中提到前端开发使用了Bootstrap,这是一个流行的HTML、CSS和JS框架...

Global site tag (gtag.js) - Google Analytics