jsf+hibernate开发小项目杂谈(四)

四、基于Hibernate对CRUD操作的封装
    通过系统模块划分,分为三层:数据访问层、业务层、表现层。在数据访问层采用Hibernate,并实现了DAO模式;项目的业务逻辑比较简单,所以这块分量最小;表现层采用
managed bean。
   
    - 封装DAO操作
    public interface BaseDao {
        public Object findById(Class clazz, Serializable id) throws BaseException;
        public Serializable insert(Object vo) throws BaseException; // vo对象为ORM映射后与数据库表对应的纯javabean对象
        public void update(Object vo) throws BaseException;
        public void delete(Object vo) throws BaseException;
        public void delete(String id) throws BaseException; // 按主键删除记录
        public List findEntities(Object cond) throws BaseException; // 按条件查询
        public List findEntities(Object cond, int startRow, int pageSize) throws BaseException; // 按条件查询并分页
        public int countEntities(Object cond, int startRow, int pageSize) throws BaseException; // 按条件查询并统计总记录数
    }
   
    实现BaseDao接口的hibernate抽象类
    public abstract class AbstractHibernateDao implements BaseDao {
        // ...
    }
   
    - 封装BaseBean
    public interface BaseBean {
        public DataModel getDataModel(); // 得到数据模型
        public String queryAction(); // 查询事件
        public String addAction(); // 添加记录事件
        public String editAction(); // 编辑记录事件
        public String insertAction(); // 插入记录事件
        public String updateAction(); // 更新记录事件
        public String deleteAction(); // 删除记录事件
    }

    - 使用beanutils包进行Bean和POJO对象的类属性对拷(属性同名之间值对拷)
    Hibernate的DAO查询数据库后返回的是POJO对象(即VO值对象),在jsf前台显示时应该提供managed bean。同样,前台jsf页面返回到业务逻辑层是bean对象,而交给DAO对象
去与数据库交互(如增删改操作)的必须是VO对象。因此可以采用BeanUtils工具实现这两种对象之间的对拷,但前提是属性必须同名。
    public class BeanBuilder {
        // 根据参照对象ref,创建对象(类型由clazz参数指定)
        public static Object createObject(Class clazz, Object ref)
                throws BaseException {
            Object obj = null;
            try {
                obj = Class.forName(clazz.getName()).newInstance(); // 动态装载类
                BeanUtils.copyProperties(obj, ref);
            } catch (Exception e) {
                logger.debug(e);
                throw new BaseException(e);
            }
            return obj;
        }

        // 根据参照对象ref,进行对象赋值(同名属性对拷)
        public static void assignObject(Object obj, Object ref)
                throws BaseException {
            try {
                BeanUtils.copyProperties(obj, ref);
            } catch (Exception e) {
                logger.debug(e);
            }
        }
    }
    思考:增加bean之间的对拷对性能会产生多大的损失? 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值