hibernate QBC检索方式查询
Hibernate提供了一套符合Java編程習慣的API,即QBC(Query By Creteria)檢索方式,
主要郵Criteria接口,Criterion接口和Expression類組成.優(yōu)點是支持動態(tài)查詢,在編譯時就進行解析,容易排除錯誤;缺點是沒有HQL功能強大.
Hibernate.java
package mrgf;
import java.util.List;
import org.hibernate.cfg.Configuration;
import org.hibernate.SessionFactory;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.Criteria;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Expression;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.MatchMode;
import java.util.Map;
import java.util.HashMap;
public class Hibernate {
??? public Hibernate() {
??? }
??? // 在靜態(tài)快中加載Hibernate配置信息
??? private static SessionFactory sessionFactory;
??? static {
??????? try {
??????????? Configuration config = new Configuration().configure();
??????????? sessionFactory = config.buildSessionFactory();
??????? } catch (Exception e) {
??????????? System.out.println("------在初始化hibernate時拋出異常,內(nèi)容如下:");
??????????? e.printStackTrace();
??????? }
??? }
??? private Session session = null;
??? private Transaction tx = null;
??? //檢索對象
??? public List query() {
??????? // 打開Session,開啟事物
??????? session = sessionFactory.openSession();
??????? tx = session.beginTransaction();
??????? //? 檢索數(shù)據(jù)
??????? Criteria criteria = session.createCriteria(Record.class); //Record在my.bean里面
??????? criteria.addOrder(Order.desc("id"));? //降序
??????? Criterion criterion = Expression.eq("sex", "男"); //條件,有這句就不用select來查詢了
??????? criteria.add(criterion); //把條件給criteria
??????? List result = criteria.list();?? //criteria相當于query,自己本身就是查詢
??????? // 提交事物,關閉Session
??????? tx.commit();
??????? session.close();
??????? return result;
??? }
}
index.jsp使用
<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.util.*" %>
<%@ page import="mrgf.*" %>
<html>
<head>
<title>
index
</title>
</head>
<body bgcolor="#ffffff">
<table width="490"? border="0" cellspacing="0" cellpadding="0">
? <tr>
??? <td> </td>
??? <td><table width="100%" background="image/bg.jpg" border="0" cellspacing="0" cellpadding="0">
????? <tr>
??????? <td> </td>
????? </tr>
????? <tr align="center">
??????? <td>員工檔案表</td>
????? </tr>
????? <tr>
??????? <td> </td>
????? </tr>
????? <tr align="center">
??????? <td><table width="96%"? border="1" cellspacing="0" cellpadding="4">
????????? <tr align="center">
??????????? <td>編號</td>
??????????? <td>姓名</td>
??????????? <td>性別</td>
??????????? <td>出生日期</td>
??????????? <td>民族</td>
??????????? <td>學歷</td>
??????????? <td>籍貫</td>
??????????? <td>家庭住址</td>
????????? </tr>
????????? <%
????????? Hibernate hibernate = new Hibernate();
????????? List l=hibernate.query();
????????? Iterator it=l.iterator();
????????? while(it.hasNext()){
??????????? Record r=(Record)it.next();
????????? %>
????????? <tr align="center">
??????????? <td><%=r.getId() %></td>
??????????? <td><%=r.getName() %></td>
??????????? <td><%=r.getSex() %></td>
??????????? <td><%=r.getBirthday() %></td>
??????????? <td><%=r.getNation() %></td>
??????????? <td><%=r.getSchoolAge() %></td>
??????????? <td><%=r.getNativePlace() %></td>
??????????? <td><%=r.getAddress() %></td>
????????? </tr>
????????? <%
????????? }
????????? %>
??????? </table></td>
????? </tr>
????? <tr>
??????? <td> </td>
????? </tr>
??? </table></td>
??? <td> </td>
? </tr>
</table>
</body>
</html>
QBC檢索方式常用的設定查詢條件的方法
查詢條件???????? 設定方法?????? 方法說明
單條件等于?????? Expression.eq(String attribute,String value)??????? equal,兩個參數(shù)依次為要檢索屬性和檢索值
多條件等于?????? Expression.allEq(Map attEq Val)?????????????????????? 通過Map型入口參數(shù)可以同時設定多個檢索條件
不等于?????????????? Expression.not(? Expression.eq())?????????????????????? 通過方法的聯(lián)合使用實現(xiàn)不等于
大于?????????????????? Expression.gt(String attribute,String value)???????? greate-than,檢索屬性attribute的值大于value值 的記錄
大于等于?????????? Expression.ge(String attribute,String value)???????? greate-equal,檢索屬性attribute的值大于或者等于value值 的記錄
小于?????????????????? Expression.lt(String attribute,String value)????????? less-than?? 檢索屬性attribute的值小于value值 的記錄
小于等于?????????? Expression.le(String attribute,String value)????????? less-equal,檢索屬性attribute的值小于或者等于 value值 的記錄
空值?????????????????? Expression.isNull(String attribute)?????????????????????? 入口參數(shù)為要檢索的屬性
非空?????????????????? Expression.isNotNull(String attribute)??????????????? 入口參數(shù)為要檢索的屬性
在列表中?????????? Expression.in()???????????????????????????????????????????????????? 等同于SQL語句中的IN子句
不在列表中?????? Expression.not(Expression.eq())????????????????????????? 等同于SQL語句中的NOT IN子句???
在范圍內(nèi)?????????? Expression.between()?????????????????????????????????????????? 等同于SQL語句中的BETWEEN子句
不在范圍內(nèi)?????? Expression.not(Expression.between())??????????????? 等同于SQL語句中的NOT BETWEEN子句
與?????????????????????? Expression.and()????????????????????????????????????????????????? 等同于SQL語句中的AND
或?????????????????????? Expression.or()??????????????????????????????????????????????????? 等同于SQL語句中的OR
非?????????????????????? Expression.not()????????????????????????????????????????????????? 等同于SQL語句中的NOT
字符串匹配?????? Expression.like()????????????????????????????????????????????????? 檢索指定字符串,并可以指定匹配模式
升序排列?????????? Order.asc(String attribute)??????????????????????????????????? 按入口參數(shù)指定的屬性升序排列
降序排列?????????? Order.desc(String attribute)????????????????????????????????? 按入口參數(shù)指定的屬性降序排列
精確匹配?????????? MatchMode.EXACT????????????????????????????????????????? 等同于SQL語句中的"LIKE 'value'"子句
包含匹配?????????? MatchMode.ANYWHERE???????????????????????????????? 等同于SQL語句中的"LIKE '%value%'"子句
左匹配?????????????? MatchMode.START?????????????????????????????????????????? 等同于SQL語句中的"LIKE 'value%'"子句
右匹配?????????????? MatchMode.END??????????????????????????????????????????????? 等同于SQL語句中的"LIKE '%value'"子句
總結
以上是生活随笔為你收集整理的hibernate QBC检索方式查询的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring2.5的新特性
- 下一篇: 一位散户高手的自白