Hibernate之查询方式

1.Query



【查询所有】

QueryTest1.java

package zh.hibernate.test;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

import zh.hibernate.entity.User;
import zh.hibernate.utils.HibernateUtils;

public class QueryTest1 {

	public static void main(String[] args) {

		SessionFactory sessionFactory = null;
		Session session = null;
		Transaction transaction = null;
		try {
			sessionFactory = HibernateUtils.getSessionFactory();
			session = sessionFactory.openSession();
			transaction = session.beginTransaction();// 开启事务
			/**
			 * 查询所有
			 */
			Query query = session.createQuery("from User");
			List<User> userList = query.list();
			for(User user : userList){
				System.out.println(user);
			}
			
			transaction.commit();// 提交事务
		} catch (Exception e) {
			transaction.rollback();// 回滚事务
		} finally {
			session.close();// 关闭session
			sessionFactory.close();// 实际开发中,不需要关闭
		}

	}

}

【条件查询1】

?作为参数,索引从0开始。

QueryTest2.java

package zh.hibernate.test;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

import zh.hibernate.entity.User;
import zh.hibernate.utils.HibernateUtils;

public class QueryTest2 {

	public static void main(String[] args) {

		SessionFactory sessionFactory = null;
		Session session = null;
		Transaction transaction = null;
		try {
			sessionFactory = HibernateUtils.getSessionFactory();
			session = sessionFactory.openSession();
			transaction = session.beginTransaction();// 开启事务
			/**
			 * 条件查询
			 */
			Query query = session.createQuery("from User where username=?");
			//Query query = session.createQuery("from User u where u.username=?");// 或者起别名
			query.setParameter(0, "小龙女");// ?从索引0开始
			User user = (User) query.uniqueResult();// 单结果查询
			System.out.println(user);
			
			transaction.commit();// 提交事务
		} catch (Exception e) {
			transaction.rollback();// 回滚事务
		} finally {
			session.close();// 关闭session
			sessionFactory.close();// 实际开发中,不需要关闭
		}

	}

}

【条件查询2】

:x形式,x作为参数。

package zh.hibernate.test;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

import zh.hibernate.entity.User;
import zh.hibernate.utils.HibernateUtils;

public class QueryTest3 {

	public static void main(String[] args) {

		SessionFactory sessionFactory = null;
		Session session = null;
		Transaction transaction = null;
		try {
			sessionFactory = HibernateUtils.getSessionFactory();
			session = sessionFactory.openSession();
			transaction = session.beginTransaction();// 开启事务
			/**
			 * 条件查询2
			 */
			Query query = session.createQuery("from User where uid=:x and username=:y");
			query.setInteger("x", 4);// 为参数x赋值
			query.setString("y", "小龙女");// 为参数y赋值
			User user = (User) query.uniqueResult();// 单结果查询
			System.out.println(user);
			
			transaction.commit();// 提交事务
		} catch (Exception e) {
			transaction.rollback();// 回滚事务
		} finally {
			session.close();// 关闭session
			sessionFactory.close();// 实际开发中,不需要关闭
		}

	}

}

【模糊查询】

QueryTest4.java

package zh.hibernate.test;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

import zh.hibernate.entity.User;
import zh.hibernate.utils.HibernateUtils;

public class QueryTest4 {

	public static void main(String[] args) {

		SessionFactory sessionFactory = null;
		Session session = null;
		Transaction transaction = null;
		try {
			sessionFactory = HibernateUtils.getSessionFactory();
			session = sessionFactory.openSession();
			transaction = session.beginTransaction();// 开启事务
			/**
			 * 模糊查询
			 */
			Query query = session.createQuery("from User where username like ?");
			query.setParameter(0, "%蓉%");
			List<User> userList = query.list();
			for(User user : userList){
				System.out.println(user);
			}
			
			transaction.commit();// 提交事务
		} catch (Exception e) {
			transaction.rollback();// 回滚事务
		} finally {
			session.close();// 关闭session
			sessionFactory.close();// 实际开发中,不需要关闭
		}

	}

}

【排序查询】

QueryTest5.java

package zh.hibernate.test;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

import zh.hibernate.entity.User;
import zh.hibernate.utils.HibernateUtils;

public class QueryTest5 {

