在使用hibernate框架,查询数据库多张表或者单张表的某几个需要的字段数据时,往往只能通过sql语句配合setResultTransformer将查询到的数据封装到一个map集合中,再将map集合放入list中返回数据。

示例:

控制层:查询还款明细,还款单号、流水号、还款人、还款日期、还款金额//查询还款明细,还款单号、流水号、还款人、还款日期、还款金额
List<Map<String,Object>> list2 = receivableService.findContactwriteoffByBillId(billId);
System.out.println("list2的大小:"+list2);
System.out.println("list2的大小:"+list2.size());
JSONObject jsonTotal2 = new JSONObject();
JSONArray jsonArray2 = new JSONArray();
if(list2.size() != 0){
  for (int i = 0; i < list2.size(); i++) { Object fBillno =list2.get(i).get("fBillno");
Object banktransactionserialno =list2.get(i).get("banktransactionserialno");
Object remitoutbankaccountname =list2.get(i).get("remitoutbankaccountname");
Object operationdatetime =list2.get(i).get("operationdatetime");
Object amount =list2.get(i).get("amount"); JSONObject jsonObject2 = new JSONObject(); jsonObject2.put("fBillno", fBillno);
jsonObject2.put("banktransactionserialno", banktransactionserialno);
jsonObject2.put("remitoutbankaccountname", remitoutbankaccountname);
jsonObject2.put("operationdatetime", operationdatetime);
jsonObject2.put("amount", amount);
jsonArray2.add(jsonObject2); jsonTotal2.put("name", "还款明细");
jsonTotal2.put("options", jsonArray2); } 

 service层查询数据

//查询还款明细,还款单号、流水号、还款人、还款日期、还款金额CONTACTWRITEOFF
@Override
public List<Map<String, Object>> findContactwriteoffByBillId(String billId) {
String sql = "SELECT ff.`billno` fBillno,ff.`banktransactionserialno`,ff.`remitoutbankaccountname`,ff.`operationdatetime`,ff.`amount` "
+" FROM fin_contactwriteoff ff WHERE ff.`csbill` ='"+billId+"'"; Query query = this.getSession().createSQLQuery(sql); query.setResultTransformer(new ResultTransformer() {
private static final long serialVersionUID = 1L; public Object transformTuple(Object[] val, String[] arg1) {
Map<String,Object> m = new HashMap<String,Object>();
m.put("fBillno", val[0]);
m.put("banktransactionserialno", val[1]);
m.put("remitoutbankaccountname", val[2]);
m.put("operationdatetime", val[3]);
m.put("amount", val[4]);
return m;
}
@Override
public List transformList(List arg0) {
return arg0;
}
});
List<Map<String,Object>> list = query.list();
return list;
}

  在控制层查询到的数据做个封装返回到前端即可

注:在使用这种方式时有时会遇到报错的问题,原因是类型不对

//查询账单号,账单金额,还款金额,支付方式,账单生成时间
@Override
public List<Map<String, Object>> findFinContactsummaryByBillId(String billId) {
String sql = "SELECT f.billno,c.companyname,c.executive,f.amount,f.writeoffamount,f.journalizedate FROM core_company c,fin_contactsummary f WHERE c.sysid = f.customer and f.sysid='"+billId+"'";
Query query = this.getSession().createSQLQuery(sql);
List<Map<String, Object>> llList = new ArrayList<Map<String, Object>>();
query.setResultTransformer(new ResultTransformer() {
private static final long serialVersionUID = 1L;
public Object transformTuple(Object[] val, String[] aliases) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("billno", val[0]);
map.put("companyname", val[1]);
map.put("executive", val[2]);
map.put("amount", val[3]);
map.put("writeoffamount", val[4]);
map.put("journalizedate", val[5]);
llList.add(map);
return llList;
}
@Override
public List transformList(List collection) {
return null;
}
});
query.list();
return llList;

 方式二:

	//查询账单号,账单金额,还款金额,支付方式,账单生成时间
@Override
public List<Map<String, Object>> findFinContactsummaryByBillId(String billId) {
String sql = "SELECT f.billno,c.companyname,c.executive,f.amount,f.writeoffamount,f.journalizedate FROM core_company c,fin_contactsummary f WHERE c.sysid = f.customer and f.sysid='"+billId+"'";
Query query = this.getSession().createSQLQuery(sql);
List<Object[]> listm = query.list();
List<Map<String, Object>> list1 =new ArrayList<Map<String, Object>>();
Map<String, Object> m = new HashMap<String, Object>();
for(Object[] s:listm){
m.put("billno", s[0].toString());
m.put("companyname", s[1].toString());
m.put("executive", s[2].toString());
m.put("amount",s[3].toString());
m.put("writeoffamount", s[4].toString());
m.put("journalizedate", s[5].toString());
list1.add(m);
}
return list1;
}

  

 

Hibernate 中setResultTransformer使用的更多相关文章

  1. hibernate中的addEntity setResultTransformer的比较

    如果使用原生sql语句进行query查询时,hibernate是不会自动把结果包装成实体的.所以要手动调用addEntity(Class class)等一系列方法. 如session.createSQ ...

  2. 使用SQLQuery 在Hibernate中使用sql语句

    对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取这个接口.下面来描述如何使用这个API进行查询. 1.标量查询(Scalar q ...

  3. hibernate中 criteria.setProjection(Projections.rowCount()).uniqueResult()为null的Bug

    在hibernate中,在查询总数时,会使用如下方法; public Integer getCount(final DetachedCriteria detachedCriteria) {       ...

  4. Hibernate-ORM:14.Hibernate中的命名查询

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客讲述命名查询,所谓命名查询是什么呢? Hibernate中允许我们在xml,实体类,甚至注解的方式来编 ...

  5. Hibernate中事务的隔离级别设置

    Hibernate中事务的隔离级别,如下方法分别为1/2/4/8. 在Hibernate配置文件中设置,设置代码如下

  6. Hibernate中事务声明

    Hibernate中JDBC事务声明,在Hibernate配置文件中加入如下代码,不做声明Hibernate默认就是JDBC事务. 一个JDBC 不能跨越多个数据库. Hibernate中JTA事务声 ...

  7. Hibernate中的锁机制

    锁机制:是数据库为了保证数据的一致性<一个事务的各种操作不相互影响>而使各种共享资源在被并发访问访问变得有序所设计的一种规则,用来保证在当前用户进行操作数据的时候其他的用户不能对同一数据进 ...

  8. Java三大框架之——Hibernate中的三种数据持久状态和缓存机制

    Hibernate中的三种状态   瞬时状态:刚创建的对象还没有被Session持久化.缓存中不存在这个对象的数据并且数据库中没有这个对象对应的数据为瞬时状态这个时候是没有OID. 持久状态:对象经过 ...

  9. Hibernate 系列 07 - Hibernate中Java对象的三种状态

    引导目录: Hibernate 系列教程 目录 1. Java对象的三种状态 当应用通过调用Hibernate API与框架发生交互时,需要从持久化的角度关注应用对象的生命周期. 持久化声明周期是Hi ...

随机推荐

  1. python批量处理压缩文件

    python批量处理压缩文件 博客小序:在数据的处理中,下载的数据很有可能是许多个压缩文件,自己一个一个解压较为麻烦,最近几日自己在处理一次下载的数据时,遇到大量的压缩数据需要处理,于是利用pytho ...

  2. JDK中的Proxy技术实现AOP功能

    1.需求,用户在执行某个业务方法时我们需要对这个用户进行判断是否具有权限(或者说用户是否登录了)? 例如修改用户信息,我们在update()方法前判断当前用户user是否为null(表示没有权限或者没 ...

  3. bzoj 1085骑士精神

    bzoj 1085骑士精神 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士,且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标相差为2 ...

  4. CodeForces 785 D Anton and School - 2 范德蒙恒等式

    Anton and School - 2 题解: 枚举每个左括号作为必选的. 那么方案数就应该是下面的 1 , 然后不断化简, 通过范德蒙恒等式 , 可以将其化为一个组合数. 代码: #include ...

  5. hdu 4725 The Shortest Path in Nya Graph(建图+优先队列dijstra)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4725 题意:有n个点和n层,m条边,每一层的任意一个点都可以花费固定的值到下一层或者上一层的任意点 然 ...

  6. PAT 天梯杯 L3-008. 喊山 bfs

    L3-008. 喊山 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 喊山,是人双手围在嘴边成喇叭状,对着远方高山发出“喂—喂喂 ...

  7. 树莓派4B NAS系统搭建

    一.硬盘挂载 由于之前硬盘(NTFS格式)里有数据不想格式化想直接挂载,就没有格式化成ext4文件格式的. 安装ntfs-3g sudo apt-get install ntfs-3g 加载内核模块 ...

  8. 深度递归必须知道的尾调用(Lambda)

    引导语 本文从一个递归栈溢出说起,像大家介绍一下如何使用尾调用解决这个问题,以及尾调用的原理,最后还提供一个解决方案的工具类,大家可以在工作中放心用起来. 递归-发现栈溢出 现在我们有个需求,需要计算 ...

  9. R:ggplot2数据可视化——进阶(1)

    ,分为三个部分,此篇为Part1,推荐学习一些基础知识后阅读~ Part 1: Introduction to ggplot2, 覆盖构建简单图表并进行修饰的基础知识 Part 2: Customiz ...

  10. 你该用HTTP2了

    更多内容,欢迎关注微信公众号:全菜工程师小辉.公众号回复关键词,领取免费学习资料. HTTP版本简史 HTTP/0.9: (1991年)基于GET请求的文本传输协议 HTTPS: (1994年)安全的 ...