为了账号安全,请及时绑定邮箱和手机立即绑定

Hibernate泛型DAO编写

标签:
Java
package com.saicmaxus.user.repository.dao;

import java.lang.reflect.ParameterizedType;
import java.util.Collection;
import java.util.List;

import javax.naming.InitialContext;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

public class HibernateDao<T> {

    private final SessionFactory sf = getSessionFactory();
    private Class<T> clazz;

    public void ddl() {
        Configuration cfg = new Configuration();
        cfg.configure();
        // SchemaExport export=new SchemaExport(cfg);
        // export.create(true, true);

    }

    public HibernateDao() {

    }

public void closeSessionFactory(){
    sf.close();
}
    protected SessionFactory getSessionFactory() {
        Configuration conf = new Configuration().configure();
        ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
                .applySettings(conf.getProperties()).build();
        SessionFactory factory = conf.buildSessionFactory(serviceRegistry);
        return factory;
    }

    public void saveEntity(T t) {
        Session session = sf.getCurrentSession();
        Transaction transaction = session.beginTransaction();
        session.save(t);
        transaction.commit();
        session.close();
    }

    public void updateEntity(T t) {
        Session session = sf.getCurrentSession();
        Transaction transaction = session.beginTransaction();
        session.update(t);
        transaction.commit();
        session.close();
    }

    public void saveOrUpdateEntity(T t) {
        Session session = sf.getCurrentSession();
        Transaction transaction = session.beginTransaction();
        session.saveOrUpdate(t);
        transaction.commit();
        session.close();
    }

    public void deleteEntity(T t) {
        Session session = sf.getCurrentSession();
        Transaction transaction = session.beginTransaction();
        session.delete(t);
        transaction.commit();
        session.close();
    }

    // 批量更新
    public void batchEntityByHQL(String hql, Object... objects) {
        Query q = sf.getCurrentSession().createQuery(hql);
        for (int i = 0; i < objects.length; i++) {
            q.setParameter(i, objects[i]);
        }
        q.executeUpdate();
    }

    public T getEntity(Number id, Class<T> clazz) {
        Session session = sf.getCurrentSession();
        Transaction transaction = session.beginTransaction();
        T t = (T) session.get(clazz, id);
        transaction.commit();
        return t;
    }

    public T loadEntity(Number id, Class<T> clazz) {
        Session session = sf.getCurrentSession();
        Transaction transaction = session.beginTransaction();
        T t = (T) session.load(clazz, id);
        transaction.commit();
        return t;

    }

    public List<T> findEntityByHQL(String hql, Object... objects) {
        Session session = sf.getCurrentSession();
         Transaction transaction = session.beginTransaction();
        Query q = session.createQuery(hql);
        for (int i = 0; i < objects.length; i++) {
            q.setParameter(i, objects[i]);
        }
        List<T> list = q.list();
        transaction.commit();
        return list;
    }
}
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
56
获赞与收藏
363

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消