关于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-)*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在应用中你可以按需求自己设定,但是如果没有必要并不推荐,因为这样是的要封装的属性很多,很浪费。
关于hibernate查询结果类的封装的更多相关文章
- Hibernate查询部分字段并封装到指定类中
Hibernate 使用查询部分/指定字段,有几种字现方式: 第一种方式是通过HQL语句实现,类似SQL,方法如下: String hql = "select id,name from Li ...
- java框架之Hibernate(2)-持久化类&主键生成策略&缓存&事务&查询
持久化类 概述 持久化:将内存中的对象持久化到数据库中的过程就是持久化.Hibernate 就是用来进行持久化的框架. 持久化类:一个 Java 对象与数据库的表建立了映射关系,那么这个类在 Hibe ...
- hql语句查询实体类采用list方法的返回结果集
在hibernate中,用hql语句查询实体类,采用list方法的返回结果为一个List,该List中封装的对象分为以下三种情况:1.查询全部字段的情况下,如"from 实体类", ...
- 将具有关联关系的两个表从hibernate查询出来转成json对象时报错
第一篇文章: 相信大家做过JSON相关的东西对这个异常并不陌生,这个异常是由于JSONObject插件内部会无限拆解你传入的对象,直到没有可拆解为止,问题就在这,如果你传入的对象有外键关系,或者相互引 ...
- hibernate 查询、二级缓存、连接池
hibernate 查询.二级缓存.连接池 查询: 1) 主键查询 Dept dept = (Dept) session.get(Dept.class, 12); Dept dept = (Dep ...
- Hibernate查询、连接池、二级缓存
Hibernate第三天: 1. 对象状态 2. session缓存 3. lazy懒加载 4. 映射 一对一对映射 组件/继承映射 目标: 一.hibernate查询 二.hibernate对连接池 ...
- Hibernate第十篇【Hibernate查询详解、分页查询】
前言 在Hibernate的第二篇中只是简单地说了Hibernate的几种查询方式-.到目前为止,我们都是使用一些简单的主键查询阿-使用HQL查询所有的数据-.本博文主要讲解Hibernate的查询操 ...
- Hibernate查询以及优化策略04
一. HQL查询 1. HQL(hibernate query language)单表查询 1.1 准备项目 创建项目: hinernate-03-query 引入jar,同前一个项目 复制实体(订单 ...
- 从零打造在线网盘系统之Hibernate查询与更新技术
欢迎浏览Java工程师SSH教程从零打造在线网盘系统系列教程,本系列教程将会使用SSH(Struts2+Spring+Hibernate)打造一个在线网盘系统,本系列教程是从零开始,所以会详细以及着重 ...
随机推荐
- 树莓派3B+通过路由器进SSH和VNC
1.打开树莓派官网 www.raspberrypi.org 选择 ”Raspbian Stretch with desktop and recommended software“ 并下载 镜像包含推荐 ...
- 字符串string 、byte[]、MemoryStream、Base64String的相互转换
1.字符串转比特数组 (1)byte[] bt=System.Text.Encoding.Default.GetBytes("字符串"); (2)byte[] bt=Convert ...
- [Go] golang连接redis测试
go-redis的使用1.下载代码到GOPATH环境变量指定的目录比如我的是进入目录D:\golang\code\src\github.com\go-redis , 执行git clone https ...
- PHP和Go中的闭包变量作用域
关于闭包函数,之前在聊过.这里忽略了一点,不管是Go/Php/Python,闭包都存在局部变量的引用.我们还是先看个例子: PHP示例: $list = []; for ($i = 0; $i < ...
- SSM整合Netty5.0详细说明
阅读本文约“3.2分钟” 最近又有粉丝加Q群讨论netty整合SSM项目的方式等,我在这里抽了休息日的时候整理一下,一步一步的记录,注意的是,本案例仅实现了用netty整合SSM后与单片机等类TCP应 ...
- Java 重建二叉树 根据前序中序重建二叉树
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2, ...
- es6的let,const
1.es6 新增的let const 命令 let用来定义一个局部变量,故名思意就是只在当前代码块可用 1.1 let 声明的变量不存在变量提升(var 声明的变量存在变量提升)且代码块内 暂时性死区 ...
- vue安装element-ui和px2rem的细节
1.按需引入element-ui vue脚手架搭建完成之后,可以到element-ui官网进行npm 安装: npm i element-ui -S 如果是完整引入可以按照官网一步一步做即可完成:这里 ...
- Neutron server的运行原理(未完待续)
1.Neutron server首先是一个web server, 对于http和https协议的报文进行响应. 2.Neutron server进程里面包含了一个WSGI 应用程序,以及不同模块的pl ...
- 模拟ES6中的Promise实现,让原理一目了然
简介 Promise 对象用于延迟(deferred) 计算和异步(asynchronous )计算.一个Promise对象代表着一个还未完成,但预期将来会完成的操作.Promise 对象是一个返回值 ...