您的位置:首页 > 其它

hibernate的环境搭建

2014-04-29 14:17 183 查看
本文以hibernate来操纵mysql数据库,所以在此之前必须确保mysql数据库已经正确安装好。。。

1、导hibernate包的核心jar包。。。

2、导hbm.xml文件

3、导hibernate.cfg.xml文件

以上三个文件为hibernate环境搭建的基础材料...其可以到hibernate的官网去下载.....在这里我为大家准备好了我自己常用的版本http://download.csdn.net/detail/caihongshijie6/6584855

4、编写pojo类(这里以Student类为例)

[java] view
plaincopyprint?





package com.njupt.pojo;  

  

import java.io.Serializable;  

  

public class Student implements Serializable{  

  

    private int id;  

    private String name;  

    private String pwd;  

    private int age;  

    public int getId() {  

        return id;  

    }  

    public void setId(int id) {  

        this.id = id;  

    }  

    public String getName() {  

        return name;  

    }  

    public void setName(String name) {  

        this.name = name;  

    }  

    public String getPwd() {  

        return pwd;  

    }  

    public void setPwd(String pwd) {  

        this.pwd = pwd;  

    }  

    public int getAge() {  

        return age;  

    }  

    public void setAge(int age) {  

        this.age = age;  

    }  

      

      

      

}  

5、HibernateUtil类

[java] view
plaincopyprint?





package com.njupt.util;  

  

import org.hibernate.Session;  

import org.hibernate.SessionFactory;  

import org.hibernate.cfg.Configuration;  

  

public class HibernateUtil {  

//  创建SessionFactory  

    private static SessionFactory sessionFactory;  

//  使用静态代码块(只创建一次)来创建sessionFactory  

    static{  

//      读取配置hibernate.cfg.xml  

        try {  

            Configuration configuration =   

                new Configuration().configure("hibernate.cfg.xml");  

            sessionFactory = configuration.buildSessionFactory();  

        } catch (Exception e) {  

            e.printStackTrace();  

        }  

    }  

//  获得session  

    public static Session getSession(){  

        return sessionFactory.openSession();  

    }  

//  关闭session,session总是默认保存数据(save(),get(),load()...)  

//  很可能出现内存泄露  

    public static void close(Session session){  

        if(session!=null){  

            if(session.isOpen()){// null.isOpen  

                session.close();  

            }  

        }  

    }  

      

}  

6、进行测试

编写测试类SessionTest

[java] view
plaincopyprint?





package com.njupt.util;  

  

import java.util.Iterator;  

import java.util.List;  

  

import org.hibernate.Hibernate;  

import org.hibernate.HibernateException;  

import org.hibernate.Query;  

import org.hibernate.Session;  

import org.hibernate.Transaction;  

import org.junit.Test;  

  

import com.njupt.pojo.Student;  

import com.njupt.util.HibernateUtil;  

  

public class SessionTest {  

  

    // public void testSave(){  

    // // System.out.println("保存");  

    // String str =null;  

    // System.out.println(str.length());  

    // }  

    // 1 保存操作  

    @Test  

    public void testSave() {  

        Session session = null;  

        Transaction transaction = null;  

        try {  

            // 首先获得session  

            session = HibernateUtil.getSession();  

            // 获得Transaction  

            transaction = session.getTransaction();  

            // 开启事务  

            transaction.begin();  

            // 创建person对象  

            Student person = new Student();  

  

            person.setName("zzt_love_hjd");  

            person.setAge(21);  

            person.setPwd("123321");  

            // 使用session保存person对象  

            session.save(person);  

            // 提交事务  

            transaction.commit();  

        } catch (Exception e) {  

            // 打印异常信息  

            e.printStackTrace();  

            // 回滚  

            transaction.rollback();  

        } finally {  

            // 关闭session  

            HibernateUtil.close(session);  

        }  

    }  

  

    // 查询id=2的person对象  

    @Test  

    public void testGet1() {  

        Session session = null;  

        // 查询操作,对数据库的表没有任何修改,不用开启事务  

        try {  

            session = HibernateUtil.getSession();  

            // session.get()  

            Student person = (Student) session.get(Student.class, 3);  

            System.out.println("-------------------------------");  

            System.out.println(person.getId() + "," + person.getName());  

        } catch (Exception e) {  

            // TODO: handle exception  

            e.printStackTrace();  

        } finally {  

            HibernateUtil.close(session);  

        }  

    }  

  

    // 使用load加载对象  

    @Test  

