Hibernate查询和连接池技术

6 篇文章 0 订阅
2 篇文章 0 订阅

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视图中配置连接池地址信息就可以直接用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值