Hibernate(四)完整的操作CRUD

前面我们写了一个Hibernate入门的小程序,但也只是简单的向db_user数据库中的t_user表中插入一条记录,现在我们来写第二个Hibernate程序——实现对数据库完整的操作(CRUD)。

首先我们需要创建一个工具类——HibernateUtil.java,该工具类的作用专门用来获取全局唯一的SessionFactory,以及从全局唯一的SessionFactory中打开一个Session。
代码如下:

public class HibernateUtil {
    private static Configuration configuration=null;
    private static SessionFactory sessionFactory=null;
    //本地化线程  底层有一个Map K:线程ID V:session 一个线程绑定一个session
    private static ThreadLocal localSession;

    //静态加载
    static {
        try {
            //加载配置文件(默认加载hibernate.cfg.xml)
            configuration= new Configuration().configure();
            //开启sessionfactory
            sessionFactory=configuration.buildSessionFactory();
            //创建ThreadLocal实例
            localSession=new ThreadLocal();
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("加载hibernate文件失败");
        }
    }

    /**
     * 开启session会话
     * @return session对象
     */

    public static Session getSession() {
        //
        Session session=localSession.get();
        if(session==null) {
            session =sessionFactory.openSession();
            localSession.set(session);
        }
        return session;
    }

    //关闭session会话
    public static void closeSession() throws HibernateException{
        Session session=localSession.get();
        if(session!=null) {
            session.close();
        }
        localSession.set(null);
    }
}

最后,我们创建一个类——UserEntityTest。UserEntityTest类里面编写代码实现对数据库完整的操作(CRUD)。
由于一个程序只有一个主方法,在测试不同功能的情况下,main方法显得尤为麻烦,所以我们就建立一个测试工具类JUnit。该类继承TestCase类,这样我们在UserEntityTest.java类中测试数据库中的某个方法,方法名的规范要以Test开头。

public class UserEntityTest extends TestCase {

    /**
     * 往数据库添加实体类对象
     */
    public void TestSave() {
        Session session = HibernateUtil.getSession();
        for (int i = 0; i < 5; i++) {
            UserEntity userEntity = new UserEntity();
            userEntity.setUserName("张三" + i);
            userEntity.setUserAge(i + 1);
            // 开启事物
            session.beginTransaction();
            session.save(userEntity);
            // 提交事物
            session.getTransaction().commit();
        }

    }

    /**
     * 从数据库删除持久化对象
     */
    public void TestDelete() {
        Session session = HibernateUtil.getSession();
        UserEntity userEntity = (UserEntity) session.get(UserEntity.class, 1);
        session.delete(userEntity);
        // 开启事物
        session.beginTransaction();
        // 提交事物
        session.getTransaction().commit();
    }

    /**
     * 更改数据库持久化对象属性
     */
    public void TestUpdate() {
        Session session = HibernateUtil.getSession();
        // 得到持久化对象
        UserEntity userEntity = (UserEntity) session.get(UserEntity.class, 1);
        // 更改名字
        userEntity.setUserName("李四");
        // 开启事物
        session.beginTransaction();
        // 提交事物
        session.getTransaction().commit();
    }

    /**
     * 从数据库查询实体类
     */
    public void TestGet() {
        Session session=HibernateUtil.getSession();
        UserEntity userEntity=(UserEntity) session.get(UserEntity.class,2);
        System.out.println(userEntity);
    }

}

备注:以上功能需要在完成hibernate配置文件和完成实体类.hbm.xml映射中进行
点击查看如何配置Hibernate映射文件

你可能感兴趣的:(hibernate)