"Hibernate class notes"-----class8----Hibernate retrieval method and retrieval strategy

One: Hibernate retrieval method

1. HQL retrieval method

Use object-oriented HQL query language for query

Example:

public class Test {
    
    
	public static void main(String[] args) {
    
    
		//findOrder();
		//findOrder2();
		//findOrder3();
		//findUserByPage(2, 3);
		findAllUsers();
		HibernateUtil.closeFactory();
	}
	/**
	 * 查询订单数量大于0的所有用户
	 */
	public static void findOrder() {
    
    
		Session session=HibernateUtil.openSession();
		String hql="from User u where 0<(select count(o) from u.orders o)";
		Query query=session.createQuery(hql);
		List<User> users=query.list();
		for(User user:users) {
    
    
			System.out.println(user);
		}
		session.close();
	}
	/**
	 * 查询有订单的用户(使用in关键字)
	 */
	public static void findOrder2() {
    
    
		Session session=HibernateUtil.openSession();
		String hql="from User u where u in(select o.user from Order o group by o.user)";
		Query query=session.createQuery(hql);
		List<User> users=query.list();
		for(User user:users) {
    
    
			System.out.println(user);
		}
		session.close();
	}
	/**
	 * 查询有订单的用户(使用函数)
	 */
	public static void findOrder3() {
    
    
		Session session=HibernateUtil.openSession();
		String hql="from User u where size(u.orders)>0";
		Query query=session.createQuery(hql);
		List<User> users=query.list();
		for(User user:users) {
    
    
			System.out.println(user);
		}
		session.close();
	}
	/**
	 * hql进行分页查询
	 */
    public static void findUserByPage(int pageNum,int pageSize) {
    
    
    	Session session=HibernateUtil.openSession();
    	String hql="from User";
    	Query query=session.createQuery(hql);
    	query.setFirstResult((pageNum-1)*pageSize);//每页的第一个数据
    	query.setMaxResults(pageSize);//每页的数量
    	List<User> users=query.list();
    	System.out.println(users);
    	session.close();
    }
    /**
     * hql的引用查询
     */
    public static void findAllUsers() {
    
    
    	Session session=HibernateUtil.openSession();
    	Query query=session.createNamedQuery("findAllUsers", User.class);
    	List list=query.list();
    	System.out.println(list);
    	session.close();
    }
}

2. QBC (Query By Criteria) query

  • QBC can be regarded as an objectified representation of traditional SQL
  • It is mainly composed of Criteria interface, Criterion interface, and Restrictions class.
  • It can be seen as an example of encapsulating HQL again
    :
public class Test1 {
    
    
	public static void main(String[] args) {
    
    
		searchByQBC();
	}
    //使用QBC进行检索
	public static void searchByQBC() {
    
    
		Session session=HibernateUtil.openSession();
		Criteria criteria=session.createCriteria(User.class);
		Criterion c1=Restrictions.eq("userName","张三");
		criteria.add(c1);
		List<User> users=criteria.list();
		System.out.println(users);
	}
}

Parameters in Restrictions:
Insert picture description here
Insert picture description here

3. Local SQL query

According to the query of the database itself, you can use the database's own dialect

test:

public class Test3 {
    
    

	public static void main(String[] args) {
    
    
           searchUser();
	}
	public static void searchUser() {
    
    
		Session session=HibernateUtil.openSession();
		String sql="select * from user";
		NativeQuery query=session.createNativeQuery(sql,User.class);
		List<User> users=query.list();
		for(User user:users) {
    
    
			System.out.println(user);
		}
		session.close();
	}

}

Two: Hibernate's search strategy

Immediate search: Load the object specified by the search method immediately.
-Loading unnecessary objects is wasting memory space.
-The large number of select statements and frequent access to the database affect system performance.
Delayed retrieval: Delayed loading the object specified by the retrieval method.
-Avoid multiple loading of data objects that the application does not need to access.
Urgent left outer join search: Use the SQL outer join query function to load the specified object of the search method.
-Reduce the number of execute select statements, reduce database access, and improve system performance.

  • Class-level retrieval strategy: the retrieval strategy of the retrieval object (User) specified by the Hibernate retrieval method;
  • Relevance level retrieval strategy: the retrieval strategy of the object (Order) related to the retrieval object specified by the retrieval method.

application:

public class Test2 {
    
    
	public static void main(String[] args) {
    
    
		//search();
		
		search1();
	}
	/**
	 * Hibernate类级别的立即检索和延迟检索
	 */
	public static void search() {
    
    
		Session session=HibernateUtil.openSession();
		//User user=session.get(User.class, new Integer(1));//类级别的立即检索,会执行SQL语句
		
		User user=session.load(User.class,new Integer(4));//类级别的延迟检索,当使用这个对象时才会执行sql语句,只是会创建Oid属性
		Hibernate.initialize(user);//这个方法也会初始化对象
		//System.out.println(user.getPassWord());
		System.out.println(user);
		session.close();
	}
	/*
	 * 默认情况下多对一和一对一的检索方式
	 */
	public static void  search1() {
    
    
		Session session=HibernateUtil.openSession();
		Order order=session.get (Order.class,new Integer(1));
		System.out.println(order);
		session.close();
	}

}

Optional search strategy at class level and association level:
Insert picture description here
Configuration method: add lazy attribute to class, true means delayed search

lazy="true"

Relevance level search strategy one-to-many and many-to-many:
Insert picture description here
Relevance level search strategy many-to-one:
Insert picture description here

Guess you like

Origin blog.csdn.net/qq_44867340/article/details/115317836