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
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值