赞
踩
(1) 根据ID查询某个客户,再查询这个客户里面的所有联系人
Customer customer = session.get(Customer.class,1);
Set<LinkMan> linkman = customer.getSetLinkMan();
(1) 根据ID查询某一条记录,返回对象形式
和普通SQL区别在于,数据库和实体类互换
第一步:创建Query对象,写hql语句
第二步:调用query里面的方法得到结果
Query query = session.createQuery("语句");
List<Company> list = query.list();
Query query = session.createQuery("from 实体类名称 where username=? and uid=?")
//向?设值
query.setParameter(0,"张三");
query.setParameter(1,2);
//模糊查询
Query query = session.createQuery("from 实体类名称 where username like ?")
query.setParameter(0,"%浪");
SQL:
select * from t_company order by cid ASC(DESC)
HQL:
懒!把语句进去即可
Mysql:使用limit
select * from t_table limit 0,3 // 每页显示三条记录
hql:不认识limit
query.setFirstResult(0);//设置开始位置
query.setMaxResult(3);//每页记录数
sql:
select cid,custName from t_table;
hql:
Query query = session.createQuery("select custName from Customer");
List<Object>list = quert.list();
select count(*) from t_tables;
createQuery("select count(*) from 实体类");
Object obj = query.uniqueResult();
select * from t_customer,t_linkman where c.cid = l.cid;
SELECT * FROM t_customer c INNER JOIN t_linkman l ON c.cid = l.cid;
2、左外连接(得到的结果为,左边的表的全部,右边表的关联数据)
SELECT * FROM t_customer c LEFT OUTER JOIN t_linkman l ON c.cid = l.cid;
3、右外连接
SELECT * FROM t_customer c RIGHT OUTER JOIN t_linkman l ON c.cid = l.cid;
HQL:
1、内连接
语句:
from Customer c inner join c.setLinkMan //
代码:
Query query = session.createQuery("from Customer c inner join c.setLinkMan")
List list = query.list();//返回数组形式
2、左外连接(得到的结果为,左边的表的全部,右边表的关联数据)
from Customer c left outer join c.setLinkMan
3、右外连接
Criteroa criteria = session.createCriteria(Company.class); // 1、查询所有 list = criteria.list(); // 2、条件查询 //1)、使用add方法,表示条件 //2)、调用Retri的静态方法 criteria.add(Restrictions.eq("cid",1));// cid == 1; criteria.add(Restrictions.eq("cname","老王"));// cname == 老王; // 3、排序查询 criteria.addOrder(Order.asc("cid")); // 4、分页 //1)设置开始位置 //2)设置每页记录数 criteria.setFirstResult(0); criteria.setMaxResults(3); //5、统计查询 criteria.setProjection(Projections.rowCount()); Object obj = criteria.uniqueResult(); Long lobj = (Long) obj; //6、离线查询(不用session) //1)创建对象 DetachedCriteria dC = DeterchedCriteria.forClass(Company.class); //2)执行的时候,才需要session Criteria criteria = dc.getExecutableCriteria(session);
(1)SQLQuery对象,使用普通sql实现
根据id查询,调用get方法,一调用get方法马上发送语句查询
调用方法不会马上发送语句,什么时候用,才去查数据库,不用的时候不回去查数据库。
Customer customer = session.load(Customer.class,2);// 此时不会发送sql语句
printf(customer.getCid());//获得Cid 也不发送sql语句
printf(customer.getCustName());//发送语句
类级别延迟: 调用load方法不会马上发送语句
关联级别延迟:查询客户的联系人是否需要延迟
Set<LinkMan> linkMan = customer.getSetLinkMan();// 不发送语句
print(linkMan.size());//要用的时候,才查询sql
在set标签上的属性
(1) fetch: 值select(默认)
(2) lazy: true(默认)、false、extra(极其懒惰)
<set name="setLinkMan" fecth="select" lazy="true">
</set>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。