Hibernate中常用的查询方法

Hibernate完成基础的CRUD操作后,总结一下在hibernate中常用的查询方法

之前写的简单hibernate简单CRUD的地址https://blog.csdn.net/weixin_39789506/article/details/107063092

接上篇,上篇中只是写了hibernate完成最基本的crud操作.

package com.ren.test;

import static org.junit.jupiter.api.Assertions.*;

import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.LogicalExpression;
import org.hibernate.criterion.Restrictions;
import org.hibernate.criterion.SimpleExpression;
import org.hibernate.query.NativeQuery;
import org.hibernate.query.Query;
import org.junit.jupiter.api.Test;
import com.ren.domain.User;
import com.ren.util.SessionUtils;

public class UserQueryTest {

	// 方式1 ,查询单个对象,使用session的get方法
	@Test
	void testGet() throws Exception {
		Session session = SessionUtils.getSession();

		User user = session.get(User.class, 1L);
		System.out.println(user);

		session.close();
	}

	// 方式2 , 查询单个对象使用session的find方法
	@Test
	void testGet2() throws Exception {
		Session session = SessionUtils.getSession();

		// 参数1表示将结果封装成什么类型的对象,1L表示要查询的对象的id
		User user = session.find(User.class, 1L);
		System.out.println(user);
		session.close();
	}

	// 方式3, 使用HQL的方式, 这种方式是面向对象的查询语言
	// 使用session的createQuery方法
	@Test
	void testGet3() throws Exception {
		Session session = SessionUtils.getSession();

		Query<User> query = session.createQuery("FROM User", User.class);
		List<User> us = query.list();
		for (User user : us) {
			System.out.println(user);
		}
		session.close();
	}
	
	// 方式4.
	// 带条件的查询, HQL 支持类似占位符(?)形式的条件查询
	// 查询年龄在23和29岁之间的用户信息
	@SuppressWarnings("deprecation")
	@Test
	void testGetByConditions() throws Exception {
		Session session = SessionUtils.getSession();

		Query<User> query = session.createQuery("FROM User WHERE age >?1 and age < ?2", User.class);
		query.setParameter(1, 23);
		query.setParameter(2, 29);

		query.list().forEach(System.out::println);
		session.close();
	}
	
	// 方式5. 使用本地SQL查询
	@SuppressWarnings("deprecation")
	@Test
	void testLocalSql() throws Exception {
		Session session = SessionUtils.getSession();
		NativeQuery entity = session.createSQLQuery("SELECT * FROM User").addEntity(User.class);
		entity.list().forEach(System.out::println);
		session.close();
	}
	
	// ORDER By排序操作 , 按照年龄降序排序
	@Test
	void testOrderBy() throws Exception {
		Session session = SessionUtils.getSession();
		
		Query<User> query = session.createQuery("FROM User Order By age Desc",User.class);
		query.list().forEach(System.out::println);
		session.close();
	}
	
	// 方式6,使用标准查询 , Criteria(标准,条件的意思)表示特定持久类的一个查询,Restrictions类用来拼接查询条件
	@Test
	void testQuery() throws Exception {
		Session session = SessionUtils.getSession();
		Criteria criteria = session.createCriteria(User.class);
		
		//  创建查询条件,意思是查询 age = 24的用户信息
//		SimpleExpression eq = Restrictions.eq("age", 24);
//		criteria.add(eq);
		
		// and连接 查询年龄在23岁到30岁之间的用户信息
//		SimpleExpression lowAge = Restrictions.gt("age", 23);
//		SimpleExpression hiAge = Restrictions.lt("age", 30);
//		LogicalExpression andExp = Restrictions.and(lowAge, hiAge);
//		criteria.add(andExp); // 添加查询条件
		
		// or 连接, 查询name属性中包含三或者四的用户信息
//		SimpleExpression name = Restrictions.like("name", "%三%");
//		SimpleExpression name2 = Restrictions.like("name", "%四%");
//		LogicalExpression orExpre = Restrictions.or(name, name2);
//		criteria.add(orExpre);
		
		// between  查询年龄在23到30岁之间的员工信息
		SimpleExpression loAge = Restrictions.gt("age", 23);
		SimpleExpression hiAge = Restrictions.lt("age", 30);
		LogicalExpression between = Restrictions.and(loAge,hiAge);
		criteria.add(between);
		
		List list = criteria.list();
		for (Object object : list) {
			System.out.println(object);
		}
		session.close();
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用 Hibernate 的关联映射来执行多表查询。以下是几种常见的方法: 1. 使用 HQL(Hibernate Query Language)进行关联查询:可以使用 HQL 编写一个包含多个实体的查询语句,并使用 JOIN 或 FETCH 关键字来指定关联关系。例如: ```java String hql = "SELECT p FROM Person p JOIN p.address a WHERE a.city = :city"; List<Person> persons = session.createQuery(hql) .setParameter("city", "London") .list(); ``` 2. 使用 Criteria API 进行关联查询:Criteria API 提供了一种面向对象的查询方式,可以通过创建 Criteria 对象来构建查询条件和关联关系。例如: ```java CriteriaBuilder builder = session.getCriteriaBuilder(); CriteriaQuery<Person> query = builder.createQuery(Person.class); Root<Person> personRoot = query.from(Person.class); Join<Person, Address> addressJoin = personRoot.join("address"); query.where(builder.equal(addressJoin.get("city"), "London")); List<Person> persons = session.createQuery(query).getResultList(); ``` 3. 使用注解配置关联关系:可以在实体类使用注解来配置关联关系,然后使用 Criteria API 或者 HQL 来执行查询。例如: ```java @Entity public class Person { // ... @ManyToOne @JoinColumn(name = "address_id") private Address address; // getters and setters } ``` 这样配置之后,你可以使用 Criteria API 或者 HQL 来进行查询。 这些是 Hibernate 执行多表查询的几种常见方法,你可以根据自己的需求选择适合的方法。希望对你有帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值