hibernate QBC检索方式查询

Hibernate提供了一套符合Java编程习惯的API,即QBC(Query By Creteria)检索方式,
主要邮Criteria接口,Criterion接口和Expression类组成.优点是支持动态查询,在编译时就进行解析,容易排除错误;缺点是没有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() {
    }
    // 在静态快中加载Hibernate配置信息
    private static SessionFactory sessionFactory;
    static {
        try {
            Configuration config = new Configuration().configure();
            sessionFactory = config.buildSessionFactory();
        } catch (Exception e) {
            System.out.println("------在初始化hibernate时抛出异常,内容如下:");
            e.printStackTrace();
        }
    }
    private Session session = null;
    private Transaction tx = null;
    //检索对象
    public List query() {
        // 打开Session,开启事物
        session = sessionFactory.openSession();
        tx = session.beginTransaction();
        //  检索数据
        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>&nbsp;</td>
    <td><table width="100%" background="image/bg.jpg" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td>&nbsp;</td>
      </tr>
      <tr align="center">
        <td>员工档案表</td>
      </tr>
      <tr>
        <td>&nbsp;</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>&nbsp;</td>
      </tr>
    </table></td>
    <td>&nbsp;</td>
  </tr>
</table>
</body>
</html>


QBC检索方式常用的设定查询条件的方法
查询条件         设定方法       方法说明
单条件等于       Expression.eq(String attribute,String value)        equal,两个参数依次为要检索属性和检索值
多条件等于       Expression.allEq(Map attEq Val)                       通过Map型入口参数可以同时设定多个检索条件
不等于               Expression.not(  Expression.eq())                       通过方法的联合使用实现不等于
大于                   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)                       入口参数为要检索的属性
非空                   Expression.isNotNull(String attribute)                入口参数为要检索的属性
在列表中           Expression.in()                                                     等同于SQL语句中的IN子句
不在列表中       Expression.not(Expression.eq())                          等同于SQL语句中的NOT IN子句   
在范围内           Expression.between()                                           等同于SQL语句中的BETWEEN子句
不在范围内       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)                                    按入口参数指定的属性升序排列
降序排列           Order.desc(String attribute)                                  按入口参数指定的属性降序排列
精确匹配           MatchMode.EXACT                                          等同于SQL语句中的"LIKE 'value'"子句
包含匹配           MatchMode.ANYWHERE                                 等同于SQL语句中的"LIKE '%value%'"子句
左匹配               MatchMode.START                                           等同于SQL语句中的"LIKE 'value%'"子句
右匹配               MatchMode.END                                                等同于SQL语句中的"LIKE '%value'"子句

你可能感兴趣的:(hibernate QBC检索方式查询)