	public static void main(String[] args) {

		SessionFactory sessionFactory = null;
		Session session = null;
		Transaction transaction = null;
		try {
			sessionFactory = HibernateUtils.getSessionFactory();
			session = sessionFactory.openSession();
			transaction = session.beginTransaction();// 开启事务
			/**
			 * 排序查询
			 */
			Query query = session.createQuery("from User order by uid desc");// 降序
			List<User> userList = query.list();
			for(User user : userList){
				System.out.println(user);
			}
			
			transaction.commit();// 提交事务
		} catch (Exception e) {
			transaction.rollback();// 回滚事务
		} finally {
			session.close();// 关闭session
			sessionFactory.close();// 实际开发中,不需要关闭
		}

	}

}

【分页查询】

QueryTest6.java

package zh.hibernate.test;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

import zh.hibernate.entity.User;
import zh.hibernate.utils.HibernateUtils;

public class QueryTest6 {

	public static void main(String[] args) {

		SessionFactory sessionFactory = null;
		Session session = null;
		Transaction transaction = null;
		try {
			sessionFactory = HibernateUtils.getSessionFactory();
			session = sessionFactory.openSession();
			transaction = session.beginTransaction();// 开启事务
			/**
			 * 分页查询
			 */
			Query query = session.createQuery("from User");
			query.setFirstResult(0);// 从表的第一行开始
			query.setMaxResults(2);// 查询2条记录
			List<User> userList = query.list();// 多结果查询
			for(User user : userList){
				System.out.println(user);
			}
			
			transaction.commit();// 提交事务
		} catch (Exception e) {
			transaction.rollback();// 回滚事务
		} finally {
			session.close();// 关闭session
			sessionFactory.close();// 实际开发中,不需要关闭
		}

	}

}

【投影查询】

QueryTest7.java

package zh.hibernate.test;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

import zh.hibernate.utils.HibernateUtils;

public class QueryTest7 {

	public static void main(String[] args) {

		SessionFactory sessionFactory = null;
		Session session = null;
		Transaction transaction = null;
		try {
			sessionFactory = HibernateUtils.getSessionFactory();
			session = sessionFactory.openSession();
			transaction = session.beginTransaction();// 开启事务
			/**
			 * 投影查询
			 */
			Query query = session.createQuery("select username from User");
			List<Object> list = query.list();
			for(Object obj : list){
				System.out.println(obj);
			}
			
			transaction.commit();// 提交事务
		} catch (Exception e) {
			transaction.rollback();// 回滚事务
		} finally {
			session.close();// 关闭session
			sessionFactory.close();// 实际开发中,不需要关闭
		}

	}

}

【聚合函数】

QueryTest8.java

package zh.hibernate.test;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

import zh.hibernate.utils.HibernateUtils;

public class QueryTest8 {

	public static void main(String[] args) {

		SessionFactory sessionFactory = null;
		Session session = null;
		Transaction transaction = null;
		try {
			sessionFactory = HibernateUtils.getSessionFactory();
			session = sessionFactory.openSession();
			transaction = session.beginTransaction();// 开启事务
			/**
			 * 聚合函数
			 */
			Query query = session.createQuery("select count(*) from User");
			Object result = query.uniqueResult();// 查询结果实际是Long类型
			Long count = (Long) result;
			System.out.println(count);
			
			transaction.commit();// 提交事务
		} catch (Exception e) {
			transaction.rollback();// 回滚事务
		} finally {
			session.close();// 关闭session
			sessionFactory.close();// 实际开发中,不需要关闭
		}

	}

}

2.Criteria


【查询所有】

CriteriaTest1.java

package zh.hibernate.test;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

import zh.hibernate.entity.User;
import zh.hibernate.utils.HibernateUtils;

public class CriteriaTest1 {

	public static void main(String[] args) {

		SessionFactory sessionFactory = null;
		Session session = null;
		Transaction transaction = null;
		try {
			sessionFactory = HibernateUtils.getSessionFactory();
			session = sessionFactory.openSession();
			transaction = session.beginTransaction();// 开启事务
			/**
			 * 查询所有
			 */
			Criteria criteria = session.createCriteria(User.class);
			List<User> userList = criteria.list();
			for(User user : userList){
				System.out.println(user);
			}
			
			transaction.commit();// 提交事务
		} catch (Exception e) {
			transaction.rollback();// 回滚事务
		} finally {
			session.close();// 关闭session
			sessionFactory.close();// 实际开发中,不需要关闭
		}

	}

}

