ORM框架之Hibernate简介&Query的用法

HIbernate核心接口有SessionFactory,Session,Transaction来帮助进行持久化操作,其中最核心的为Session,通过Session来进行增删改查的操作。

 

文章目录
前言
一、Query用法
二、使用步骤
1.在manageUser中扩展一些功能
2.运行
总结
 


前言
Configuration对象:连数据库相关信息都通过Configuration;Configuration类负责管理Hibernate的配置信息。启动Hibernate、创建SessionFactory对象。

创建SessionFactory对象:它是一个重量级对象,一般情况下,一个项目通常只需要一个SessionFactory(单例模式),使用静态代码块static(在类加载时即可使用,在Session中增删改查)

Session(会话)对象:负责执行被持久化对象的curd操作(增删改查操作),用getCurrentSession方法保证一个线程中仅存一个Session实例。(使用getCurrentSession需在配置文件加入<porperty name = "hibernate.current_session_context_class">  thread  </property>)

Transaction(事务):负责事务相关操作,对数据库的操作需提交事务才可以生效。

Query:用于查询对象。在数据库上执行查询并控制查询如何执行。(调用代码:Query query = session.createQuery("from User");)

 

一、Query用法
继ORM框架入门之如何使用Hibernate实现用户添加的项目,使用单元测试来单独测试一个方法,使用Query用法。

二、使用步骤
1.在manageUser中扩展一些功能
代码如下(示例):

package cn.hrbust.dao;
 
import java.sql.Date;
import java.util.List;
 
 
 
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.query.Query;
 
import cn.hrbust.pojo.User;
import junit.framework.TestCase;
 
public class managerUser extends TestCase {
    
    //查询用户对象
    public void testQueryUser() {
        SessionFactory sf = null;
        
        Configuration cfg =null;
        Session session = null;
        Transaction ts = null;
        
            try {    
                
                sf = HibernateUtil.getSessionFactory();//sessionFactory单态模式
                session = sf.getCurrentSession();//保证每个读写线程有唯一的session实例
                ts = session.beginTransaction();
            Query query = session.createQuery("from User");
            List<User>users = query.list();
            
            //访问结构元素
            //方式一
//            for(int i = 0 ; i < users.size();i++)
//            {
//                User u =users.get(i);
//                System.out.println(u.getName()+" "+u.getAge());
//            }
            //方式二(更简便一些)
            for(User u : users)
           {System.out.println(u.getName()+" "+u.getAge());}
                ts.commit();
                
    }catch(HibernateException e) {
        e.printStackTrace();
        if(ts!=null) {
            ts.rollback();
        }
    }finally {
            session.close();
            //sf.close();
        }
    }
     
    public static void main1(String[] args) {
        SessionFactory sf = null;
        
    
        Session session = null;
        Transaction ts = null;
        User u = new User();
        u.setName("李斯");    
        u.setGender("man");
        u.setAge(21);
        u.setBirthday(Date.valueOf("2000-6-6"));
        
            try {    
                
                sf = HibernateUtil.getSessionFactory();
                session = sf.getCurrentSession();
                ts = session.beginTransaction();
                session.save(u);
                ts.commit();
                
    }catch(HibernateException e) {
        e.printStackTrace();
        if(ts!=null) {
            ts.rollback();
        }
    }finally {
            session.close();
            //sf.close();
        }
    }
 
    
    
    //保存用户
    public void testSaveUser() {
        SessionFactory sf = null;
        
        Configuration cfg =null;
        Session session = null;
        Transaction ts = null;
        User u = new User();
        u.setName("张三儿");    
        u.setGender("man"); 
        u.setAge(27);
        u.setBirthday(Date.valueOf("2000-6-6"));
        
            try {                    
                sf = HibernateUtil.getSessionFactory();//sessionFactory单态模式
                session = sf.getCurrentSession();//保证每个读写线程有唯一的session实例
                ts = session.beginTransaction();
                session.save(u);
                ts.commit();
                
    }catch(HibernateException e) {
        e.printStackTrace();
        if(ts!=null) {
            ts.rollback();
        }
    }finally {
            session.close();
            //sf.close();
        }
    }   
 
    public static void main(String[] args) {
        SessionFactory sf = null;
        Session session = null;
        Transaction ts = null;
        User u = new User();
        u.setName("李斯");    
        u.setGender("man");
        u.setAge(21);
        u.setBirthday(Date.valueOf("2000-6-6"));   
            try {                   
                sf = HibernateUtil.getSessionFactory();
                session = sf.getCurrentSession();
                ts = session.beginTransaction();
                session.save(u);
                ts.commit();
                
    }catch(HibernateException e) {
        e.printStackTrace();
        if(ts!=null) {
            ts.rollback();
        }
    }finally {
            session.close();
            //sf.close();
        }
    }
}    

注意:Query方法导包不要导错,import org.hibernate.query.Query ; TestCase 要导入junit包,import junit.framework.TestCase

2.运行
使用Junit.test运行,运行成功,则插入用户对象成功。

单独测试Query方法,使用Junit.test运行,即可看见插入的用户对象,是用面向对象的方式获取的。


总结
本篇文章在前言对Hibernate API简介以及Query查询的用法进行了大致的说明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值