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> </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,两个参数依次为要检索属性和检索值
多条件等于 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'"子句