Hibernate 检索方式详细讲解

版权声明:博客知识产权来源命运的信徒,切勿侵权 https://blog.csdn.net/qq_37591637/article/details/84824116

基础知识回顾

 

 

 

第一种:对象图导航检索

package cn.com.query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

import cn.com.dao.Kinds;
import cn.com.dao.User;
import cn.com.util.Hibernate_Utils;
public class Demo1 {
	/*
	 * author:命运的信徒 date:2018/12/05 arm:完成CRM的客户的条件查询
	 */
	// 1、对象图导航检索
	/*
	 * 前提:多对一的关系,根据多找一,例如根据联系人找客户,根据用户找职位
	 */
	@Test
	public void demo() {
		Session session = Hibernate_Utils.openSession();
		Transaction tx = session.beginTransaction();
		User u = session.get(User.class, "001");
        Kinds k=u.getKk(); 
        System.out.println(k.getKinds());
	}

}

第二种:OID检索方式

package cn.com.query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

import cn.com.dao.Kinds;
import cn.com.dao.User;
import cn.com.util.Hibernate_Utils;
public class Demo1 {
	/*
	 * author:命运的信徒 date:2018/12/05 arm:完成CRM的客户的条件查询
	 */
	@Test
	public void demo() {
	
		//2.OID检索方式
		/*
		 * OID检索方式主要只用session的get()和load()方法加载某条记录对应的对象
		 * 
		 */
		Session session = Hibernate_Utils.openSession();
		Transaction tx = session.beginTransaction();
		User uu=session.get(User.class, "001");
		Kinds kk=session.load(Kinds.class, "前台");
		System.out.println(uu.getName());
		System.out.println(kk.getKinds());
	}

}

第三种HQL查询

第三种的第一个分支:HQL之基础查询

扫描二维码关注公众号,回复: 4428685 查看本文章
package cn.com.query;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

import cn.com.dao.Sys_User;
import cn.com.util.Hibernate_Utils;

public class Demo1 {
	/*
	 * author:命运的信徒 date:2018/12/05 arm:完成CRM的客户的条件查询
	 */
	@Test
	public void demo() {
	
		//3.HQL检索方式
		/*
		 * HQL检索是面向对象的查询语言,它与sql查询语言有些相似,但它使用的是类、对象和属性的概念,而没有表和字段的概念。
		 * 在hibernate提供的各种检索方式中,HQL是官方推荐的查询语言,也是使用最广泛的一种检索方式
		 */
		//3.1基本的检索
		Session session=Hibernate_Utils.openSession();
		Transaction tx=session.beginTransaction();
		//这里的from Sys_User的Sys_User指的是类名称不是表名
		Query query=session.createQuery("from Sys_User");
		List<Sys_User> ll=query.list();
		for (Sys_User s : ll) {
			System.out.println(s.getUser_name());
		}
		tx.commit();
	}

}

第三种的第二个分支排序检索

package cn.com.query;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

import cn.com.dao.Sys_Role;
import cn.com.util.Hibernate_Utils;

public class Demo1 {
	/*
	 * author:命运的信徒 date:2018/12/05 arm:完成CRM的客户的条件查询
	 */
	@Test
	public void demo() {
		// HQL 排序检索
		Session session = Hibernate_Utils.openSession();
		Transaction tx = session.beginTransaction();
		Query query = session.createQuery("from Sys_Role order by role_id desc");
		List<Sys_Role> ll = query.list();
		for (Sys_Role s : ll) {
			System.out.println(s.getRole_name());
		}
		tx.commit();
	}

}

第三种的第三个分支条件检索(按位置绑定参数和按名称绑定参数)

package cn.com.query;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;
import cn.com.dao.Sys_User;
import cn.com.util.Hibernate_Utils;

public class Demo1 {
	/*
	 * author:命运的信徒 date:2018/12/05 arm:完成CRM的客户的条件查询
	 */
	@Test
	public void demo() {
		// 条件查询-按照位置查询
		/*Session session = Hibernate_Utils.openSession();
		Transaction tx = session.beginTransaction();
		Query q = session.createQuery("from Sys_User where user_name=?");
		//注意是从0开始不是从1开始的
		q.setString(0, "小田");
		List<Sys_User> ll = q.list();
		for (Sys_User ss : ll) {
			System.out.println(ss.getUser_id());
		}
		tx.commit();*/
             //按名称绑定参数
	    Session session=Hibernate_Utils.openSession();
	    Transaction tx=session.beginTransaction();
	    Query qq=session.createQuery("from Sys_User where user_name=:a");
	    qq.setString("a", "小何");
	    List<Sys_User> ll=qq.list();
	   System.out.println(ll.get(0).getUser_id());
	   tx.commit();
	}

}

 第三种的第四个分支分页查询

package cn.com.query;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

import cn.com.dao.User;
import cn.com.util.Hibernate_Utils;

public class Demo1 {
	/*
	 * author:命运的信徒 date:2018/12/05 arm:完成CRM的客户的条件查询
	 */
	@Test
	public void demo() {
	//分页查询
		Session session=Hibernate_Utils.openSession();
		Transaction tx=session.beginTransaction();
		Query query=session.createQuery("from User");
		//开始索引,最小的是0
		query.setFirstResult(1);
		//查询的长度
		query.setMaxResults(3);
		List<User> lk=query.list();
		for (User user : lk) {
			System.out.println(user.getName());
		}
	}

}

第三种的第五个分支统计索引查询

