SQLquery.addScalar

本文介绍了在Hibernate框架下使用SQLQuery的几种实用技巧,包括如何显式指定返回数据类型及处理多列结果集的方法。

SQLquery.addScalar  

2008-07-18 18:04:55|  分类: 编码心得 |  标签: |举报 |字号 订阅

SQLQuery 还有很多使用价值,例如在处理非 hbm 对象的时候。

 

再举几个实例说明其中几个实用技巧。

 

1, addScalar 显式指定返回数据的类型;以下是代码片段~~

 

 

String sql = "select count(*) as cnt from tblRead" + Misc.formatMoon(year, month) ...

SQLQuery query = session.createSQLQuery(sql);

query.addScalar("cnt", Hibernate.INTEGER);

...

count = (Integer) query.uniqueResult();

2, 返回的结果集是多个列的情况,以下是代码片段~~

String sql = "select day, count(*) as cnt from tblRead" + Misc.formatMoon(year, month) ...

SQLQuery query = session.createSQLQuery(sql);

query.addScalar("day", Hibernate.INTEGER);

query.addScalar("cnt", Hibernate.INTEGER);

...

Iterator results = query.list().iterator();

while (results.hasNext())

{

    Object[] rows = (Object[]) results.next();

    int day = (Integer) rows[0];

    int cnt = (Integer) rows[1];

    ...

}


public synchronized Result transferMaterialFromSAP(String data){ //模拟登录 simulatedLoginService.login(fiConfigure.getUserName(), Long.valueOf(fiConfigure.getCompanyId())); Staff staff = (Staff) getCurrentStaff(); String companyCode = getCurrentCompany().getCode(); String username = getCurrentUser().getUsername(); String staffCode = staff.getCode(); String departMentCode = getCurrentDepartment().getCode(); //301、302、201、202、551接口无论账务如何,全部返回SAP处理成功,MES自己记录失败信息 //请求前记录日志 Long logId = interfaceLog.recordRequestLog("transferMaterialFromSAP", "SAP物料转移", "SAP", "MES", "produce", null, data, null, null); //记录失败日志 interfaceLog.recordResponseLog(logId, Result.success("处理成功!"), false); //查询数据库现存量视图 String cropsViewSql = "select \n" + "\tWLBM 'materialCode', \n" + "\tWLPH 'batch', \n" + "\tXCL 'cropsNum', \n" + "\tCKBM 'wareCode', \n" + "\tHZLC 'soilNum', \n" + "\tHZRQ 'vesselNum', \n" + "\tHZBL 'fillMaterialNum', \n" + "\tHZPL 'bmsetNum', \n" + "\tKYL 'canUseNum' \n" + "from ST_KYL"; List<Object[]> list = interfaceTableDao.createNativeQuery(cropsViewSql) .addScalar("materialCode", StandardBasicTypes.STRING) .addScalar("batch", StandardBasicTypes.STRING) .addScalar("cropsNum", StandardBasicTypes.BIG_DECIMAL) .addScalar("wareCode", StandardBasicTypes.STRING) .addScalar("soilNum", StandardBasicTypes.BIG_DECIMAL) .addScalar("vesselNum", StandardBasicTypes.BIG_DECIMAL) .addScalar("fillMaterialNum", StandardBasicTypes.BIG_DECIMAL) .addScalar("bmsetNum", StandardBasicTypes.BIG_DECIMAL) .addScalar("canUseNum", StandardBasicTypes.BIG_DECIMAL) .list(); List<FICrops> fiCropsList = list.stream().map(e -> { FICrops fiCrops = new FICrops(); fiCrops.setMaterialCode((String) e[0]); fiCrops.setBatch((String) e[1]); fiCrops.setCropsNum((BigDecimal) e[2]); fiCrops.setWareCode((String) e[3]); fiCrops.setSoilNum((BigDecimal) e[4]); fiCrops.setVesselNum((BigDecimal) e[5]); fiCrops.setFillMaterialNum((BigDecimal) e[6]); fiCrops.setBmsetNum((BigDecimal) e[7]); fiCrops.setCanUseNum((BigDecimal) e[8]); return fiCrops; }).collect(Collectors.toList()); ObjectMapper objectMapper = new ObjectMapper(); //忽略未知字段 objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); //忽略大小写 objectMapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true); List<TransferMaterialData> transferMaterialDataList = null; try { transferMaterialDataList = objectMapper.readValue(data, new TypeReference<List<TransferMaterialData>>() { }); } catch (IOException e) { log.info("301、302、201、202、551物料转移数据格式转换失败:" + e.getMessage()); e.printStackTrace(); } for (TransferMaterialData materialData : transferMaterialDataList){ Result result = dealDataUtil.dealTransMaterialData(materialData, companyCode, username, staffCode, departMentCode, fiCropsList); } return Result.success("处理成功!"); }
最新发布
11-05
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值