【条件查询】

CriteriaTest2.java

package zh.hibernate.test;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

import zh.hibernate.entity.User;
import zh.hibernate.utils.HibernateUtils;

public class CriteriaTest2 {

	public static void main(String[] args) {

		SessionFactory sessionFactory = null;
		Session session = null;
		Transaction transaction = null;
		try {
			sessionFactory = HibernateUtils.getSessionFactory();
			session = sessionFactory.openSession();
			transaction = session.beginTransaction();// 开启事务
			/**
			 * 条件查询
			 */
			Criteria criteria = session.createCriteria(User.class);
			criteria.add(Restrictions.eq("uid", 4));// 添加条件:属性uid=4
			criteria.add(Restrictions.eq("username", "小龙女"));// 添加条件:属性username=小龙女
			User user = (User) criteria.uniqueResult();
			System.out.println(user);
			
			transaction.commit();// 提交事务
		} catch (Exception e) {
			transaction.rollback();// 回滚事务
		} finally {
			session.close();// 关闭session
			sessionFactory.close();// 实际开发中,不需要关闭
		}

	}

}

【模糊查询】

CriteriaTest3.java

package zh.hibernate.test;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

import zh.hibernate.entity.User;
import zh.hibernate.utils.HibernateUtils;

public class CriteriaTest3 {

	public static void main(String[] args) {

		SessionFactory sessionFactory = null;
		Session session = null;
		Transaction transaction = null;
		try {
			sessionFactory = HibernateUtils.getSessionFactory();
			session = sessionFactory.openSession();
			transaction = session.beginTransaction();// 开启事务
			/**
			 * 条件查询
			 */
			Criteria criteria = session.createCriteria(User.class);
			criteria.add(Restrictions.like("username", "%龙%"));// 添加条件:属性username like '%龙%'
			List<User> userList = criteria.list();
			System.out.println(userList);
			
			transaction.commit();// 提交事务
		} catch (Exception e) {
			transaction.rollback();// 回滚事务
		} finally {
			session.close();// 关闭session
			sessionFactory.close();// 实际开发中,不需要关闭
		}

	}

}

【分页查询】

CriteriaTest4.java

package zh.hibernate.test;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

import zh.hibernate.entity.User;
import zh.hibernate.utils.HibernateUtils;

public class CriteriaTest4 {

	public static void main(String[] args) {

		SessionFactory sessionFactory = null;
		Session session = null;
		Transaction transaction = null;
		try {
			sessionFactory = HibernateUtils.getSessionFactory();
			session = sessionFactory.openSession();
			transaction = session.beginTransaction();// 开启事务
			/**
			 * 分页查询
			 */
			Criteria criteria = session.createCriteria(User.class);
			criteria.setFirstResult(0);// 从表的第一行开始
			criteria.setMaxResults(3);// 查询3条记录
			List<User> userList = criteria.list();
			for(User user : userList){
				System.out.println(user);
			}
			
			transaction.commit();// 提交事务
		} catch (Exception e) {
			transaction.rollback();// 回滚事务
		} finally {
			session.close();// 关闭session
			sessionFactory.close();// 实际开发中,不需要关闭
		}

	}

}

【排序查询】

CriteriaTest5.java

package zh.hibernate.test;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.criterion.Order;

import zh.hibernate.entity.User;
import zh.hibernate.utils.HibernateUtils;

public class CriteriaTest5 {

	public static void main(String[] args) {

		SessionFactory sessionFactory = null;
		Session session = null;
		Transaction transaction = null;
		try {
			sessionFactory = HibernateUtils.getSessionFactory();
			session = sessionFactory.openSession();
			transaction = session.beginTransaction();// 开启事务
			/**
			 * 排序查询
			 */
			Criteria criteria = session.createCriteria(User.class);
			criteria.addOrder(Order.desc("uid"));// 按照uid降序
			List<User> userList = criteria.list();
			for(User user : userList){
				System.out.println(user);
			}
			
			transaction.commit();// 提交事务
		} catch (Exception e) {
			transaction.rollback();// 回滚事务
		} finally {
			session.close();// 关闭session
			sessionFactory.close();// 实际开发中,不需要关闭
		}

	}

}

【统计查询】

CriteriaTest6.java

package zh.hibernate.test;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.criterion.Projections;

import zh.hibernate.entity.User;
import zh.hibernate.utils.HibernateUtils;

