zoukankan      html  css  js  c++  java
  • Hibernate一对多单向(双向)关联映射

    (1)、编写配置文件

      Hibernate通过读写默认的XML配置文件hibernate.cfg.xml加载数据库配置信息、代码如下: 

    <hibernate-configuration>
     	<session-factory>
    		<!-- 数据库驱动 -->
    		<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    		<!-- 数据库连接的URL -->
    		<property name="connection.url">jdbc:mysql://localhost:3306/db_database14</property>
    		<!-- 数据库连接用户名 -->
    		<property name="connection.username">root</property>
    		<!-- 数据库连接密码 -->
    		<property name="connection.password"></property>
    		<!-- Hibernate方言 -->
    		<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
    		<!-- 打印SQL语句 -->
    		<property name="show_sql">true</property>
    		<!-- 映射文件  -->
    		<mapping resource="com/wgh/model/Book.hbm.xml" />
    		<mapping resource="com/wgh/model/Category.hbm.xml" />		
     	</session-factory>
     </hibernate-configuration>
    

    (2)、编写持久化类

      持久化类是Hibernate操作的对象、它与数据库中的数据表相对应

    (双向)
    /**
    * 图书类别持久化类 */ public class Category { private Integer id; //ID private String name; //类别名称 private Set<Book> books; //Set集合(类别中的所有图书) public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Set<Book> getBooks() { return books; } public void setBooks(Set<Book> books) { this.books = books; } }
    (单向)
    /**
    * 图书类别持久化类 */ public class Category { private Integer id; //ID private String name; //类别名称 public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
    /**
     * 图书持久类
     */
    public class Book {
        private Integer id;            //ID
        private String name;        //图书名称
        private String author;
        private Category category;    //所属类别
        public Integer getId() {
            return id;
        }
        public void setId(Integer id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getAuthor() {
            return author;
        }
        public void setAuthor(String author) {
            this.author = author;
        }
        public Category getCategory() {
            return category;
        }
        public void setCategory(Category category) {
            this.category = category;
        }
    }

    (3)、编写映射文件

    (双向)
    <hibernate-mapping package="com.wgh.model"> <class name="Category" table="tb_Category_manytoone3"> <id name="id"> <generator class="native"/> </id> <property name="name" not-null="true" length="200" /> <!-- 一对多映射 --> <set name="books"> <key column="categoryId"/> <one-to-many class="Book"/> </set> </class> </hibernate-mapping>
    (单向)
    <hibernate-mapping package="com.wgh.model"> <class name="Category" table="tb_Category_manytoone0"> <id name="id"> <generator class="native"/> </id> <property name="name" not-null="true" length="200" /> </class> </hibernate-mapping>
    <hibernate-mapping package="com.wgh.model">
        <class name="Book" table="tb_book_manytoone0">
            <!-- 主键 -->
            <id name="id">
                <generator class="native"/>
            </id>
            <!-- 图书名称 -->
            <property name="name" not-null="true" length="200" />
            <!-- 作者 -->
            <property name="author" not-null="true" length="50"/>
            <!-- 多对一关联映射 -->
            <many-to-one name="category" class="Category">
                <!-- 映射的字段 -->
                <column name="categoryId"/>
            </many-to-one>
        </class>
    </hibernate-mapping>

    (4)、编写Hibernate的工具类

    package com.wgh.hibernate;
    
    import org.hibernate.HibernateException;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
    import org.hibernate.service.ServiceRegistryBuilder;
    
    public class HibernateUtil {
        private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
        private static SessionFactory sessionFactory = null; // SessionFactory对象
        // 静态块
        static {
            try {
                Configuration cfg = new Configuration().configure(); // 加载Hibernate配置文件
                sessionFactory = cfg
                        .buildSessionFactory(new ServiceRegistryBuilder().applySettings(cfg.getProperties())
                                .buildServiceRegistry());
            } catch (Exception e) {
                System.err.println("创建会话工厂失败");
                e.printStackTrace();
            }
        }
    
        /**
         * 获取Session
         * 
         * @return Session
         * @throws HibernateException
         */
        public static Session getSession() throws HibernateException {
            Session session = (Session) threadLocal.get();
            if (session == null || !session.isOpen()) {
                if (sessionFactory == null) {
                    rebuildSessionFactory();
                }
                session = (sessionFactory != null) ? sessionFactory.openSession()
                        : null;
                threadLocal.set(session);
            }
            return session;
        }
    
        /**
         * 重建会话工厂
         */
        public static void rebuildSessionFactory() {
            try {
                Configuration cfg = new Configuration().configure(); // 加载Hibernate配置文件
                sessionFactory = cfg
                        .buildSessionFactory(new ServiceRegistryBuilder().applySettings(cfg.getProperties())
                                .buildServiceRegistry());
            } catch (Exception e) {
                System.err.println("创建会话工厂失败");
                e.printStackTrace();
            }
        }
    
        /**
         * 获取SessionFactory对象
         * 
         * @return SessionFactory对象
         */
        public static SessionFactory getSessionFactory() {
            return sessionFactory;
        }
    
        /**
         * 关闭Session
         * 
         * @throws HibernateException
         */
        public static void closeSession() throws HibernateException {
            Session session = (Session) threadLocal.get();
            threadLocal.set(null);
            if (session != null) {
                session.close(); // 关闭Session
            }
        }
    }

      

  • 相关阅读:
    28完全背包+扩展欧几里得(包子凑数)
    HDU 3527 SPY
    POJ 3615 Cow Hurdles
    POJ 3620 Avoid The Lakes
    POJ 3036 Honeycomb Walk
    HDU 2352 Verdis Quo
    HDU 2368 Alfredo's Pizza Restaurant
    HDU 2700 Parity
    HDU 3763 CDs
    POJ 3279 Fliptile
  • 原文地址:https://www.cnblogs.com/hgc-bky/p/6224067.html
Copyright © 2011-2022 走看看