package cn.com.query;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

import cn.com.dao.User;
import cn.com.util.Hibernate_Utils;

public class Demo1 {
	/*
	 * author:命运的信徒 date:2018/12/05 arm:完成CRM的客户的条件查询
	 */
	@Test
	public void demo() {
//统计索引查询
		Session session=Hibernate_Utils.openSession();
		Transaction tx=session.beginTransaction();
		Query q=session.createQuery("select count(*) from User");
		//对于查询结果的只有一种,可以采取以下方法
		Long i=(Long) q.uniqueResult();
		System.out.println(i);
		tx.commit();
		session.close();
	}

}

第三种的第六个分支投影查询

package cn.com.query;

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

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

import cn.com.dao.User;
import cn.com.util.Hibernate_Utils;

public class Demo1 {
	/*
	 * author:命运的信徒 date:2018/12/05 arm:完成CRM的客户的条件查询
	 */
	@Test
	public void demo() {
		// 投影检索
		Session session = Hibernate_Utils.openSession();
		Transaction tx = session.beginTransaction();
		// 1.投影一列检索
		/*
		 * Query qq=session.createQuery("select name from User"); List<String>
		 * ll=qq.list(); for (String a : ll) { System.out.println(a); }
		 * tx.commit(); session.close();
		 */
		/*
		 * //2.投影多列检索 Query qq=session.createQuery("select name,kk from User");
		 * //对象数组,在集合里面是这样的([1,田],[2,江],[3,慢]); List<Object[]> ll=qq.list(); for
		 * (Object[] o : ll) { System.out.println(Arrays.toString(o)); }
		 * tx.commit();
		 */
		// 3.投影的构造方式的查询
		//这种方法需要注意的是user表中有这个构造方法,不然会报错
		Query qq = session
				.createQuery("select new User(number,name) from User");
		List<User> ll = qq.list();
		for (User u : ll) {
			System.out.println(u.getName() + u.getNumber());
		}
		tx.commit();
		session.close();
	}

}

QBC检索方法

基础知识了解

package cn.com.query;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Restrictions;
import org.junit.Test;
import cn.com.dao.User;
import cn.com.util.Hibernate_Utils;
public class Demo2 {
	@Test
	public void demo() {
		Session session = Hibernate_Utils.openSession();
		Transaction tx = session.beginTransaction();
		// QBC检索
		// 1.创建criteria对象
		Criteria cc = session.createCriteria(User.class);
		//设定查询条件
		Criterion con = Restrictions.eq("name", "小田");
		//添加查询条件
		cc.add(con);
		//执行查询,返回查询结果
		User uu = (User) cc.uniqueResult();

		System.out.println(uu.getNumber());
	}
}

 

OBC查询之六种方法

package cn.com.query;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projection;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.junit.Test;

import cn.com.dao.User;
import cn.com.util.Hibernate_Utils;

public class Demo2 {
	@Test
	public void demo() {
		Session session = Hibernate_Utils.openSession();
		Transaction tx = session.beginTransaction();
		// QBC检索
		/*
		 * // 1.创建criteria对象 Criteria cc = session.createCriteria(User.class);
		 * //设定查询条件 Criterion con = Restrictions.eq("name", "小田"); //添加查询条件
		 * cc.add(con); //执行查询,返回查询结果 User uu = (User) cc.uniqueResult();
		 * System.out.println(uu.getNumber());
		 */
		// 1.OBC查询之基础检索
		// 创建criteria对象
		/*
		 * Criteria cr=session.createCriteria(User.class); List<User>
		 * list=cr.list(); for (User user : list) { System.out.println(user); }
		 */
		// 2.条件检索
		/*
		 * Criteria criteria=session.createCriteria(User.class); Criterion
		 * cc=Restrictions.like("name", "%小%"); criteria.add(cc); List<User>
		 * list=criteria.list(); for (User user : list) {
		 * System.out.println(user.getName()); }
		 */
		// 3.分页检索
		/*
		 * Criteria criteria=session.createCriteria(User.class);
		 * criteria.setFirstResult(0); criteria.setMaxResults(3); List<User>
		 * ll=criteria.list(); for (User user : ll) {
		 * System.out.println(user.getName()); }
		 */
		// 4.排序检索
		/*Criteria criteria = session.createCriteria(User.class);
		// 排序代码
		criteria.addOrder(Order.asc("number"));
		List<User> ll = criteria.list();
		for (User user : ll) {
			System.out.println(user.getName());
		}*/
		//5.统计检索
		/*Criteria criteria = session.createCriteria(User.class);
		criteria.setProjection(Projections.rowCount());
		long ll=(long) criteria.uniqueResult();
		System.out.println(ll);*/
		
		tx.commit();
		session.close();
	}
}

 

 

 本地SQL检索方法

package cn.com.query;

import java.util.List;

import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

import cn.com.dao.User;
import cn.com.util.Hibernate_Utils;

public class Demo3 {
/*author:命运的信徒
 * date:2018/12/5
 * arm:本地SQL检索方法
 */
	@Test
	public void demo(){
	Session session=Hibernate_Utils.openSession();
	Transaction tx=session.beginTransaction();
	//最底层SQL底层,user是表名不是类名
	SQLQuery qq=session.createSQLQuery("select name from user");
	List<String> ll=qq.list();
	for (String user : ll) {
		System.out.println(user);
	}
	tx.commit();
	}
}

猜你喜欢

转载自blog.csdn.net/qq_37591637/article/details/84824116