在myeclipse中基于Hibernate框架开发的入门小程序

来源:互联网 发布:数据库中索引是什么 编辑:程序博客网 时间:2024/05/18 02:09

Hibernate框架开发入门


本人最近在学习j2ee框架,学到Hibernate框架开发,花了一天时间弄懂,觉得有必要贴出来大家分享,为初学者提供一些思路。

一、创建Hibernate框架所需环境
①搭建Hibernate框架
Hibernate所需的框架只需要别忘了还有个mysql驱动也就是mysql-connector-java-5.1.18-bin.jar;这个很重要,可以自己到网上去下载,很多的啦,我在这就不赘余了。

②创建数据库,在本地创建一个测试数据库mysqldb,并创建一张User表。

③创建HibernateDemo项目
在myeclipse中(我使用的IDE是myeclipse,很好用,很多框架都直接集成的)新建一个Web Project,名称为HibernateDemo,右键直接—>Myeclipse—>Add Hibernate Capabilities—>next—>next—>选择一个数据库驱动(数据库驱动的建立稍后再后文说)—>next—>创建一个放SessionFactory类文件的包(HibernateConf)—>finish。然后右键—>build path—>Configure build path将下载的框架放进来,还有WEB-INF下lib中的数据库驱动也放进来,这样才能加载到类路径下。至此项目创建完成。

④创建持久化类和设计映射文件,使用Hibernate映射文件将POJO对象映射到数据库。
项目建好了之后,将数据库中的关系与程序中的映射关系建立好,也就是ORM(Object Relationship Mapping)映射关系。即通过POJOs(Plain Old Java Objects)类的编程模式来进行持久化,通过面向对象的方式将关系型数据库中的数据表以更为清晰的、可操作的模式展现出来。
具体操作方法:在myeclipse中可以直接切换到DB Browser模式中,双击数据库驱动找到你创建的数据库下的User表,右键—>Hibernate Reverse Engineering—>选择存放持久化对象和映射文件的位置—>finish。

⑤编写hibernate.cfg.xml配置文件
在创建项目的时候我们的hibernate.cfg.xml配置文件是自动生成的,所以该有的数据库或者映射文件列表都自动生成好了,所以改动的不多,不过比如你如果想看到操作数据库时的sql语句是否正确,你可以在配置文件中加
<property name="show_sql">true</property>等等配置

⑥编写HibernateUtil.java工具类
HibernateUtil.java工具类主要的作用是负责Hibernate的启动和负责完成存储和访问SessionFactory的工作。HibernateUtil可以很轻松的访问获取到Session,从而实现对数据的存储与获取等操作。
主要用的一些类的方式:
Configuration:用于创建SessionFactory
SessionFactory:用于创建Session
ThreadLocal:用于存储Session变量
具体代码:

