• 关于hibernate查询结果类的封装


    实际应用中,我们查询的结果有时候会需要其他的类或者是一个新的包装类,即希望映射到一个DTO(即使hibernate早在很久就不推荐使用。。)但我还是说一下吧

    如 我有这样子的两个类

    //get和set方法均省略

    public class Forum implements Serializable{
    
        /**
         * 
         */
        private static final long serialVersionUID = 1L;
    //主键生成  用uuid
        private String forum_id;
        private String forum_title;
        private String forum_header;
        private String forum_description;
        private Date create_time;
        private Institution institution;
      //get  set方法省略  
    }
    public class Institution implements Serializable{
    
        /**
         * 
         */
        private static final long serialVersionUID = 1L;
        
        private Integer institution_id;
        private String institution_name;
        private String description;
        private String image;
        private Date last_edittime;
        private boolean state;
      //get set 方法省略  
    }

    我现在希望使用hibernate的sql语句查询出一些指定的字段,然后封装到一个实体中  ,由于查询出来的结果可能是个List 也可能是单个结果。所以这里推荐用List<object>类型来封装

      希望查询出来字段都封装到下面这个类中

    public class SendPojo implements Serializable{
    
        /**
         * 
         */
        private static final long serialVersionUID = -5356294118259551164L; 
        private String forum_id;
        private String forum_title;
        private String forum_header;
        private String forum_description;
        private Integer institution_id;
      //get set方法省略  
    }

    那么可以在dao层这样子做

    这里为方便演示只查询少数几个字段,实际上你可以查询多个,但是需要注意的是 在你的hql语句中查询结果名字 必须 和你设置的希望映射的实体属性名一样
    

      

    String hql="select "f.forum_id,f.forum_title,i.institution_id from Forum f,Institution i where i.institution_id=1;
    				Query query = session.createQuery(hql);
    Query query2 = query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP) ;
    List list = query2.list();
    return list;
    

      可能有点不明确完整的可以参照这样

    public List<PageForum> getForumList(final Integer currentPage,  final Integer pageSize) {
            return      getHibernateTemplate().execute(new HibernateCallback<List<PageForum>>() {
    
                @Override
                public List<PageForum> doInHibernate(Session session) throws HibernateException {
                    String hql="select u.user_id as userId, f.forum_id as forumId , f.forum_title as forumTitle,f.forum_header as forumHeader,f.forum_description as forumDescription,f.create_time as createTime,i.image as image,i.institution_name as institutionName,u.username as authorName  from Forum f,Institution i,User u where f.author.user_id=u.user_id and f.institution.institution_id=i.institution_id order by f.create_time desc";
                    Query query = session.createQuery(hql);
                    query.setFirstResult((currentPage-1)*pageSize);
                    query.setMaxResults(pageSize);
                       Query query2 = query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP) ;
                       List list = query2.list();
                       System.out.println(list.size());
                     
                    return list;
                }
            });
            
        }

    其中ForumPage是我另外添加的DTO在应用中你可以按需求自己设定,但是如果没有必要并不推荐,因为这样是的要封装的属性很多,很浪费。

  • 相关阅读:
    winform解析json API数据
    c#(winform)获取本地打印机
    winform程序post提交数据API
    C#关于panle重叠
    net面试总结的题目
    委托
    最实用JS 留着学习
    dev 控件获得所有的EFDEVGRID
    c#利用WebClient和WebRequest获取网页源代码的比较
    浅谈.Net WebService开发
  • 原文地址:https://www.cnblogs.com/notably/p/10606807.html
Copyright © 2020-2023  润新知