Hibernate 中setResultTransformer使用
在使用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使用的更多相关文章
- hibernate中的addEntity setResultTransformer的比较
如果使用原生sql语句进行query查询时,hibernate是不会自动把结果包装成实体的.所以要手动调用addEntity(Class class)等一系列方法. 如session.createSQ ...
- 使用SQLQuery 在Hibernate中使用sql语句
对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取这个接口.下面来描述如何使用这个API进行查询. 1.标量查询(Scalar q ...
- hibernate中 criteria.setProjection(Projections.rowCount()).uniqueResult()为null的Bug
在hibernate中,在查询总数时,会使用如下方法; public Integer getCount(final DetachedCriteria detachedCriteria) { ...
- Hibernate-ORM:14.Hibernate中的命名查询
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客讲述命名查询,所谓命名查询是什么呢? Hibernate中允许我们在xml,实体类,甚至注解的方式来编 ...
- Hibernate中事务的隔离级别设置
Hibernate中事务的隔离级别,如下方法分别为1/2/4/8. 在Hibernate配置文件中设置,设置代码如下
- Hibernate中事务声明
Hibernate中JDBC事务声明,在Hibernate配置文件中加入如下代码,不做声明Hibernate默认就是JDBC事务. 一个JDBC 不能跨越多个数据库. Hibernate中JTA事务声 ...
- Hibernate中的锁机制
锁机制:是数据库为了保证数据的一致性<一个事务的各种操作不相互影响>而使各种共享资源在被并发访问访问变得有序所设计的一种规则,用来保证在当前用户进行操作数据的时候其他的用户不能对同一数据进 ...
- Java三大框架之——Hibernate中的三种数据持久状态和缓存机制
Hibernate中的三种状态 瞬时状态:刚创建的对象还没有被Session持久化.缓存中不存在这个对象的数据并且数据库中没有这个对象对应的数据为瞬时状态这个时候是没有OID. 持久状态:对象经过 ...
- Hibernate 系列 07 - Hibernate中Java对象的三种状态
引导目录: Hibernate 系列教程 目录 1. Java对象的三种状态 当应用通过调用Hibernate API与框架发生交互时,需要从持久化的角度关注应用对象的生命周期. 持久化声明周期是Hi ...
随机推荐
- Elasticsearch核心技术(2)--- 基本概念(Index、Type、Document、集群、节点、分片及副本、倒排索引)
Elasticsearch核心技术(2)--- 基本概念 这篇博客讲到基本概念包括: Index.Type.Document.集群,节点,分片及副本,倒排索引. 一.Index.Type.Docume ...
- Super和This总结
this: this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针. Java关键字this只能用于方法体内.当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自 ...
- springboot-vue前后端分离session过期重新登录
springboot-vue前后端分离session过期重新登录 简单回顾cookie和session cookie和session都是回话管理的方式 Cookie cookie是浏览器端存储信息的一 ...
- 洛谷P1246编码问题-排列组合,分类讨论
编码问题 题意就是a,b,c.....ab.....编码,给你一个字符串,输出这是第几个: 这里可以用暴力枚举,但也可以用组合数学的高超知识: 既然这样我就说一下排列组合的方法,如果要弄一个 各位数字 ...
- Relatively Prime Graph CF1009D 暴力 思维
Relatively Prime Graph time limit per test 2 seconds memory limit per test 256 megabytes input stand ...
- poj 2649 Factovisors 对n!进行因数分解
Factovisors Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4431 Accepted: 1086 Descr ...
- codeforces 919C Seat Arrangements 思维模拟
C. Seat Arrangements time limit per test 1 second memory limit per test 256 megabytes input standard ...
- go Server示例
示例1: package main import ( "fmt" "log" "net/http" "time" ) f ...
- Postgresql-rman
联机程序. 并且目标数据库必须处于归档模式. 支持在线全备, 增量备份, 归档备份 增量备份基于已经存在的一个全库备份 rman 本身使用pg_start_backup(), copy, pg_sto ...
- 学习笔记-Unity3d代码实现Windows10加载圈圈的效果
最近在写一个Unity3d的模仿windows10的桌面的程序,由于Unity3d本身不支持Gif图片,所以突发奇想使用代码来实现接近的. 接下来是代码部分:不一一解析,很简单,看的懂原理就Okly了 ...