hibrnate教程3~hibrnate的工具类创建

为什么要统一管理hirbate的sessionfactory?、

SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。

这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。

创建sessionfactory的工具类统一管理?

public class HibernateUtils {


    // SessionFactory全局只需要有一个就可以了
    private static SessionFactory sessionFactory;


    static {
        // 初始化SessionFactory
        sessionFactory = new Configuration()//
                .configure()//
                .buildSessionFactory();

    }


    /**
     * 获取全局唯一的SessionFactory
     *
     * @return
     */
    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }


    /**
     * 从全局唯一的SessionFactory中打开一个Session
     *
     * @return
     */
    public static Session openSession() {
        return sessionFactory.openSession();
    }
} 
 

使用sessionfactory进行CRUD操作

1.先创建一个DAO对象

  public class UserDao {

        /**
         * 保存
         *
         * @param user
         */
        public void save(User user) {
            Session session = HibernateUtils.openSession();
            try {
                Transaction tx = session.beginTransaction(); // 开始事务
                session.save(user);
                tx.commit(); // 提交事务

            } catch (RuntimeException e) {
                session.getTransaction().rollback(); // 回滚事务
                throw e;
            } finally {
                session.close(); // 关闭Session
            }
        }

        /**
         * 更新
         *
         * @param user
         */
        public void update(User user) {
            Session session = HibernateUtils.openSession();
            Transaction tx = null;
            try {
                tx = session.beginTransaction();

                session.update(user); // 操作

                tx.commit();
            } catch (RuntimeException e) {
                tx.rollback();
                throw e;
            } finally {
                session.close();
            }
        }

        /**
         * 删除
         *
         * @param id
         */
        public void delete(int id) {
            Session session = HibernateUtils.openSession();
            Transaction tx = null;
            try {
                tx = session.beginTransaction();

                Object user = session.get(User.class, id); // 要先获取到这个对象
                session.delete(user); // 删除的是实体对象

                tx.commit();
            } catch (RuntimeException e) {
                tx.rollback();
                throw e;
            } finally {
                session.close();
            }
        }

        /**
         * 根据id查询一个User数据
         *
         * @param id
         * @return
         */
        public User getById(int id) {
            Session session = HibernateUtils.openSession();
            Transaction tx = null;
            try {
                tx = session.beginTransaction();
                User user = (User) session.get(User.class, id); // 操作
                tx.commit();
                return user;
            } catch (RuntimeException e) {
                tx.rollback();
                throw e;
            } finally {
                session.close();
            }
        }

        /**
         * 查询所有
         *
         * @return
         */
        public List<User> findAll() {
            Session session = HibernateUtils.openSession();
            Transaction tx = null;
            try {
                tx = session.beginTransaction();

                // 方式一:使用HQL查询
//       List<User> list = session.createQuery("FROM User").list(); 

                // 方式二:使用Criteria查询
                Criteria criteria = session.createCriteria(User.class);
                List<User> list = criteria.list();

                tx.commit();
                return list;
            } catch (RuntimeException e) {
                tx.rollback();
                throw e;
            } finally {
                session.close();
            }
        }

 

2.。创建测试类进行测试

public class UserDaoTest {

    private UserDao userDao = new UserDao();

    @Test
    public void testSave_1() {
        User user = new User();
        user.setName("张三");

        // 保存
        userDao.save(user);
    }

    @Test
    public void testGetById() {
        User user = userDao.getById(2);
        System.out.println(user);
    }

    @Test
    public void testUpdate() {
        // 从数据库获取一条存在的数据
        User user = userDao.getById(2);
        user.setName("李四");

        // 更新
        userDao.update(user);
    }

    @Test
    public void testDelete() {
        userDao.delete(1);
    }

    // ------------

    @Test
    public void testSave_25() {
        for (int i = 1; i <= 25; i++) {
            User user = new User();
            user.setName("test_" + i);
            userDao.save(user); // 保存
        }
    }

    @Test
    public void testFindAll() {
        List<User> list = userDao.findAll();
        for (User user : list) {
            System.out.println(user);
        }
    }
这样通过一个sessionfactory的简单的增删改查就完成了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值