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
            }
        }
    }

      

  • 相关阅读:
    NET5 WebApi 解决跨域问题
    CentOS7安装MYSQL
    VMWare安装CentOS7
    MSSQL还原数据库,更改用户登陆权限
    Vue自定义页面路由
    解决VSCODE"因为在此系统上禁止运行脚本"报错
    简析 HTTP 2.0 多路复用
    Git放弃本地修改,强制拉取最新版
    eclipse安装OpenExplorer插件--快速打开文件目录
    git统计某段时间内代码的修改量/总代码量
  • 原文地址:https://www.cnblogs.com/hgc-bky/p/6224067.html
Copyright © 2011-2022 走看看