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 ...
随机推荐
- Oracle性能图表工具:awrcrt.sql 介绍,更新到了2.14 (2018年3月31日更新)
2018-03-31 awrcrt更新到了2.14版本, 下载地址为 https://pan.baidu.com/s/1IlYVrBJuZWwOljomVfta5g https://pan.baidu ...
- Mybatis基于注解实现多表查询
对应的四种数据库表关系中存在四种关系:一对多,多对应,一对一,多对多.在前文中已经实现了xml配置方式实现表关系的查询,本文记录一下Mybatis怎么通过注解实现多表的查询,算是一个知识的补充. 同样 ...
- POJ 3164 Command Network 最小树形图 朱刘算法
=============== 分割线之下摘自Sasuke_SCUT的blog============= 最 小树形图,就是给有向带权图中指定一个特殊的点root,求一棵以root为根的有向生成树T, ...
- CodeForces 311 B Cats Transport 斜率优化DP
题目传送门 题意:现在有n座山峰,现在 i-1 与 i 座山峰有 di长的路,现在有m个宠物, 分别在hi座山峰,第ti秒之后可以被带走,现在有p个人,每个人会从1号山峰走到n号山峰,速度1m/s.现 ...
- CF940A Points on the line 思维
A. Points on the line time limit per test 1 second memory limit per test 256 megabytes input standar ...
- kick start 2019 round D T3题解
---恢复内容开始--- 题目大意:共有N个房子,每个房子都有各自的坐标X[i],占据每个房子需要一定花费C[i].现在需要选择K个房子作为仓库,1个房子作为商店(与题目不同,概念一样),由于仓库到房 ...
- 程序员过关斩将--更加优雅的Token认证方式JWT
菜菜,上次你讲的cookie和session认证方式,我这次面试果然遇到了 结果怎么样? 结果面试官问我还有没有更好的方式? 看来你又挂了 别说了,伤心呀.到底还有没有更好的方式呢? 你猜? 基于To ...
- go 学习笔记之无心插柳柳成荫的接口和无为而治的空接口
如果你还了解编程概念中的接口概念,那么我建议你最好还是先阅读上一篇文章.详情请点击 go 学习笔记之万万没想到宠物店竟然催生出面向接口编程? ,否则的话,请自动忽略上文,继续探索 Go 语言的接口有什 ...
- maven:Fatal error compiling: 无效的目标发行版: 1.8.0_45 -> [Help 1]
使用mvn clean install命令的时候出现如下的错误: Failed to execute goal org.apache.maven.plugins:maven-compiler-plug ...
- 快速了解TCP的流量控制与拥塞控制
有关TCP你不能不知道的三次握手和四次挥手问题,点我跳转 流量控制 1. 滑动窗口 数据的传送过程中很可能出现接收方来不及接收的情况,这时就需要对发送方进行控制以免数据丢失.利用滑动窗口机制可以很方便 ...