• day37 08-Hibernate的反向工程


    反向工程:先创建表,创建好表之后,就是持久化类和映射文件可以不用你写,而且你的DAO它也可以帮你生成。但是它生成的DAO可能会多很多的方法。你可以不用那么多方法,但是它里面提供了这种的。用hibernate,必须得用myeclipse里面的这种自动生成的工具。其实myeclipse它里面对Struts和Spring都有集成。但是这种集成对三大框架整合的时候会有问题。


    用hibernate的时候最好先建一个连接数据库的模板。这个时候它可以帮我们把核心配置文件hibernate.cfg.xml中的参数全部设置好。如果你没有hibernate.cfg.xml这个模板的话,它最多帮你把hibernate的jar包拷贝过来。最多能帮你创建一个工具类HibernateUtils.java。如果你把hibernate.cfg.xml创建好了,它可以帮你把核心配置文件中的参数设置好。


    回到MyEclipse Database  Explorer Perspective,选择数据库表右键逆向工程生成类和映射文件。

    是把表全选之后再Hibernate Reverse Engineering


    你自己引jar包是不能反向工程的,只能使用MyEclipse的hibernate支持才可以反向工程。使用hibernate支持的web工程和普通的web工程的logo都不一样。如果使用MyEclipse的hibernate、Struts、Spring的支持进行三大框架整合是会报错的,因为里面有很多重复的jar包。


    package cn.itcast.utils;
    
    import org.hibernate.HibernateException;
    import org.hibernate.Session;
    import org.hibernate.cfg.Configuration;
    
    /**
     * Configures and provides access to Hibernate sessions, tied to the
     * current thread of execution.  Follows the Thread Local Session
     * pattern, see {@link http://hibernate.org/42.html }.
     */
    public class HibernateSessionFactory {
    
        /** 
         * Location of hibernate.cfg.xml file.
         * Location should be on the classpath as Hibernate uses  
         * #resourceAsStream style lookup for its configuration file. 
         * The default classpath location of the hibernate config file is 
         * in the default package. Use #setConfigFile() to update 
         * the location of the configuration file for the current session.   
         */
        private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
        private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
        private  static Configuration configuration = new Configuration();    
        private static org.hibernate.SessionFactory sessionFactory;
        private static String configFile = CONFIG_FILE_LOCATION;
    
        static {
            try {
                configuration.configure(configFile);
                sessionFactory = configuration.buildSessionFactory();
            } catch (Exception e) {
                System.err
                        .println("%%%% Error Creating SessionFactory %%%%");
                e.printStackTrace();
            }
        }
        private HibernateSessionFactory() {
        }
        
        /**
         * Returns the ThreadLocal Session instance.  Lazy initialize
         * the <code>SessionFactory</code> if needed.
         *
         *  @return Session
         *  @throws HibernateException
         */
        public static Session getSession() throws HibernateException {
            Session session = (Session) threadLocal.get();//getSession是从当前线程往外取的.从当前线程获取session
            //threadLocal获取当前线程的session 我们是getCurrentSession(),然后在核心配置文件还要配置一句
    
            if (session == null || !session.isOpen()) {
                if (sessionFactory == null) {
                    rebuildSessionFactory();
                }
                session = (sessionFactory != null) ? sessionFactory.openSession()
                        : null;
                threadLocal.set(session);//绑定到当前线程里面
            }
    
            return session;
        }
    
        /**
         *  Rebuild hibernate session factory
         *
         */
        public static void rebuildSessionFactory() {
            try {
                configuration.configure(configFile);
                sessionFactory = configuration.buildSessionFactory();
            } catch (Exception e) {
                System.err
                        .println("%%%% Error Creating SessionFactory %%%%");
                e.printStackTrace();
            }
        }
    
        /**
         *  Close the single hibernate session instance.
         *
         *  @throws HibernateException
         */
        public static void closeSession() throws HibernateException {
            Session session = (Session) threadLocal.get();
            threadLocal.set(null);
    
            if (session != null) {
                session.close();
            }
        }
    
        /**
         *  return session factory
         *
         */
        public static org.hibernate.SessionFactory getSessionFactory() {
            return sessionFactory;
        }
    
        /**
         *  return session factory
         *
         *    session factory will be rebuilded in the next call
         */
        public static void setConfigFile(String configFile) {
            HibernateSessionFactory.configFile = configFile;
            sessionFactory = null;
        }
    
        /**
         *  return hibernate configuration
         *
         */
        public static Configuration getConfiguration() {
            return configuration;
        }
    
    }
    package cn.itcast.vo;
    
    import java.util.List;
    import java.util.Set;
    import org.hibernate.LockMode;
    import org.hibernate.Query;
    import org.hibernate.criterion.Example;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    /**
     * A data access object (DAO) providing persistence and search support for
     * Customer entities. Transaction control of the save(), update() and delete()
     * operations can directly support Spring container-managed transactions or they
     * can be augmented to handle user-managed Spring transactions. Each of these
     * methods provides additional information for how to configure it for the
     * desired type of transaction control.
     * 
     * @see cn.itcast.vo.Customer
     * @author MyEclipse Persistence Tools
     */
    
    public class CustomerDAO extends BaseHibernateDAO {
        private static final Logger log = LoggerFactory
                .getLogger(CustomerDAO.class);
        // property constants
        public static final String CNAME = "cname";
        public static final String AGE = "age";
        public static final String VERSION = "version";
    
        public void save(Customer transientInstance) {//保存Customer实例化
            log.debug("saving Customer instance");
            try {
                getSession().save(transientInstance);
                log.debug("save successful");
            } catch (RuntimeException re) {
                log.error("save failed", re);
                throw re;
            }
        }
    
        public void delete(Customer persistentInstance) {
            log.debug("deleting Customer instance");
            try {
                getSession().delete(persistentInstance);
                log.debug("delete successful");
            } catch (RuntimeException re) {
                log.error("delete failed", re);
                throw re;
            }
        }
    
        public Customer findById(java.lang.Integer id) {
            log.debug("getting Customer instance with id: " + id);
            try {
                Customer instance = (Customer) getSession().get(
                        "cn.itcast.vo.Customer", id);
                return instance;
            } catch (RuntimeException re) {
                log.error("get failed", re);
                throw re;
            }
        }
    
        public List findByExample(Customer instance) {
            log.debug("finding Customer instance by example");
            try {
                List results = getSession().createCriteria("cn.itcast.vo.Customer")
                        .add(Example.create(instance)).list();
                log.debug("find by example successful, result size: "
                        + results.size());
                return results;
            } catch (RuntimeException re) {
                log.error("find by example failed", re);
                throw re;
            }
        }
    
        public List findByProperty(String propertyName, Object value) {
            log.debug("finding Customer instance with property: " + propertyName
                    + ", value: " + value);
            try {
                String queryString = "from Customer as model where model."
                        + propertyName + "= ?";
                Query queryObject = getSession().createQuery(queryString);
                queryObject.setParameter(0, value);
                return queryObject.list();
            } catch (RuntimeException re) {
                log.error("find by property name failed", re);
                throw re;
            }
        }
    
        public List findByCname(Object cname) {
            return findByProperty(CNAME, cname);
        }
    
        public List findByAge(Object age) {
            return findByProperty(AGE, age);
        }
    
        public List findByVersion(Object version) {
            return findByProperty(VERSION, version);
        }
    
        public List findAll() {
            log.debug("finding all Customer instances");
            try {
                String queryString = "from Customer";
                Query queryObject = getSession().createQuery(queryString);
                return queryObject.list();
            } catch (RuntimeException re) {
                log.error("find all failed", re);
                throw re;
            }
        }
    
        public Customer merge(Customer detachedInstance) {
            log.debug("merging Customer instance");
            try {
                Customer result = (Customer) getSession().merge(detachedInstance);
                log.debug("merge successful");
                return result;
            } catch (RuntimeException re) {
                log.error("merge failed", re);
                throw re;
            }
        }
    
        public void attachDirty(Customer instance) {
            log.debug("attaching dirty Customer instance");
            try {
                getSession().saveOrUpdate(instance);
                log.debug("attach successful");
            } catch (RuntimeException re) {
                log.error("attach failed", re);
                throw re;
            }
        }
    
        public void attachClean(Customer instance) {
            log.debug("attaching clean Customer instance");
            try {
                getSession().lock(instance, LockMode.NONE);
                log.debug("attach successful");
            } catch (RuntimeException re) {
                log.error("attach failed", re);
                throw re;
            }
        }
    }
  • 相关阅读:
    [LeetCode] 94. Binary Tree Inorder Traversal 二叉树的中序遍历
    [LeetCode] 103. Binary Tree Zigzag Level Order Traversal 二叉树的之字形层序遍历
    Notepad++ Shortcuts 快捷键
    IplImage 与 QImage 相互转换
    [LeetCode] 105. Construct Binary Tree from Preorder and Inorder Traversal 由先序和中序遍历建立二叉树
    QMessageBox 使用方法
    Qt5 和 Qt4 的一些改动和不同
    Qt5.4 VS2010 Additional Dependancies
    [LeetCode] Construct Binary Tree from Inorder and Postorder Traversal 由中序和后序遍历建立二叉树
    [LeetCode] Best Time to Buy and Sell Stock IV 买卖股票的最佳时间之四
  • 原文地址:https://www.cnblogs.com/ZHONGZHENHUA/p/6710426.html
Copyright © 2020-2023  润新知