– Start
除了 HQL 和 JPQL 外,Hibernate 还提供了一个查询接口 Criteria ,不过老的查询接口(org.hibernate.Criteria) 已经不推荐使用了,推荐我们使用新的接口(javax.persistence.criteria.CriteriaQuery)。
package shangbo.hibernate.demo033;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.Metadata;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
public class DataService implements AutoCloseable {
private SessionFactory sessionFactory;
public DataService() {
// 第一步:构造 ServiceRegistry
StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure(ClassLoader.getSystemResource("shangbo/hibernate/demo033/hibernate.cfg.xml")).build();
// 第二步:构造 Metadata
Metadata metadata = new MetadataSources(registry).getMetadataBuilder().applyPhysicalNamingStrategy(new MyPhysicalNamingStrategy()).build();
// 第三步:构造 SessionFactory
sessionFactory = metadata.buildSessionFactory();
}
public void beginTransaction() {
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
}
public void commit() {
Session session = sessionFactory.getCurrentSession();
session.getTransaction().commit();
session.close();
}
// Hibernate Criteria Query API
public Customer queryCustomerByName(String name) throws Exception {
Session session = sessionFactory.getCurrentSession();
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<Customer> criteria = builder.createQuery(Customer.class);
Root<Customer> root = criteria.from(Customer.class);
criteria.select(root);
criteria.where(builder.equal(root.get(Customer_.customerName), name));
return session.createQuery(criteria).getSingleResult();
}
public void save(Object o) {
Session session = sessionFactory.getCurrentSession();
session.save(o);
}
@Override
public void close() throws Exception {
// 关闭 SessionFactory
sessionFactory.close();
}
}
注意例子中下面的代码,它是什么东西呢?它是 JPA 元模型,是自动生成的,怎么自动生成呢?我们下回分解。
Customer_.customerName
– 更多参见:Hibernate 精萃
– 声 明:转载请注明出处
– Last Updated on 2019-07-11
– Written by ShangBo on 2019-07-11
– End