在使用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. ConcurrentLinkedQueue 源码解读

    一.介绍 ConcurrentLinkedQueue 是一个基于链接节点的无界线程安全队列,它采用先进先出的规则对节点进行排序,当我们添加一个元素的时候,它会添加到队列的尾部:当我们获取一个元素时,它 ...

  2. ABP虚拟文件系统(VirtualFileSystem)实例------定制菜单栏显示用户姓名

    ABP默认的MVC启动模板在登录后, 右上角显示的是用户名: 如果想让它显示用户的姓名该如何做呢?这就需要用到ABP一个非常强大的功能------虚拟文件系统. 前期准备 使用ABP CLI创建一个名 ...

  3. 剑指Offer(二十八):数组中出现次数超过一半的数字

    剑指Offer(二十八):数组中出现次数超过一半的数字 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn. ...

  4. 【系统解读】SystemUI篇(一)SystemUI启动流程

    前言 SystemUI是系统启动中第一个用户肉眼可见的应用,其功能包罗万象,比如开机后看到的锁屏界面,充电时充电界面,状态栏,导航栏,多任务栏等,都是与Android手机用户息息相关的功能.所以不止S ...

  5. HDU-DuoXiao第二场hdu 6315 Naive Operations 线段树

    hdu 6315 题意:对于一个数列a,初始为0,每个a[ i ]对应一个b[i],只有在这个数字上加了b[i]次后,a[i]才会+1. 有q次操作,一种是个区间加1,一种是查询a的区间和. 思路:线 ...

  6. lightoj 1084 - Winter(dp+二分+线段树or其他数据结构)

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1084 题解:不妨设dp[i] 表示考虑到第i个点时最少有几组那么 if a[i ...

  7. 杭电多校第九场 D Rikka with Stone-Paper-Scissors 数学

    Rikka with Stone-Paper-Scissors Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 524288/52428 ...

  8. KDTree 板子

    从杨哥哪里偷的板子, 存一下. #include<bits/stdc++.h> using namespace std; #define Fopen freopen("_in.t ...

  9. KubeSphere CI/CD+GitLab+Harbor将Spring Boot项目部署至Kubernetes

    上一篇文章分享了如何在 KubeSphere 对公共的代码仓库 GitHub 和镜像仓库 DockerHub 创建流水线,本文将继续使用 KubeSphere,基于 Harbor 和 GitLab 创 ...

  10. hotcss.js Flexible 移动端适配在dpr=2和dpr=3出现的字体大小设置不正确问题.

    这段时间一直在用hotcss做移动端适配,做了几个页面没有发现什么问题,后来老大要加快进度,我把项目分出一块给另一个同事做,她发现了一个问题就是字体在dpr=2,dpr=3,的设备上字体大小显示老是不 ...