您当前的位置: 首页 >  hibernate

宝哥大数据

暂无认证

  • 2浏览

    0关注

    1029博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

cms03---basic-hibernate02--BaseDao

宝哥大数据 发布时间:2017-10-29 11:08:06 ,浏览量:2

接口实现, BaseDao   BaseDao实现,需要写, 这就需要SessionFactory。这就需要设置依赖。 1.1.1、设置父依赖

这里写图片描述

1.1.2、子模块

这里写图片描述

1.2、SessionFactory, 以及Dao的注入,我们需要通过Spring的注入。(Spring-4.3.14 , Hibernate-5.2.12)
Spring 新版本注入
    JSR330   @Inject
Spring 老版本注入
    JSR250   @Resource

        
            
            javax.inject
            javax.inject
            1
        

这里写图片描述

注意:Dao层不做任何的判断, 只操作数据库

2、显示BaseDao的各个方法 2.1.1、load方法需要加载一个泛型对象,

这里写图片描述

2.1.2、提供一个方法,获取泛型对象。
    /**
     * 创建一个Class的对象来获取泛型的class
     */
    private Class clz;

    public Class getClz() {
        if(clz==null) {
            //获取泛型的Class对象
            clz = ((Class)
                    (((ParameterizedType)(this.getClass().getGenericSuperclass())).getActualTypeArguments()[0]));
        }
        return clz;
    }
2.1.3、四个基本增删改查的方法实现
    /**
     * 获取Session
     * @return
     */
    protected Session getSession() {
        return this.sessionFactory.openSession();
    }

    public T add(T t) {
        getSession().save(t);
        return t;
    }

    public void delete(int id) {
        getSession().delete(load(id));
    }

    public void update(T t) {
        getSession().update(t);
    }

    @SuppressWarnings("unchecked")
    public T load(int id) {
        return (T) getSession().load(getClz(), id); 
    }
2.2、list的查询, 设置别名, 参数化, 返回不分页的列表对象。

这里写图片描述

模块化: 构建排序的hql, 设置别名, 设置参数化,重用型高。
    /**
     * 构建排序的hql
     * @param hql
     * @return
     */
    private String initSort(String hql) {
        String order = SystemContext.getOrder();//排序的方式
        String sort = SystemContext.getSort();//排序的字段
        if (sort != null && !"".equals(sort.trim())) {
            hql += " order by " + sort;
            if (order !=null && !"desc".equals(order) ) {
                hql += " asc";
            }else {
                hql += " desc";
            }
        }
        return hql;
    }

    /**
     * 设置别名
     * @param query
     * @param alias
     */
    @SuppressWarnings("rawtypes")
    private void setAliasParameter(Query query, Map alias) {
        //设置别名
        if (alias != null) {
            Set keys = alias.keySet();
            for (String key : keys) {
                Object val = alias.get(key);
                if (val instanceof Collection) {//value是一个集合
                    query.setParameterList(key, (Collection)val);
                }else {
                    query.setParameter(key, val);
                }
            }
        }
    }

    /**
     * 设置参数化
     * @param query
     * @param args
     */
    @SuppressWarnings("rawtypes")
    private void setParameter(Query query, Object[] args){
        //设置参数化
        if (args != null && args.length > 0) {
            for (int i = 0; i < args.length; i++) {
                query.setParameter(i, args[i]);
            }
        }
    }
2.3、基于分页对象的查询 2.3.1、设置分页对象
/**
     * 设置分页
     * @param query
     * @param pager
     */
    private void setPages(Query query, Pager pager) {
        Integer pageSize = SystemContext.getPageSize();
        Integer pageOffset = SystemContext.getPageOffset();
        if (pageSize == null || pageSize             
关注
打赏
1587549273
查看更多评论
0.0415s