Hibernate查询

OID查询:

//使用对象时发送语句查询数据库
Customer customer = session.load(Customer.class, 1);
//马上发送语句查询数据库
Customer customer = session.get(Customer.class, 1);

对象导航查询:

//1 根据id查询联系人
LinkMan linkman = session.get(LinkMan.class, 4);
//2 对象导航查询  查询这个联系人所属客户  
//不会发送语句
Customer c = linkman.getCustomer();
//发送语句
System.out.println(c.getCustName());

HQL查询(操作实体类和属性);

query对象    session.createQuery("hql语句")  
语句中不能直接出现*
查询所有hql语句: 

//查询所有hql语句: from 实体类名称
Query query = session.createQuery("from UserTest");
			
//调用query对象里面的方法得到结果
List<UserTest> list = query.list();

条件查询

第一种:
//1 创建query对象
String hql = "from Customer c where c.cid=? and c.custName=?";
Query query = session.createQuery(hql);
			
//2 设置条件值 ?里面值
//* 第一个参数是:?位置,?位置从0开始的
//* 第二个参数是:条件值
query.setParameter(0, 3);
query.setParameter(1, "360");
			
//3 调用方法得到结果
List<Customer> list = query.list();

第二种:
//1 创建query对象
String hql = "from Customer c where c.cid= :cid and c.custName= :custName";
Query query = session.createQuery(hql);
			
//* 第一个参数是:等号后的参数名
//* 第二个参数是:条件值
query.setParameter(cid, 3);
query.setParameter(custName, "360");
			
//3 调用方法得到结果
List<Customer> list = query.list();


模糊查询hql语句写法

from 实体类名称 where 实体类属性名称  like  ?
//1 创建query对象
String hql = "from Customer where custName like ?";
Query query = session.createQuery(hql);
			
//2 设置条件值 ?里面值
query.setParameter(0, "%百%");
			
//3 调用方法得到结果
List<Customer> list = query.list();


排序语句写法

from 实体类名称 order by 要排序属性名称 asc/desc
//1 创建query对象
String hql = "from Customer order by cid desc";
Query query = session.createQuery(hql);

//2 调用方法得到结果
List<Customer> list = query.list();


分页查询:

//1 创建query对象
Query query = session.createQuery("from Customer");
			
//2 设置分页信息
//2.1 设置开始位置
query.setFirstResult(0);
//2.2 设置每页记录数
query.setMaxResults(3);
			
//3 调用方法得到结果
List<Customer> list = query.list();

投影查询hql语句

(1)select 属性名称1,属性名称2  from  实体类名称
(2)hql语句中使用select关键字,但是select后面不能直接添加 *
常用聚集函数count、sum、avg、max、min
 演示查询表有多少条记录
hql语句
select count(*) from Customer

HQL多表查询:

from Customer  c  inner join  fetch  c.setLinkMan        setLinkMan为配置文件中的集合名
使用迫切内连接,返回list集合中,每部分是对象形式
内连接语句:
from Customer  c  inner join  c.setLinkMan 使用内连接查询之后,返回list集合中每部分是数组形式

QBC查询:
Criteria     session.createCriteria(.class)
查询所有

//1 创建对象
Criteria criteria = session.createCriteria(Customer.class);

//2 调用方法得到结果
List<Customer> list = criteria.list();

条件查询

criteria.add(Restrictions.方法)

//1 创建对象
Criteria criteria = session.createCriteria(Customer.class);

//2 调用方法设置条件值
//根据custName做模糊查询
criteria.add(Restrictions.like("custName", "%百%"));

//3 调用方法得到结果
List<Customer> list = criteria.list();

排序

criteria.addOrder(Order.方法)

//1 创建对象
Criteria criteria = session.createCriteria(Customer.class);

//2 调用方法设置排序
criteria.addOrder(Order.desc("cid"));

//3 调用方法得到结果
List<Customer> list = criteria.list();

分页查询:

//1 创建对象
Criteria criteria = session.createCriteria(Customer.class);

//2 设置分页数据
criteria.setFirstResult(0);//开始位置
criteria.setMaxResults(3);//每页记录数
			
//3 调用方法得到结果
List<Customer> list = criteria.list();

统计查询

//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();

离线对象:

DetachedCriteria  criteria=DetachedCriteria.forClass(.class);

SQL查询:

SQLQuery  session.createSQLQuery(普通sql语句)
sqlQuery.list()  list元素是数组,如果要变成实体类,需在这之前加上
sqlQuery.addEntity(.class)或sqlQuery.setResultTransformer(Transformers.aliasTobean(.class))

















 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值