    public void testLoad1() {  

        Session session = null;  

        try {  

            session = HibernateUtil.getSession();  

            // 没有发出sql语句  

            // load():不会立刻去查询数据库,hibernate会返回一个代理对象  

            // 暂时代替person对象(避免对数据库过于频繁的访问,  

            // 提高系统性能)  

            // hibernate 返回代理对象是cglib动态代理  

            // cglib返回是目标对象(Person)的子类对象  

            Student person = (Student) session.load(Student.class, 1);  

            System.out.println("-------------------");  

            // 真正需要访问数据的时候  

            // 发出了sql语句,person发出的sql语句  

            // hibernate返回的代理对象发出对应sql语句  

            System.out.println(person.getName());  

        } catch (Exception e) {  

            // TODO: handle exception  

            e.printStackTrace();  

        } finally {  

            HibernateUtil.close(session);  

        }  

    }  

  

    // get()查询的数据,在数据库中不存在  

    // 返回null  

    @Test  

    public void testGet2() {  

        Session session = null;  

        try {  

            session = HibernateUtil.getSession();  

            Student person = (Student) session.get(Student.class, 2);  

            System.out.println(person);  

        } catch (Exception e) {  

            // TODO: handle exception  

            e.printStackTrace();  

        } finally {  

            HibernateUtil.close(session);  

        }  

    }  

  

    // load()查询数据库中没有的数据  

    // 如果数据库中没有与之对应的数据,则抛出  

    // ObjectNotFoundException  

    // 常见异常:SQLException / HibernateException / NestableRuntimeException  

    @Test  

    public void testLoad2() {  

        Session session = null;  

        try {  

            session = HibernateUtil.getSession();  

            Student person = (Student) session.load(Student.class, 2);  

            System.out.println(person);  

        } catch (Exception e) {  

            // TODO: handle exception  

            e.printStackTrace();  

        } finally {  

            HibernateUtil.close(session);  

        }  

    }  

  

    // load:需要的时候才发出sql语句,去数据库中真实的查询  

    // 这叫做延迟加载/懒加载(预习)  

    // proxy:代理  

    // org.hibernate.LazyInitializationException:  

    // could not initialize proxy - no Session  

    // hibernate.load()返回的代理对象的生命周期跟session保持一致  

    // 关闭session,代理对象也不能使用了,不能发出sql语句  

    @Test  

    public void testLoad3() {  

        Session session = null;  

        Student person = null;  

        try {  

            session = HibernateUtil.getSession();  

            person = (Student) session.load(Student.class, 1);  

        } catch (Exception e) {  

            e.printStackTrace();  

        } finally {  

            HibernateUtil.close(session);  

        }  

  

        System.out.println(person.getName());  

  

    }  

  

    // 修改操作  

    @Test  

    public void testUpdate() {  

        Session session = null;  

        try {  

            session = HibernateUtil.getSession();  

            session.beginTransaction();// 直接开启一个事务  

            Student person = (Student) session.get(Student.class, 1);  

            person.setName("cangsong");  

            person.setAge(30);  

            session.update(person);  

  

            // getTransaction().commit();获得开启的事务,并提交  

            session.getTransaction().commit();  

        } catch (Exception e) {  

            // TODO: handle exception  

            e.printStackTrace();  

            // session.getTransaction().rollback();获得开启的事务,并回滚  

            session.getTransaction().rollback();  

        } finally {  

            HibernateUtil.close(session);  

        }  

    }  

  

    // 删除操作  

    @Test  

    public void testDelete() {  

        Session session = null;  

        try {  

            session = HibernateUtil.getSession();  

            session.beginTransaction();  

            Student person = (Student) session.get(Student.class, 2);  

            session.delete(person);  

            session.getTransaction().commit();  

        } catch (Exception e) {  

            // TODO: handle exception  

            e.printStackTrace();  

            session.getTransaction().rollback();  

        } finally {  

            HibernateUtil.close(session);  

        }  

    }  

  

    // 查询t_person中所有的对象  

    @Test  

    public void testQuery3() {  

        Session session = null;  

        try {  

            session = HibernateUtil.getSession();  

            // createQuery("hql语句"):用session来创建一个Query对象  

            // 封装hql语句  

            Query query = session.createQuery("from Person");  

            // 使用query做查询操作,返回的结果保存到了一个list集合当中  

            List list = query.list();  

            // 对集合的遍历  

            Iterator<Student> iterator = list.iterator();  

            while (iterator.hasNext()) {  

                Student person = iterator.next();  

                System.out.println(person.getId() + "," + person.getName());  

            }  

        } catch (Exception e) {  

            // TODO: handle exception  

            e.printStackTrace();  

        } finally {  

            HibernateUtil.close(session);  

        }  

    }  

  

}  

经过以上的6步这时候,你便能在通过hibernate来操作数据库了................................

!!!!特别提醒:要想使用hibernate的自动建表功能,可以在hibernate.cfg.xml中按如下配置:

<property name="hbm2ddl.auto">update</property> 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: