– Start
就如数据库提供 SQL 来查询数据库,JPA 规范提供了 JPQL (Java Persistence Query Language),Hibernate 提供了 HQL(Hibernate Query Language) 来查询数据库。其实它们的语法非常类似的。HQL 的核心接口是 org.hibernate.query.Query,通过它我们还可以直接调用 SQL 语句或存储过程。
package shangbo.hibernate.demo031;
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/demo029/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();
}
// JPA Query API
public Customer queryCustomerByName(String name) throws Exception {
Session session = sessionFactory.getCurrentSession();
javax.persistence.Query query = session.createQuery("from Customer where customerName = :customerName");
query.setParameter("customerName", name);
return (Customer) query.getSingleResult();
}
// Hibernate Query API
public Customer queryCustomerByName2(String name) throws Exception {
Session session = sessionFactory.getCurrentSession();
org.hibernate.query.Query<Customer> query = session.createQuery("from Customer where customerName = :customerName", Customer.class);
query.setParameter("customerName", name);
return query.getSingleResult();
}
public void save(Object o) {
Session session = sessionFactory.getCurrentSession();
session.save(o);
}
@Override
public void close() throws Exception {
// 关闭 SessionFactory
sessionFactory.close();
}
}
– 更多参见:Hibernate 精萃
– 声 明:转载请注明出处
– Last Updated on 2019-07-09
– Written by ShangBo on 2019-07-09
– End