Java笔记之hibernate(三):HQL
1.概念
HQL是Hibernate Query Language的缩写,是一种面向对象的查询语言,类似于SQL,但不是针对表和列进行操作,而是针对对象和属性.
2.前提
3.添加额外的jar包,并Build Path
4.新建HqlTest类
package com.hibernate.demo.test; import java.util.List; import org.hibernate.Query; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.hibernate.classic.Session; import com.hibernate.demo.bean.Employee; public class HqlTest { public static void main(String[] args) { //加载配置文件,创建会话工厂对象 SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); //创建会话对象 Session session = sessionFactory.openSession(); //调用查询方法 HqlSelect(session,13); //关闭会话对象 session.close(); //关闭会话工厂对象 sessionFactory.close(); } /** * 使用Hql根据id进行查询 * @param session */ private static void HqlSelect(Session session,Integer id){ //编写Hql语句,创建Query对象 Query query = session.createQuery("from Employee emp where emp.empId=?"); query.setInteger(0, id); //获取结果集合 List<Employee> list = query.list(); //如果结果集大小大于0,就获取第一个结果对象 if(list.size()>0){ Employee employee = list.get(0); System.out.println(employee); }else{ System.out.println("没有指定id对应的结果对象"); } } /** * 使用Hql进行模糊查询 * @param session */ private static void HqlSelect2(Session session,String name){ //编写Hql语句,创建Query对象 Query query = session.createQuery("from Employee emp where emp.empName like ?" ); //对指定索引的占位符设置值,索引从0开始 query.setString(0, "%"+name+"%"); //获取结果集合 List<Employee> list = query.list(); //遍历结果集合 for (Employee employee : list) { System.out.println(employee); } } /** * 使用Hql更新指定id对应的信息 * @param session * @param id */ private static void HqlUpdate(Session session,Integer id){ //开启事务 Transaction transaction = session.beginTransaction(); //编写Hql修改语句,获取Query对象 Query query = session.createQuery("update Employee set empName='emp222' where empId=?"); //设置占位符的值 query.setInteger(0, id); //执行修改操作,返回受影响的行数 int num = query.executeUpdate(); System.out.println("影响的行数为:"+num); //提交事务 transaction.commit(); //执行查询 HqlSelect(session, id); } /** * 使用Hql删除指定id对应的信息 * @param session * @param id */ private static void HqlDelete(Session session, Integer id) { //开启事务 Transaction transaction = session.beginTransaction(); //编写Hql删除语句,删除指定id对应的信息 Query query = session.createQuery("delete from Employee where empId=?"); //设置占位符的值 query.setInteger(0, id); //执行修改操作,返回受影响的行数--删除操作也是修改操作的一种,所以也是执行修改操作 int num = query.executeUpdate(); System.out.println("影响的行数为:"+num); //提交事务 transaction.commit(); //执行查询 HqlSelect(session, id); } }
5.调用查询方法并传参---HqlSelect(session,13),运行HqlTest类
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. Hibernate: select employee0_.emp_id as emp1_0_, employee0_.emp_name as emp2_0_ from t_employee employee0_ where employee0_.emp_id=? Employee [empId=13, empName=emp111]
6.调用模糊查询方法并传参---HqlSelect2(session,"小"),运行HqlTest类
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. Hibernate: select employee0_.emp_id as emp1_0_, employee0_.emp_name as emp2_0_ from t_employee employee0_ where employee0_.emp_name like ? Employee [empId=6, empName=小明] Employee [empId=7, empName=小红] Employee [empId=8, empName=小兰] Employee [empId=9, empName=小绿]
7.调用更新方法并传参---HqlUpdate(session, 13),运行HqlTest类
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. Hibernate: update t_employee set emp_name='emp222' where emp_id=? 影响的行数为:1 Hibernate: select employee0_.emp_id as emp1_0_, employee0_.emp_name as emp2_0_ from t_employee employee0_ where employee0_.emp_id=? Employee [empId=13, empName=emp222]
8.调用删除方法并传参---HqlDelete(session, 13),运行HqlTest类
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. Hibernate: delete from t_employee where emp_id=? 影响的行数为:1 Hibernate: select employee0_.emp_id as emp1_0_, employee0_.emp_name as emp2_0_ from t_employee employee0_ where employee0_.emp_id=? 没有指定id对应的结果对象
9.说明
HQL是面向对象的查询语言,insert操作并不会引发任何的查询操作,所有它不能进行insert操作;
update和delete操作都会根据条件先引发查询操作,所以HQL支持update和delete操作;
更不用说select操作了;
分类:
Java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!