HQL 语句

简介:

/**
 * 
 */
package com.b510.example;

import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.hibernate.Criteria;
import org.hibernate.FetchMode;
import org.hibernate.Hibernate;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.transform.Transformers;

/**
 * 
 * @author XHW
 * 
 * @date 2011-6-18
 * 
 */
public class HibernateTest {

 /**
  * @param args
  */
 public static void main(String[] args) {
  HibernateTest test = new HibernateTest();
  test.nameHQL();
  test.userSQL();
 }


 public void nameHQL(){//命名HQL语句
  //这种方法是要在对应的POJO类的映射文件中添加代码,如:在User.hbm.xml文件中添加以下代码
  //</class>
     //<!-- 命名的    HQL  -->
     //<query name="com.b510.examples.User">           
     //<![CDATA[select u from User u where u.id between :begin and :end]]>
     //</query>
     //</hibernate-mapping>
  Session session=HibernateSessionFactoryUtil.getSessionFactory().openSession();
  session.beginTransaction();
  
  Query query=session.getNamedQuery("com.b510.examples.User");
  query.setInteger("begin", new Integer(1));
  query.setInteger("end", new Integer(5));
  
  List<User> list=query.list();
  for(User user:list){
   System.out.println(user.getId()+user.getUsername());
  }
  session.getTransaction().commit();
 }

 public void userSQL(){//使用sql语句
     //sql语句中用的对象如:user不是POJO 类,而是数据库表名,但是可以转化为 程序中的POJO类,这样我们食用的时候就会很方便,
  Session session=HibernateSessionFactoryUtil.getSessionFactory().openSession();
  session.beginTransaction();
  String sql="select * from user";
  SQLQuery sqlQuery=session.createSQLQuery(sql);
  //转化为pojo类,如果不做转化,则是一个Object[]数组类型,使用起来很不方便
  sqlQuery.addEntity(User.class);
  List<User> list=sqlQuery.list();
  
  for(User user:list){
   System.out.println("ID:  "+user.getId()+"   username:  "+user.getUsername()+"   password:  "+user.getPassword());
  }
  System.out.println("----------------------------------------------");
  //另一种形式的sql语句
  String sqlOther="select p.id,p.email from profile p,user u where p.user_id=u.id";
  sqlQuery=session.createSQLQuery(sqlOther);
  
  sqlQuery.addScalar("id",Hibernate.INTEGER).addScalar("email", Hibernate.STRING);
  sqlQuery.setResultTransformer(Transformers.aliasToBean(Profile.class));
  
  List<Profile> listOther=sqlQuery.list();
  
  for(Profile profile:listOther){
   System.out.println("    ID:  "+profile.getId()+"  Email: "+profile.getEmail());
  }
  
  System.out.println("----------------------------------------------");
  //另一种形式的sql语句,sql语句中使用"?"作为参数的占位符
  String sqlwenhao="select p.id,p.email from profile p,user u where p.user_id=u.id and u.id=?";
  sqlQuery=session.createSQLQuery(sqlwenhao);
  sqlQuery.setInteger(0, new Integer(3));
  sqlQuery.addScalar("id",Hibernate.INTEGER).addScalar("email", Hibernate.STRING);
  sqlQuery.setResultTransformer(Transformers.aliasToBean(Profile.class));
  
  List<Profile> listwenhao=sqlQuery.list();
  
  for(Profile profile:listwenhao){
   System.out.println("    ID:  "+profile.getId()+"  Email: "+profile.getEmail());
  }
  System.out.println("----------------------------------------------");
  //另一种形式的sql语句,sql语句中使用"一个字符名称如:':Hongten'"作为参数的占位符
  String sqlzifu="select p.id,p.email from profile p,user u where p.user_id=u.id and u.id=:Hongten";
  sqlQuery=session.createSQLQuery(sqlzifu);
  sqlQuery.setInteger("Hongten", new Integer(3));
  sqlQuery.addScalar("id",Hibernate.INTEGER).addScalar("email", Hibernate.STRING);
  sqlQuery.setResultTransformer(Transformers.aliasToBean(Profile.class));
  
  List<Profile> listzifu=sqlQuery.list();
  
  for(Profile profile:listzifu){
   System.out.println("    ID:  "+profile.getId()+"  Email: "+profile.getEmail());
  }
  System.out.println("----------------------------------------------");
  //另一种形式的sql语句,这是查询符合条件的全部的数据  
  String sqlquanbu="select {p.*} from profile p,user u where p.user_id=u.id";
  sqlQuery=session.createSQLQuery(sqlquanbu);
  sqlQuery.addEntity("p", Profile.class);
  List<Profile> listquanbu=sqlQuery.list();
  
  for(Profile profile:listquanbu){
   System.out.println("  ID:  "+profile.getUser().getId()+"  Username :"+profile.getUser().getUsername()+"  Email:  "+profile.getEmail()+"  Address:  "+profile.getAddress());
  }
  System.out.println("----------------------------------------------");
  //更新的SQL语句
  String sqlUpdate="update user set username=? where id=?";
  sqlQuery=session.createSQLQuery(sqlUpdate);
  sqlQuery.setString(0, "功夫熊猫2");
  sqlQuery.setInteger(1, new Integer(1));
  int rowCount=sqlQuery.executeUpdate();
  System.out.println("有 "+rowCount+" 条记录被更新!");
  System.out.println("----------------------------------------------");
  //删除的SQL语句
  String sqlDelete="delete from profile where id=?";
  sqlQuery=session.createSQLQuery(sqlDelete);
  sqlQuery.setInteger(0, new Integer(1));
  int rowCountDelete=sqlQuery.executeUpdate();
  System.out.println("有 "+rowCountDelete+" 条记录被删除!"); 
  session.getTransaction().commit();  
 }

}

