get/load)Criteria:主查詢接口,繼承 CriteriaSpecificationRestrictions:條件構建工廠,返回 CriterionOrder:排序Projections:投影/聚合

Criteria c = session.createCriteria(Dept.class); Listlist = c.list();
Criterion criterion = Restrictions.eq("dName", "開發部");
c.add(criterion);
list = session.createCriteria(Employee.class, "emp")
.createAlias("dept", "d")
.add(Restrictions.ilike("emp.ename", "a", MatchMode.ANYWHERE))
.add(Restrictions.eq("d.dName", "開發部").ignoreCase())
.list();
// 方式三:設置抓取模式 + 去重
List list = session.createCriteria(Dept.class, "d")
.setFetchMode("emps", FetchMode.JOIN)
.add(Restrictions.eq("d.loc", "北京").ignoreCase())
.list();
new HashSet<>(list).forEach(d -> ...); // 過濾重複
Listcities = Arrays.asList("bj", "sh"); c.add(Restrictions.in("empCity", cities));
c.add(Restrictions.ilike("empCity", "%b%")); // 不區分大小寫
Criterion c1 = Restrictions.eq("empCity", "bj");
Criterion c2 = Restrictions.like("empName", "號", MatchMode.ANYWHERE);
c.add(Restrictions.and(c1, c2));
c.add(Restrictions.isEmpty("emps")); // 查無員工部門
Criteria c = session.createCriteria(Employee.class);
if (cond.getEname() != null) c.add(Restrictions.like("ename", cond.getEname(), MatchMode.EXACT));
if (cond.getEmpno() != null) c.add(Restrictions.eq("empno", cond.getEmpno()));
List list = c.list();
c.addOrder(Order.asc("empno")); // 或 desc
// 總記錄數
Integer count = ((Long) session.createCriteria(Employee.class)
.setProjection(Projections.count("empno")).uniqueResult()).intValue();
// 分頁查詢
int pageSize = 3, pageIndex = 2;
List list = session.createCriteria(Employee.class)
.addOrder(Order.desc("empno"))
.setFirstResult((pageIndex - 1) * pageSize)
.setMaxResults(pageSize)
.list();
DetachedCriteria dc = DetachedCriteria.forClass(Emp.class);
dc.createAlias("dept", "d");
dc.add(Restrictions.eq("d.deptName", "開發部"));
List list = dc.getExecutableCriteria(session).list();
優勢:無需 Session 創建,可傳遞給 Service 層組裝條件。
Employee emp = (Employee) session.createCriteria(Employee.class)
.add(Restrictions.isNotNull("empno"))
.addOrder(Order.desc("empno"))
.setMaxResults(1) // 防 NonUniqueResultException
.uniqueResult();
rows = c.setProjection(Projections.projectionList()
.add(Property.forName("loc"))
.add(Property.forName("dName"))).list();
for (Object[] row : rows) { System.out.println(row[0] + ", " + row[1]); }

hibernate-annotations.jar、ejb3-persistence.jarnew AnnotationConfiguration().configure().buildSessionFactory()hibernate.cfg.xml 中用 <mapping class="..."/> 註冊實體| 註解 | 作用 | 關鍵屬性 |
|---|---|---|
@Entity | 標識實體類 | |
@Table | 指定表名 | name |
@Id | 主鍵 | |
@GeneratedValue | 主鍵生成策略 | strategy(AUTO/IDENTITY/SEQUENCE/TABLE) |
@Column | 列映射 | name, length, nullable, unique |
@Temporal | 日期類型 | value(DATE/TIME/TIMESTAMP) |