Hibernate学习(十)

QBC查询

1 使用hql查询需要些hql语句实现,但是使用qbc时候,不需要写语句了,使用方法实现

2 使用qbc时候,操作实体类和属性

3使用qbc,使用Criteria对象实现

查询所有

1 创建Criteria对象

2 调用方法得到结果

   //1创建对象
			Criteria criteria=session.createCriteria(Customer.class);
			//2调用方法得到结果
			List<Customer> list=criteria.list();
			for(Customer customer : list) {
				System.out.println(customer.getCid()+"::"+customer.getCustName());
			}

条件查询

1 没有语句,使用封装的方法实现

		    //1创建对象
			Criteria criteria=session.createCriteria(Customer.class);
			//2使用Criteria对象里面的方法设置条件值
			//首先使用add方法,表示设置条件值
			//在add方法里面使用类的方法实现条件设置
			
/*			等于的匹配
 * 			criteria.add(Restrictions.eq("cid", 3));
			criteria.add(Restrictions.eq("custName", "百度"));*/
			/*模糊查询*/
			criteria.add(Restrictions.like("custName", "%百%"));
			List<Customer> list=criteria.list();
			for(Customer customer : list) {
				System.out.println(customer.getCid()+"::"+customer.getCustName());
			}

排序查询

		    //1创建对象
			Criteria criteria=session.createCriteria(Customer.class);
			//2设置对哪个属性进行排序,设置排序规则    asc/desc
			criteria.addOrder(Order.desc("cid"));
	
			List<Customer> list=criteria.list();
			for(Customer customer : list) {
				System.out.println(customer.getCid()+"::"+customer.getCustName());
			}
			

分页查询

		    //1创建对象
			Criteria criteria=session.createCriteria(Customer.class);
			//2设置分页数据
			//2.1设置开始位置
			criteria.setFirstResult(0);
			//2.2设置每页显示记录数
			criteria.setMaxResults(2);
			criteria.addOrder(Order.desc("cid"));
	
			List<Customer> list=criteria.list();
			for(Customer customer : list) {
				System.out.println(customer.getCid()+"::"+customer.getCustName());
			}

开始位置计算公式:(当前页-1)*每页记录数

统计查询

		    //1创建对象
			Criteria criteria=session.createCriteria(Customer.class);
			//2设置操作
			
			criteria.setProjection(Projections.rowCount());
			//3调用方法得到结果
			Object obj=criteria.uniqueResult();
			Long lobj=(Long)obj;
			int count=lobj.intValue();
			System.out.println(count);


离线查询

1 servlet调用service,service调用dao

(1)在dao里面对数据crud操作

(2)在dao里面使用hibernate框架时候,调用session里面方法实现功能。

				//1创建对象
			   DetachedCriteria detachedCriteria=DetachedCriteria.forClass(Customer.class);
			   //2最终执行时候,才需要session
			   Criteria criteria=detachedCriteria.getExecutableCriteria(session);
				//3调用方法得到结果
			   List<Customer> list=criteria.list();
				for(Customer customer : list) {
					System.out.println(customer.getCid()+"::"+customer.getCustName());
				}
(3)在后面ssh练习中具体应用

HQL多表查询

Mysql里面多表查询

1 内连接

select * from t_customer c,t_linkman l where c.cid=l.clid;

select * from t_customer c inner join t_linkman l on c.cid=l.clid;

2 左外连接

select * from t_customer c left outer join t_linkman l on c.cid=l.clid

3 右外连接

select * from t_customer c right outer join t_linkman l on c.cid=l.clid

HQL中实现多表查询

Hql多表查询

(1)内连接

(2)左外连接

(3)右外连接

(4)迫切内连接

(5)迫切左外连接

HQL内连接

1 内连接查询hql语句写法,以客户和联系人为例

(1)from Customer c inner join  c.setLinkMan

			//1创建query对象
			Query query=session.createQuery("from Customer c inner join c.setLinkMan");
			List list=query.list();

返回list,list里面每部分是数组形式。

2 演示迫切内连接

(1)迫切内连接和内连接底层实现是一样的

(2)区别:使用内连接返回list中每部分是数组,迫切内连接返回list每部分是对象

(3)hql语句写法

from Customer c inner join fetch  c.setLinkMan

HQL左外连接

1 左外连接hql语句

(1)from Customer c left outer join c.setLinkMan

(2)迫切左外连接from Customer c left outer join fetch c.setLinkMan

2 左外连接返回list中每部分是数组,迫切左外连接返回list每部分是对象

				//1创建query对象
				Query query=session.createQuery("from Customer c let outer join  c.setLinkMan");
				List list=query.list();

1 右外连接hql语句

(1)from Customer c right outer join c.setLinkMan



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值