package com.hibernate.entity;import org.hibernate.HibernateException;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;/*Hibernate:辅助工具类,既负责Hibernate的启动,也负责完成存储和访问SessionFactory的工作。 * 使用Hibernate类来处理java应用程序中的Hibernate的启动是一种常见的模式 */public class HibernateUtil {    private static SessionFactory sessionfactory;    // 创建线程局部变量threadLocal,用来保存Hibernate中的Session    private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();    // 使用静态代码块来初始化Hibernate    static {        try {            Configuration cfg = new Configuration().configure("/HibernateConf/hibernate.cfg.xml");// 读取配置文件hibernate.cfg.xml            sessionfactory = cfg.buildSessionFactory(); // 创建SessionFactory        } catch (Throwable ex) {            throw new ExceptionInInitializerError(ex);        }    }    // 获得SessionFactory的实例    public static SessionFactory getSessionFactory() {        return sessionfactory;    }    // 获得ThreadLocal对象管理的Session实例    public static Session getSession() throws HibernateException {        Session session = (Session) threadLocal.get();        if (session == null || !session.isOpen()) {            // 通过sessionfactory创建session            if (sessionfactory == null) {                rebuildSessionFactory();            }            session = (sessionfactory != null) ? sessionfactory.openSession()                    : null;            threadLocal.set(session);        }        return session;    }    // 关闭Session实例    public static void closeSession() throws HibernateException {        Session session = threadLocal.get();        threadLocal.set(null);        if (session != null) {            session.close();        }    }    // 关闭缓存和连接池    public static void shutdown() {        sessionfactory = getSessionFactory();        if (sessionfactory != null) {            sessionfactory.close();        }    }    // 重建SessionFactory    private static void rebuildSessionFactory() {        try {            Configuration cfg = new Configuration()                    .configure("/HibernateConf/hibernate.cfg.xml");            sessionfactory = cfg.buildSessionFactory();        } catch (Exception e) {            System.out.println("SessionFactory build error");            e.printStackTrace();        }    }}

注:Configuration在创建SessionFactory之前需要先通过configure()方法读取配置文件hibernate.cfg.xml,如果你直接将配置文件放在类加载路径下(也就是src)那么直接调用configure(“/hibernate.cfg.xml”)方法就可以了,但是如果你是放在比如包HibernateConf下面的那么Configuration实例就会根据参数去找了,所以这是你要将你的路径作为参数即configure(“/HibernateConf/hibernate.cfg.xml”)。

⑦编写DAO接口UserDAO

package com.hibernate.DAO;import com.hibernate.entity.User;public interface UserDAO {    void save(User user); // 添加用户    User findById(int id); // 查找用户    void delete(User user); // 删除用户    void update(User user); // 修改用户信息}

⑧编写DAO层实现类UserDAOImpl

package com.hibernate.DAO;import org.hibernate.Session;import org.hibernate.Transaction;import com.hibernate.entity.HibernateUtil;import com.hibernate.entity.User;public class UserDAOImpl implements UserDAO{    //新增用户    public void save(User user) {        Session session = HibernateUtil.getSession();   //获取session        Transaction tx = session.beginTransaction();    //创建事务        try{            session.save(user);            tx.commit();    //提交事务        }catch(Exception e){            System.out.println("保存失败!");            e.printStackTrace();            tx.rollback();  //事务回滚        }finally{            HibernateUtil.closeSession();   //关闭Session资源        }    }    public User findById(int id) {        User user = null;        Session session = HibernateUtil.getSession();        Transaction tx = session.beginTransaction();        try{            user = session.get(User.class, id);            tx.commit();        //提交事务        }catch(Exception e){            System.out.println("查找失败");            e.printStackTrace();            tx.rollback();      //回滚事务        }finally{            HibernateUtil.closeSession();   //关闭Session资源        }        return user;    }    public void delete(User user) {        Session session = HibernateUtil.getSession();        Transaction tx = session.beginTransaction();        try{            session.delete(user);            tx.commit();        }catch(Exception e){            System.out.println("删除用户失败");            e.printStackTrace();            tx.rollback();        }finally{            HibernateUtil.closeSession();        }    }    public void update(User user) {        Session session = HibernateUtil.getSession();        Transaction tx = session.beginTransaction();        try{            session.update(user);            tx.commit();        }catch(Exception e){            System.out.println("用户信息更新失败");            e.printStackTrace();            tx.rollback();        }finally{            HibernateUtil.closeSession();        }    }}

⑨编写测试类UserTest

package com.hibernate.DAO;import org.junit.Test;import com.hibernate.entity.User;//测试用例public class UserTest {    @Test    public void UserSave(){        UserDAO userdao = new UserDAOImpl();        try{            User user = new User();            user.setName("test1");            user.setPassword("123456");            user.setType(1);            user.setUserId(1);            userdao.save(user);        }catch(Exception e){            System.out.println("这出错了,添加失败");            e.printStackTrace();        }    }}

程序运行结果:

备注:
建数据库驱动
切换到DB Browser视图,右键new—>填写驱动信息,导入数据库驱动包就可以了

1 0
原创粉丝点击