1.HQL:(Hibernate Query Language) 是面向對象的查詢語言
1.實體查詢 sql
- public void testQueryAllDept(){
- String hql="from Employee";
-
- Query query=session.createQuery(hql);
-
- List<Employee> list= query.list();
-
- }
2.有條件的 實體查詢 數據庫
- public void testQueryAllDept(){
- String hql="from Deptas model where mode.deptName='人事部' ";
-
- Query query=session.createQuery(hql);
-
- List<Employee> list= query.list();
-
- }
- public void testQueryAllDept(){
- String hql="from Deptas model where mode.deptName like '%部%' ";
-
- Query query=session.createQuery(hql);
-
- List<Employee> list= query.list();
-
- }
-
- public void testQueryDeptByGt(){
-
- String hql="from Dept model where model.createDate> '2012-03-10'";
- Query query=session.createQuery(hql);
- List<Employee> list= query.list();
- }
3.HQL 中的各類運算符 緩存
運算符類型 |
HQL運算符 |
含義 |
比較運算 |
= |
等於 |
|
<> |
不等於 |
|
> |
大於 |
|
>= |
大於等於 |
|
<= |
小於等於 |
|
< |
小於 |
|
is null |
爲空 |
|
is not null |
不爲空 |
範圍運算 |
in |
等於列表中的某一值 |
|
not in |
不等於列表中的任意一個值 |
|
between p1 and p2 |
大於等於值1 且 小於等於值2 |
|
not between p1 and p2 |
小於值1 或者 大於 值2 |
字符串模式匹配 |
like |
字符串模式匹配 |
邏輯運算 |
and |
與 |
|
or |
或 |
|
not |
非 |
3.更新 刪除 session
- public void testModifyDate(){
- Transaction tr=session.beginTransaction();
- Dept detp=(Dept)session.get(Detp.class,new Integer(6));
- detp.seteCreateDate("2000-03-10");
- tr.commit();
-
- }
-
- public void testDelDeptByHql(){
- Transaction tr=session.beginTransaction();
- String hql="delete Dept as model where model.deptId=6";
- Query query=session.createQuery(hql);
- query.executeUpdate();
- tr.commit();
- }
4.屬性查詢 函數
- public void testQueryDeptName(){
- String hql="select model.deptName from Dept as model";
- Query query=session.createQuery(hql);
- List<String> deptNameList=query.list();
-
- }
- public void testQueryDeptName(){
- String hql="select model.deptName,model.createDate from Dept as model";
- Query query=session.createQuery(hql);
- List<Object[]> prsList=query.list();
- for(){
- }
-
- }
-
-
- public void testQueryDeptName(){
- String hql="select new Dapt(model.deptName,model.createDate) from Dept as model";
- Query query=session.createQuery(hql);
- List<Dept> deptList=query.list();
- for(Dept d:deptList){
-
- d.setDeptName("test");
- session.saveOrUpdate(dept);
- }
-
- }
-
-
-
-
- public void testSaveDept(){
- Transction tr=session.beginTransactino();
- String hql="select new Dept(model.deptName,model.createDate) from Dept as model";
- Query query=session.createQuery();
- List<Dept> deptList=query.list();
- for(Dept dept:deptList){
- System.out.println(dept.deptName);
- dept.setDetpName("test");
- session.saveOrUpdate(dept);
- }
- tr.commit();
-
- }
5.使用函數 性能
- public void testQuyeryFunction(){
- String hql="select count(*),min(model.createDate) from Dept as model";
- Query query=session.createQuery(hql);
- List<Object[]> paramsList=query.list();
- for(){
-
- }
-
- }
6.分組 與 排序 spa
- public void testQueryOrderBy(){
- String hql="from Dept as mode order by model.createDate,model.deptName desc";
- Query query=session.createQuery();
- List<Dept> deptList=query.list();
- for(){}
-
-
- }
-
- public void testQueryGroupBy(){
- String hql="select count(model),model.deptName from Dept as model group by model.deptName having count(model)>1";
- Query query=session.createQuery();
- List<Object[]> list=query.list();
-
- }
7.查詢單個對象 設計
- public void testQueryUn(){
- String hql="select model.deptName from Dept as model where model.deptId=2";
- Query query=session.createQuery(hql);
- query.setMaxResults(1);
- String deptName=(String)query.uniqueResult();
- System.out.println(deptNamae);
- }
8.綁定參數
釋義:Hibernate中也採用了preparedStatement做爲底層數據庫的的訪問方式,與之對應的SQL語句 能夠重用preparedStatement對象, 首先會預編譯,而後緩存起來,提升性能.
1.使用 ":"加參數名 綁定參數 code
- public void testQueryByParamsName(){
-
- String hql="from Dept as model where
- odel.deptName=:deptName and model.createDate=:createDate";
-
- Query query=session.createQuery(hql);
- query.setString("deptName","test");
- query.setString("ceateDate","2000-02-10");
- List<Dept> deptList=query.list();
- for(){}
-
-
-
- }
2.使用 "?" 按照位置來綁定參數 對象
- public void testQueryByParamsID(){
- String hql="from Dept as model where model.deptName=? and model.createDate=?";
- Query query=session.createQuery(hql);
- query.setString(0,"test");
- query.setString(1,"2000-02-02");
- List<Dept> list=query.list();
- for(){}
-
- }
3.採用setEntity() 將參數和一個持久化對象進行綁定
- public void testQueryByDept(){
- Dept dept=(Dept)Session.get(Dept.clas,new Integer(2));
- String hql="select Employee as model where model.dept=?"
- Query query=session.createQuery(hql);
- query.setEntity(0,dept);
- List<Employee> empList=query.list();
- for(){}
-
-
-
- }
4.setParameter() 用於綁定任意類型的參數
- public void testQueryBySetParams(){
- String hql="from Dept as model where model.deptName=?";
- Query query=session.createQuery(hql);
- query.setParameter(0,"test");
- List<Dept> deptList=query.list();
- for(){}
-
- }
5.setProperties() 將一個參數名 於一個對象的屬性值綁定
- public void testQueryBySetPro(){
- Dept deptNew=new Dept();
- deptNew.setDeptName("test");
-
- String hql="from Dept as model where model.deptName=:deptName";
- Query query=session.createQuery();
- query.setProperties(deptNew);
- List<Dept> deptList=query.list();
- for(){
-
- }
-
-
- }
10. 聯合查詢
inner join
- public void testQueryInnerJoin(){
- String hql="from Dept as model inner join model1.employees as model2";
- Query query=session.createQuery(hql);
- List<Object[]> objList=query.list();
- for(Object[] obj:objList){
- Dept dept=(Dept)obj[0];
- Employee emp=(Employee)obj[1];
- System.out.println("xxxx");
- }
- }
left join
- public void testQueryLeftJoin(){
- String hql="from Dept as model left join model1.employees as model2";
- Query query=session.createQuery(hql);
- List<Object[]> objList=query.list();
- for(Object[] obj:objList){
- Dept dept=(Dept)obj[0];
- Employee emp=(Employee)obj[1];
- if(mep!=null){
- System.out.println("xxxx");
- }else{
- System.out.println(null);
- }
- System.out.println(dept.getDeptName());
- }
- }
right join
- public void testQueryRightJoin(){
- String hql="from Dept as model right join model1.employees as model2";
- Query query=session.createQuery(hql);
- List<Object[]> objList=query.list();
- for(Object[] obj:objList){
- Dept dept=(Dept)obj[0];
- Employee emp=(Employee)obj[1];
- if(dept!=null){
- System.out.println(dept.getDeptName());
- }else{
- System.out.println(null);
- }
- System.out.println("dd"+emp.getEmployeeName());
- }
- }
11.子查詢
- public void testQueryChild(){
- String hql="from Dept as model where (select count(*) from model.employee) >2";
- Query query=session.createQuery(hql);
- List<Dept> objList=query.list();
- for(){}
-
- }
12 Criteria 查詢
釋義:經過面向對象的設計將數據查詢條件封裝在一個對象
- public void testQueryDept(){
- Criteria criteria=session.createCriteria(Dept.class);
- List<Dept> deptList=criteria.list();
- for(){}
-
- }
-
- public void testQueryDeptByName(){
- Criteria criteria=session.createCriteria(Dept.class);
- criteria.add(Expression.eq("deptName", "人事部"));
- List<Dept> deptList=criteria.list();
- for(){}
-
- }
SQL語法查詢機制
方法 |
描述 |
Expression.eq |
對應sql中的field =value |
Expression.gt |
對應sql中的field>value |
Expression.ge |
對應sql中的field>=value |
Expression.lt |
對應sql中的field<value |
Expression.le |
對應sql中的field<=value |
Expression.between |
對應sql中的between |
Expression.like |
對應 like |
Expression.in |
對應 in |
Expression.eqProperty |
用於比較兩個屬性之間的值,對應的Sql條件中field=field |
Expression.gtProperty |
用於比較兩個屬性之間的值,對Sqlfiled>field |
Expression.geProperty |
用於比較兩個屬性之間的值,對應sql field>=field |
Expression.ltProperty |
用於比較兩個屬性之間的值,對應field<field |
Expression.leProperty |
用於比較 兩個屬性之間的值,對應field<=field |
Hibernate3中採用Restrictions類代替Expression
- public void testQueryDeptByNameRe(){
- Criteria criteria=session.createCriteria(Dept.class);
- criteria.add(Restrictions.eq("deptName", "人事部"));
- List<Dept> deptList=criteria.list();
- for(){}
-
-
- }
Criteria中限定返回的行數
- public void testQueryDept(){
- Criteria criteria=session.createCriteria(Dept.class);
- criteria.setFirstResult(2);
- criteria.setMaxResults(2);
- List<Dept> deptList=criteria.list();
- for(){}
-
- }
Criteria排序
- public void testQueryDept(){
- Criteria criteria=session.createCriteria(Dept.class);
- criteria.addOrder(Order.asc("createDate"));
- List<Dept> deptList=criteria.list();
- for(){}
-
- }