Hibernate学习(九)

Hibernate查询方式

1 对象导航查询

(1)根据id查询某个客户,再查询这个客户里面所有联系人

2 OID查询

(1)根据id查询某一条记录,返回对象

3 hql查询

(1)Query对象,写hql语句实现查询

4 QBC查询

(1)Criteria对象

5本地sql查询

(1)SQLQuery对象,使用普通sql实现查询

对象导航查询

1 查询某个客户里面所有联系人过程,使用对象导航实现

2 代码

	//演示对象导航查询
	@Test
	public void testSelect() {
		SessionFactory sessionFactory=null;
		Session session =null;
		Transaction tx=null;
		try {
			sessionFactory =HibernateUtils.getSessionFactory();
			session=sessionFactory.openSession();
			tx=session.beginTransaction();
			
			//根据cid=1客户,再查询这个客户所有联系人
			Customer customer=session.get(Customer.class, 1);
			//再查询这个客户里面所有联系人
			//直接得到客户里面联系人的set集合
			Set<LinkMan> linkman=customer.getSetLinkMan();
			System.out.println(linkman.size());
			
			tx.commit();
			
		}catch(Exception e) {
			tx.rollback();
		}finally {
			session.close();
			sessionFactory.close();
		}
		
	}

OID查询

(1)调用session里面的get方法实现
Customer customer=session.get(Customer.class, 1);

HQL查询

1 hql:hibernate query language,hibernate提供一种查询语言,hql语言和普通sql很相似,区别:普通sql操作数据库表和字段,hql操作实体类和属性。

2常用的hql语句

3 使用hql查询操作时候,使用Query对象,

(1)创建Query对象写hql语句

(2)调用query对象里面的方法得到结果

查询所有

1 查询所有客户的记录

(1)创建Query对象写hql语句

(2)调用query对象里面的方法得到结果

2 查询所有: from 实体类名称

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

条件查询

1 hql条件查询语句写法:

(1)from 实体类名称 where 实体类属性名称=? and 实体类属性名称=?

			//1创建query对象
			//select * from t_customer where cid=? and custName=?
			Query query =session.createQuery("from Customer where cid=? and custName=?");

			//2设置条件值
			//向?里面设置值 
			//setParameter方法两个参数,第一个参数:int类型是?位置,第二个参数:具体参数值,?位置从0开始
			query.setParameter(0, 1);
			query.setParameter(1,"创智博客");
			//3调用方法得到结果
			List<Customer>list =query.list();
			for(Customer customer : list)
			{
				System.out.println(customer.getCid()+"::"+customer.getCustName());
			}


from实体类名称 where 实体类属性名称 like ?

	//1创建query对象
			Query query =session.createQuery("from Customer c where c.custName like ?");
			//2设置条件值
			//向?里面设置值 
			//setParameter方法两个参数,第一个参数:int类型是?位置,第二个参数:具体参数值,?位置从0开始
			query.setParameter(0,"%播%");
			//3调用方法得到结果
			List<Customer>list =query.list();
			for(Customer customer : list)
			{
				System.out.println(customer.getCid()+"::"+customer.getCustName());
				
			}

排序查询

1 hql排序语句写法

(1)from实体类名称 order by 实体类属性名称 asc /desc

	//1创建query对象
				Query query =session.createQuery("from Customer order by cid desc");
				//2调用方法得到结果
				List<Customer>list =query.list();
				for(Customer customer : list)
				{
					System.out.println(customer.getCid()+"::"+customer.getCustName());
				}


分页查询

1 mysql实现分页

(1)使用关键字limit实现

select8 from t_customer limit 0,4

2 在hql中实现分页

(1)在hql操作中,在语句里面不能写limit,hibernate的Query对象封装两个方法实现非也操作。

						
						//1创建query对象
						//写查询所有语句
						Query query =session.createQuery("from Customer");
						//2设置分页数据
						//2.1设置开始位置
						query.setFirstResult(0);
						//2.2设置每页记录数
						query.setMaxResults(2);
						//调用方法得到结果
						List<Customer>list =query.list();
						for(Customer customer : list)
						{
							System.out.println(customer.getCid()+"::"+customer.getCustName());
						}

投影查询

1 投影查询:查询不是所有字段值,而是部分字段的值

2 投影查询hql语句写法:

(1)select 实体类属性名称1,实体类属性名称2 from 实体类名称

(2)select后面不能写*,不支持。

3具体实现

						//1创建query对象
						//写查询所有语句
						Query query =session.createQuery("select custName from Customer");
						//2调用方法得到结果
					
						List<Object>list =query.list();
						for(Object object : list)
						{
							System.out.println(object);
						}

聚集函数使用

1 常用的聚集函数

(1)count,sum,avg,max,min

2 hql聚集函数语句写法

(1)查询记录数

select count(*) from 实体类名称

						//1创建query对象
						//写查询所有语句
						Query query =session.createQuery("select count(*) from Customer");
						//2调用方法得到结果
					//query对象里面有方法,直接放回对象形式
						Object obj=query.uniqueResult();
						
						Long lobj=(Long)obj;
						//返回int类型
						int count=lobj.intValue();
						
						System.out.println(count);




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值