Hibernate SQLQuery简单实用,做链接查询

工单里面可能有0个告警,一个或多个告警,当工单中没有告警的时候也需要将工单显示出来,所以就需要使用工单和告警的做链接查询,下面是具体实例

表:

CREATE TABLE `alarm` (
  `id` bigint(20) NOT NULL DEFAULT ‘0‘,
  `title` varchar(20) DEFAULT NULL,
  `level` int(11) DEFAULT NULL,
  `customer_id` bigint(20) DEFAULT NULL,
  `work_sheet_id` bigint(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `work_sheet_id` (`work_sheet_id`),
  CONSTRAINT `alarm_ibfk_1` FOREIGN KEY (`work_sheet_id`) REFERENCES `alarm` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
CREATE TABLE `worksheet` (
  `id` bigint(20) NOT NULL DEFAULT ‘0‘,
  `serialNo` varchar(20) DEFAULT NULL,
  `seatId` bigint(20) DEFAULT NULL,
  `device_id` bigint(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
insert into alarm values(1,‘title‘,‘1‘,‘1‘,‘1‘);
insert into alarm values(2,‘title‘,‘1‘,‘1‘,‘1‘);
insert into alarm values(3,‘title‘,‘1‘,‘1‘,‘1‘);
insert into alarm values(4,‘title‘,‘1‘,‘1‘,‘1‘);
insert into alarm values(5,‘title‘,‘1‘,‘1‘,‘1‘);
insert into alarm values(6,‘title‘,‘1‘,‘1‘,‘1‘);

insert into worksheet values(1,‘serialno‘,1,1);
insert into worksheet values(2,‘serialno‘,1,1);
insert into worksheet values(3,‘serialno‘,1,1);
insert into worksheet values(4,‘serialno‘,1,1);
insert into worksheet values(5,‘serialno‘,1,1);
insert into worksheet values(6,‘serialno‘,1,1);

存放SQL文件的接口

package com.h3c.zgc;

public interface SQL {

    public static final String SELECT_WORKSHEET_LEFT_JOIN_ALARM = "select w.serialNo workSheetSerialNo,a.title title,a.level level,a.id alarmId from worksheet w left join alarm a on w.id=a.work_sheet_id where w.id=?";

}

dao层:将连接查询的数据转换成map对象放入list中

package com.h3c.zgc;

import java.util.List;
import javax.annotation.Resource;

import org.hibernate.SQLQuery;
import org.hibernate.SessionFactory;
import org.hibernate.transform.Transformers;
import org.springframework.orm.hibernate4.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;

import com.h3c.zgc.alarm.WorkSheet;

@Repository
public class WorkSheetDao extends HibernateDaoSupport {
    @Resource
    private void set(SessionFactory sessionFactory) {
        this.setSessionFactory(sessionFactory);
    }

    public List getWorkSheets(Long worksheetId) {
        SQLQuery sqlQuery = this
                .getSessionFactory()
                .openSession()
                .createSQLQuery(
                        SQL.SELECT_WORKSHEET_LEFT_JOIN_ALARM);
        sqlQuery.setParameter(0, worksheetId);
        sqlQuery.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
        return sqlQuery.list();
    }

    public WorkSheet getWorkSheet() {
        SQLQuery sqlQuery = this.getSessionFactory().openSession()
                .createSQLQuery("select* from worksheet where id=1")
                .addEntity(WorkSheet.class);
        List<WorkSheet> list = sqlQuery.list();
        return list.get(0);
    }
}

service层:

package com.h3c.zgc;

import java.util.Map;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

@Service
public class WorkSheetService {
    @Resource
    private WorkSheetDao workSheetDao;
    public Map<String, Object> getWorkSheet(Long worksheetId){
        return  (Map<String, Object>) workSheetDao.getWorkSheets(worksheetId).get(0);
    }
}

controller层

package com.h3c.zgc;

import java.util.Map;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class WorkSheetController {
    @Resource
    private WorkSheetService workSheetService;

    @RequestMapping("getArr")
    public String toGetArr(Long workSheetId,HttpServletRequest request){
        Map<String, Object> o = this.workSheetService.getWorkSheet(workSheetId);
        System.out.println(o.get("alarmId")==null);
        if(o.get("alarmId")==null){
            o.put("alarmId", 0);
        }
        request.setAttribute("obj",o);
        return "test/getWorkSheet";

    }
}

在页面中获取数据

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
${obj[‘workSheetSerialNo‘] } ,${obj[‘alarmId‘] },${obj[‘title‘] },${obj[‘level‘] }
<c:if test="${obj[‘alarmId‘]==0 }">告警不存在</c:if>
</body>
</html>
时间: 2024-10-13 22:53:15

Hibernate SQLQuery简单实用,做链接查询的相关文章

Hibernate SQLQuery原生SQL查询

使用Hibernate SQLQuery进行查询时,如果有两个列的列明相同,那么在取值时,Hibernate会取第一个同名列的值(在SQLPlus中会自动在列明后面跟上写字符进行区分).如: 1.SQL语句 SELECT * FROM (SELECT 'A' A, 'B' B FROM DUAL) TEMP_A, (SELECT 'C' A, 'D' B FROM DUAL) TEMP_B 2.Sqlplus查询结果: 3.Hibernate SQLQuery查询结果:

Hibernate - SQLQuery

使用SQLQuery 对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取这个接口.下面来描述如何使用这个API进行查询. 标量查询(Scalar queries) 最基本的SQL查询就是获得一个标量(数值)的列表. sess.createSQLQuery("SELECT * FROM CATS").list(); sess.createSQLQuery("SELECT ID, NAME, BIRTHDATE

Hibernate框架简单应用

Hibernate框架简单应用 Hibernate的核心组件在基于MVC设计模式的JAVA WEB应用中,Hibernate可以作为模型层/数据访问层.它通过配置文件(hibernate.properties或hibernate.cfg.xml)和映射文件(***.hbm.xml)把JAVA对象或PO(Persistent Object,持久化对象)映射到数据库中的数据库,然后通过操作PO,对数据表中的数据进行增,删,改,查等操作.除配置文件,映射文件和持久化类外,Hibernate的核心组件包

45个很实用的 Oracle 查询语句小结

?? 这里我们介绍的是 40+ 个很实用的 Oracle 查询语句,主要涵盖了日期操作,获取server信息.获取运行状态.计算数据库大小等等方面的查询. 这些是全部 Oracle 开发人员都必备的技能,所以快快收藏吧. 原文地址:http://www.jbxue.com/db/19890.html 日期/时间 相关查询 1.获取当前月份的第一天 执行这个命令能高速返回当前月份的第一天.你能够用不论什么的日期值替换 "SYSDATE"来指定查询的日期. 复制代码代码例如以下: SELE

通过Java反射做实体查询

我们在使用hibernate的时候,查询的时候都会和实体中的一些字段相结合去查询,当然字段少了,还算是比较简单,当字段多了,就不那么容易了,所以就自己写了个方法,根据实体中的字段信息去查询,废话不多说上代码: /** * 根据实体查询,将所有的参数封装到实体中查询即可,不可查询为null的信息 * @param t * @return * @throws SecurityException * @throws NoSuchMethodException * @throws IllegalArgu

简单实用的PHP防注入类实例

这篇文章主要介绍了简单实用的PHP防注入类实例,以两个简单的防注入类为例介绍了PHP防注入的原理与技巧,对网站安全建设来说非常具有实用价值,需要的朋友可以参考下 本文实例讲述了简单实用的PHP防注入类.分享给大家供大家参考.具体如下: PHP防注入注意要过滤的信息基本是get,post,然后对于sql就是我们常用的查询,插入等等sql命令了,下面我给各位整理两个简单的例子,希望这些例子能给你网站带来安全. PHP防注入类代码如下: 复制代码 代码如下: <?php /**  * 参数处理类  *

微信公众平台之超简单实用的天气预报后台实现

微信公众平台之超简单实用的天气预报后台实现 概述,前段时间我在开发一个自己的微信公众平台,需要实现天气预报功能,在网上度娘了下,实现天气预报的接口API还蛮多的,有:中国气象局.雅虎和新浪等,中国天气预报接口需要全国的编码,雅虎的有时候访问不了,研究了下还是新浪提供的接口比较简单实用.新浪天气预报API的URL是http://php.weather.sina.com.cn/xml.php?city=%B1%B1%BE%A9&password=DJOYnieT8234jlsK&day=0.其

简单实用的CSS网页布局中文排版技巧

由于汉字的特殊性,在css网页布局中,中文排版有别于英文排版.排版是一个麻烦的问题,小编认为,作为一个优秀的网页设计师和网页制作人员,掌握一些简单的中文排版技巧是不可或缺的,所以今天特意总结了几个简单实用的技巧,希望对大家有所帮助. 一.如何设定文字字体.颜色.大小等 font-style设定斜体,比如font-style:italic font-weight设定文字粗细,比如font-weight:bold font-size设定文字大小,比如font-size:12px line-heigh

Hibernate的Api以及三种查询方式

Hibernate  Api |-- Configuration       配置管理类对象 config.configure();    加载主配置文件的方法(hibernate.cfg.xml) 默认加载src/hibernate.cfg.xml config.configure("cn/config/hibernate.cfg.xml");   加载指定路径下指定名称的主配置文件 config.buildSessionFactory();   创建session的工厂对象 |--