分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

hibernate ?hql

发布时间:2023-09-06 01:32责任编辑:赖小花关键词:暂无标签

1.什么是hql

Hibernate Query Language即Hibernate查询语言,面向的是类和属性

下面开始列子

//1.HQL 检索所有学生集合
@org.junit.Test
public void testselectAllDepts(){
???String hql="from Student";
???Query query = session.createQuery(hql);
???List<Student> list = query.list();
???for (Student student:list) {
???????System.out.println(student.getStuname());
???}
}

//2.获取学生的信息
@org.junit.Test
public void testselectSomeRows(){
???String hql="from Student d where d.stuname=‘呵呵‘";
???Query query = session.createQuery(hql);
???List<Student> list = query.list();
???for (Student student:list) {
???????System.out.println(student.getStuname());
???}
}

//3.获取部分列
@org.junit.Test
public void testgetMultiColumns(){
???String hql="select d.stuname from Student d";
???Query query = session.createQuery(hql);
???List<String> list = query.list();
???for (String dept:list) {
???????System.out.println(dept);
???}
}

//3.获取部分列 ?多列 ??List<Objecgt[]>
@Test
public void testgetMultipleColumns(){
???String hql="select d.stuname,d.sage from Student d";
???Query query = session.createQuery(hql);
???List<Object[]> list = query.list();
???for (Object[] dept:list) {
???????for (Object item:dept){
???????????System.out.print(item+"===");
???????}
???????System.out.println();
???}
}

  1.匿名占位符

from Student where stuname = ? 

  2.名称占位符

 from Student where s.stuname = :stuname 

3.绑定命名参数与一个对象的属性值

Session session = HibernateUtil.openSession();

NewsDetail news=new NewsDetail();

news.setNtitle("hibernate");

hibernate 工具类

public class HibernateUtil {

???// 初始化一个ThreadLocal对象
???@SuppressWarnings("rawtypes")
???private static final ThreadLocal sessionTL = new ThreadLocal();
???private static Configuration configuration;
???private final static SessionFactory sessionFactory;
???static {
???????try {
???????????configuration = new Configuration().configure();
???????????sessionFactory = configuration.buildSessionFactory();
???????} catch (Throwable ex) {
???????????throw new ExceptionInInitializerError(ex);
???????}
???}
???public static Session currentSession() {
???????//sessionTL的get()方法根据当前线程返回其对应的线程内部变量,
???????Session session = (Session) sessionTL.get();
???????// 如果session为null,则打开一个新的session
???????if (session == null) {
???????????//创建一个数据库连接对象session。
???????????session = sessionFactory.openSession();
???????????// 保存该数据库连接session到ThreadLocal中。
???????????sessionTL.set(session);
???????}
???????//sessionTL中get()可以获取该线程上次获取过的数据库连接对象。
???????return session;
???}
???/**
????* 关闭Session
????*/
???public static void closeSession(){
???????Session session = (Session) sessionTL.get();
???????sessionTL.set(null);
???????session.close();
???}

hql实现动态查询

1.检索条件的实体属性

//job
private String job;
//salary
private Double sal;

//入职开始时间
private Date fromDate;

//入职结束时间
private Date endDate;

   2.测试

@Test
public void test05() throws ParseException {
???/*准备对象*/
???Electronic ex=new Electronic();
???/*价格小于等于800.0*/
???ex.setPrice(800.0);
??/*准备hql,hql根据条件动态生成*/
StringBuilder stringBuilder=new StringBuilder("from Electronic e where 1=1 "); ????
 /*判断价格是否为空*/
if(ex.getPrice()!=null){
?????stringBuilder.append("and e.price<=:price");
}
/*3. 依据hql构建query对象*/
???Query query=session.createQuery(stringBuilder.toString());
???/*使用query对象的setProperties()方法为参数赋值,empCondition对象中封装了条件*/
???query.setProperties(ex);
???List<Electronic> list = query.list();
???/*遍历*/
???for (Electronic item:list) {
???????System.out.println(item.getEid()+"==="+item.getE_code()+"==="+item.getPrice());
???}
}


分页查询

uniqueResult()获取唯一对象

setFirstResult(int firstResult) 设置返回结果从第几条开始 ---- 索引从0开始

setMaxResults(int maxResults) 设置本次返回结果记录条数 

 

 

@Test
public void selectPageEc(){
???String hql="from Electronic";
???Query query = session.createQuery(hql);
???int pageSize=3;
???int pageIndex=1;
???query.setFirstResult((pageIndex-1)*pageSize); //6
???query.setMaxResults(pageSize);
???List<Electronic> list = query.list();
???for (Electronic item:list) {
???????System.out.println(item.getE_code());
???}
}

 

 

 

hibernate ?hql

原文地址:https://www.cnblogs.com/xuhaifeng017/p/8119365.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved