Hibernate支持的两种主要查询方式:HQL查询 和 Criteria 查询
接下来,我们先来介绍HQL查询语言:
HQL查询语言是一种面向对象的查询语言,使用类、对象和属性的概念,没有表和字段的概念。
HQL优点:查询结果直接保存在List中,不需要再次封装。可以通过配置dialect属性对于不同数据库生成不同的sql查询语言。
HQL查询的过程是:
获得session-->编写HQL语句-->创建Query对象-->执行查询并获得结果
//TestHQL.java
package HQL_search;
import java.util.Iterator;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import User.User;
public class TestHQL {
public static void main(String[] args) {
//获取session
Configuration config = new Configuration().configure();
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.openSession();
//编写HQL语句
String hql = "from books";
//创建QUery对象
Query query = session.createQuery(hql);
//执行查询,获得结果
List list = query.list();
//遍历查找结果
Iterator itor = list.iterator();
while(itor.hasNext()) {
User user = (User)itor.next();
System.out.println(user.getLoginName()+" "+user.getLoginPwd());
}
}
}
//注意:Query是HQL的查询接口。
//使用HQL语句查询和SQL语句查询都需要手写查询的语句,所以不管怎样,都还是很麻烦,需要程序员去写大量的查询语句的代码。所以还是很不方便。
Criteria使用一种API来查询对象,这个API是封装了字符串形式的查询语句的API。
所以我们采用了Criteria方式来查询,面向对象。
我们使用 Criteria 提供的辅助类 Restrictions 来解释整个查询过程:
获得session–>创建Criteria对象–>使用辅助类编写查询条件,并将查询条件加入Criteria对象中–>执行查询并获得结果。
package HQL_search;
import java.util.Iterator;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Restrictions;
import User.User;
public class TestHQL {
public static void main(String[] args) {
//获取session
Configuration config = new Configuration().configure();
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.openSession();
//创建Criteria对象
Criteria criteria = session.createCriteria(User.class);
User user = new User();
//使用辅助类编写查询条件,并将查询条件加入Criteria对象中
if(user != null) {
if(user.getLoginName() != null && user.getLoginName().equals("")) {
//按名字进行查询
criteria.add(Restrictions.like("name", user.getLoginName(),MatchMode.ANYWHERE));
}
if(user.getId() != null && user.getId().equals("")) {
//按id查询
criteria.add(Restrictions.like("id", user.getId()));
}
}
//执行查询,获得结果
List list = criteria.list();
//遍历查找结果
Iterator itor = list.iterator();
while(itor.hasNext()) {
User user1 = (User)itor.next();
System.out.println(user1.getLoginName()+" "+user1.getLoginPwd());
}
}
}
匹配模式:
MatchMode.ANYWHERE 模糊匹配
MatchMode.EXACT 精确匹配
MatchMode.START 以某个字符为开头进行匹配
MatchMode.END 以某个字符为结尾进行匹配
最后我们来介绍连接池技术:
基本思想:在初始化的时候预先建立一些连接并存放在连接池中备用。
我们主要介绍怎样在Hibernate中配置连接池:
直接在configuration视图中配置连接池地址信息就可以直接用。