结果:

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Hibernate: 
    select
        user0_.id as id0_,
        user0_.username as username0_,
        user0_.password as password0_ 
    from
        users.user user0_ 
    where
        user0_.id between ? and ?
1功夫熊猫2
2hanyuan
3hongwei123
4mingliu
5shouzhang
Hibernate: 
    select
        * 
    from
        user
ID:  1   username:  功夫熊猫2   password:  123
ID:  2   username:  hanyuan   password:  5645645
ID:  3   username:  hongwei123   password:  5645645
ID:  4   username:  mingliu   password:  5645645
ID:  5   username:  shouzhang   password:  5645645
----------------------------------------------
Hibernate: 
    select
        p.id,
        p.email 
    from
        profile p,
        user u 
    where
        p.user_id=u.id
    ID:  1  Email: hongtenzone@foxmail.com
    ID:  2  Email: hanyuan@foxmail.com
----------------------------------------------
Hibernate: 
    select
        p.id,
        p.email 
    from
        profile p,
        user u 
    where
        p.user_id=u.id 
        and u.id=?
    ID:  2  Email: hanyuan@foxmail.com
----------------------------------------------
Hibernate: 
    select
        p.id,
        p.email 
    from
        profile p,
        user u 
    where
        p.user_id=u.id 
        and u.id=?
    ID:  2  Email: hanyuan@foxmail.com
----------------------------------------------
Hibernate: 
    select
        p.id as id1_0_,
        p.user_id as user2_1_0_,
        p.email as email1_0_,
        p.phone as phone1_0_,
        p.mobile as mobile1_0_,
        p.address as address1_0_,
        p.postcode as postcode1_0_ 
    from
        profile p,
        user u 
    where
        p.user_id=u.id
  ID:  1  Username :功夫熊猫2  Email:  hongtenzone@foxmail.com  Address:  Guangzhoushi
  ID:  3  Username :hongwei123  Email:  hanyuan@foxmail.com  Address:  GuangzhoushiDianbian
----------------------------------------------
Hibernate: 
    update
        user 
    set
        username=? 
    where
        id=?
有 1 条记录被更新!
----------------------------------------------
Hibernate: 
    delete 
    from
        profile 
    where
        id=?
有 1 条记录被删除!

目录
相关文章
|
9天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
7天前
|
存储 人工智能 Java
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
本文讲解 Prompt 基本概念与 10 个优化技巧,结合学术分析 AI 应用的需求分析、设计方案,介绍 Spring AI 中 ChatClient 及 Advisors 的使用。
355 130
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
|
7天前
|
人工智能 Java API
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
本文介绍AI大模型的核心概念、分类及开发者学习路径,重点讲解如何选择与接入大模型。项目基于Spring Boot,使用阿里云灵积模型(Qwen-Plus),对比SDK、HTTP、Spring AI和LangChain4j四种接入方式,助力开发者高效构建AI应用。
347 122
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
|
20天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1338 8
|
1天前
|
存储 JSON 安全
加密和解密函数的具体实现代码
加密和解密函数的具体实现代码
189 136
|
6天前
|
监控 JavaScript Java
基于大模型技术的反欺诈知识问答系统
随着互联网与金融科技发展,网络欺诈频发,构建高效反欺诈平台成为迫切需求。本文基于Java、Vue.js、Spring Boot与MySQL技术,设计实现集欺诈识别、宣传教育、用户互动于一体的反欺诈系统,提升公众防范意识,助力企业合规与用户权益保护。
|
19天前
|
机器学习/深度学习 人工智能 前端开发
通义DeepResearch全面开源!同步分享可落地的高阶Agent构建方法论
通义研究团队开源发布通义 DeepResearch —— 首个在性能上可与 OpenAI DeepResearch 相媲美、并在多项权威基准测试中取得领先表现的全开源 Web Agent。
1429 87
|
6天前
|
JavaScript Java 大数据
基于JavaWeb的销售管理系统设计系统
本系统基于Java、MySQL、Spring Boot与Vue.js技术,构建高效、可扩展的销售管理平台,实现客户、订单、数据可视化等全流程自动化管理,提升企业运营效率与决策能力。