public class CriteriaTest6 {

	public static void main(String[] args) {

		SessionFactory sessionFactory = null;
		Session session = null;
		Transaction transaction = null;
		try {
			sessionFactory = HibernateUtils.getSessionFactory();
			session = sessionFactory.openSession();
			transaction = session.beginTransaction();// 开启事务
			/**
			 * 统计查询
			 */
			Criteria criteria = session.createCriteria(User.class);
			criteria.setProjection(Projections.rowCount());//查询有多少行
			Object result = criteria.uniqueResult();
			Long count = (Long)result;
			System.out.println(count);
			
			transaction.commit();// 提交事务
		} catch (Exception e) {
			transaction.rollback();// 回滚事务
		} finally {
			session.close();// 关闭session
			sessionFactory.close();// 实际开发中,不需要关闭
		}

	}

}

【离线查询】

CriteriaTest7.java

package zh.hibernate.test;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.criterion.DetachedCriteria;

import zh.hibernate.entity.User;
import zh.hibernate.utils.HibernateUtils;

public class CriteriaTest7 {

	public static void main(String[] args) {

		SessionFactory sessionFactory = null;
		Session session = null;
		Transaction transaction = null;
		try {
			sessionFactory = HibernateUtils.getSessionFactory();
			session = sessionFactory.openSession();
			transaction = session.beginTransaction();// 开启事务
			/**
			 * 离线查询方式
			 */
			DetachedCriteria detachedCriteria = DetachedCriteria.forClass(User.class);
			Criteria criteria = detachedCriteria.getExecutableCriteria(session);
			List<User> userList = criteria.list();
			for(User user : userList){
				System.out.println(user);
			}
			
			transaction.commit();// 提交事务
		} catch (Exception e) {
			transaction.rollback();// 回滚事务
		} finally {
			session.close();// 关闭session
			sessionFactory.close();// 实际开发中,不需要关闭
		}

	}

}

3.SQLQuery


SQLQueryTest1.java

package zh.hibernate.test;

import java.util.Arrays;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

import zh.hibernate.entity.User;
import zh.hibernate.utils.HibernateUtils;

public class SQLQueryTest1 {

	public static void main(String[] args) {

		SessionFactory sessionFactory = null;
		Session session = null;
		Transaction transaction = null;
		try {
			sessionFactory = HibernateUtils.getSessionFactory();
			session = sessionFactory.openSession();
			transaction = session.beginTransaction();// 开启事务
			
			SQLQuery sqlQuery = session.createSQLQuery("select * from t_user where uid >1");
			List<Object[]> list = sqlQuery.list();// 数组 形式的结果
			for(Object[] array : list){
				System.out.println(Arrays.toString(array));
			}
			
			transaction.commit();// 提交事务
		} catch (Exception e) {
			transaction.rollback();// 回滚事务
		} finally {
			session.close();// 关闭session
			sessionFactory.close();// 实际开发中,不需要关闭
		}

	}

}

SQLQueryTest2.java

package zh.hibernate.test;

import java.util.List;

import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

import zh.hibernate.entity.User;
import zh.hibernate.utils.HibernateUtils;

public class SQLQueryTest2 {

	public static void main(String[] args) {

		SessionFactory sessionFactory = null;
		Session session = null;
		Transaction transaction = null;
		try {
			sessionFactory = HibernateUtils.getSessionFactory();
			session = sessionFactory.openSession();
			transaction = session.beginTransaction();// 开启事务
			
			SQLQuery sqlQuery = session.createSQLQuery("select * from t_user where uid >1");
			
			// 调用此方法,便会将数组形式的结果封装到对象中
			sqlQuery.addEntity(User.class);
			
			List<User> userList = sqlQuery.list();
			for(User user : userList){
				System.out.println(user);
			}
			
			transaction.commit();// 提交事务
		} catch (Exception e) {
			transaction.rollback();// 回滚事务
		} finally {
			session.close();// 关闭session
			sessionFactory.close();// 实际开发中,不需要关闭
		}

	}

}

4.多表查询

内连接:查询结果每一行是数组
迫切内连接:查询结果每一行是对象。

左外连接:查询结果每一行是数组。

迫切左外连接:查询结果每一行是对象。

右外连接:查询结果每一行是数组。

无迫切右外连接。

猜你喜欢

转载自blog.csdn.net/qq_41706150/article/details/81008005