• 使用idea构建Hibernate5项目


    使用工具:IntelliJ IDEA 2017.2.5 x64

        MySql-8.0.1

        hibernate-release-5.3.1.Final

    导入的jar包:

    以及连接MySql的jdbc包、和log4j

     hibernate配置文件:

     1 <?xml version='1.0' encoding='utf-8'?>
     2 <!DOCTYPE hibernate-configuration PUBLIC
     3         "-//Hibernate/Hibernate Configuration DTD//EN"
     4         "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
     5 <hibernate-configuration>
     6     <session-factory>
     7         <property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
     8         <property name="connection.url">jdbc:mysql://localhost:3306/learn?useSSL=false&amp;serverTimezone=GMT%2B8</property>
     9         <property name="dialect">org.hibernate.dialect.MySQL8Dialect</property>
    10         <property name="connection.username">root</property>
    11         <property name="connection.password">970603</property>
    12         <property name="show_sql">true</property>
    13 
    14         <mapping class="com.entity.ItemsEntity"/>
    15         <mapping resource="com/entity/ItemsEntity.hbm.xml"/>
    16         <mapping class="com.entity.OrderdetailEntity"/>
    17         <mapping resource="com/entity/OrderdetailEntity.hbm.xml"/>
    18         <mapping class="com.entity.OrdersEntity"/>
    19         <mapping resource="com/entity/OrdersEntity.hbm.xml"/>
    20         <mapping class="com.entity.UserEntity"/>
    21         <mapping resource="com/entity/UserEntity.hbm.xml"/>
    22 
    23 
    24     </session-factory>
    25 </hibernate-configuration>

     其中的解释

    Hibernate配置文件

    • Hibernate配置文件主要用于配置数据库连接和Hibernate运行时所需的各种属性
    • 每个Hibernate配置文件对应一个Configuration对象
    • Hibernate配置文件可以有两种格式:hibernate.properties 和 hibernate.cfg.xml
    hibernate.cfg.xml的常用属性
    1.JDBC连接属性
    • connection.url:数据库URL
    • connection.username:数据库用户名
    • connection.password:数据库用户密码
    • connection.driver_class:数据库JDBC驱动
    • dialect:配置数据库的方言,根据底层的数据库不同产生不同的语句,Hibernate会针对数据库的特性在访问时进行优化
    2.C3P0数据库连接池属性
    • hibernate.c3p0.max_size:数据库连接池的最大连接数
    • hibernate.c3p0.min_size:数据库连接池的最小连接数
    • hibernate.c3p0.acquire_increment:当数据库连接池中的连接耗尽时,同一时刻获取多少个数据库连接
    • hibernate.c3p0.timeout:数据库连接池中连接对象在多长时间没有使用过后,就应该被销毁
    • hibernate.c3p0.idle_test_period:表示连接池检测线程多长时间检测一次池内的所有连接对象是否超时。连接池本身不会把自己从连接池中移除,而是专门有有一个线程按照一定的时间间隔来做这件事,这个线程通过比较连接对象最后一次被使用时间和当前时间差来和timeout做对比,进而决定是否销毁这个连接对象。
    • hibernate.c3p0.max_statements:缓存Statement对象的数量
    3.其他
    • show_sql:是否将运行期生成的SQL输出到日志以供调试。取值true/fause
    • format_sql:是否将SQL转化为格式良好的SQL。取值true/fause
    • hbm2ddl.auto:在启动和停止时自动创建,更新或删除数据库模式。取值create/update/create-drop/validate
    • hibernate.jdbc.fetch_size
    • hibernate.jdbc.batch_size
     
    <!-- 设定JDBC的Statement 读取数据的时候每次从数据库中取出的记录条数-->
    <property name="hibernate.jdbc.fetch_size">100</property>
     
    <!-- 设定对数据库进行批量删除,批量更新和批量插入的时候的批次大小 -->
    <property name="hibernate.jdbc.batch_size">30</property
    练习:C3P0数据库连接池属性
    第一步:导入jar包:
    hibernate-release-5.2.12.Finalliboptionalc3p0

    第二步:加入Hibernate配置
    -hibernate.c3p0.max_size:数据库连接池的最大连接数
    -hibernate.c3p0.min_size:数据库连接池的最小连接数
    -hibernate.c3p0.acquire_increment:当数据库连接池中的连接耗尽时,同一时刻获取多少个数据库连接
    -hibernate.c3p0.timeout:数据库连接池中连接对象在多长时间没有使用过后,就应该被销毁
    -hibernate.c3p0.idle_test_period:表示连接池检测线程多长时间检测一次池内的所有连接对象是否超时。连接池本身不会把自己从连接池中移除,而是专门有有一个线程按照一定的时间间隔来做这件事,这个线程通过比较连接对象最后一次被使用时间和当前时间差来和timeout做对比,进而决定是否销毁这个连接对象。
    -hibernate.c3p0.max_statements:缓存Statement对象的数量

    Log4j的配置文件

    log4j.rootCategory=INFO, stdout , R
    #标准输出
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    #输出格式
    log4j.appender.stdout.layout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%n
    log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
    #文件路径
    log4j.appender.R.File=learnHibernate.log
    log4j.appender.R.layout=org.apache.log4j.PatternLayout
    log4j.appender.R.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n
    log4j.logger.com.neusoft=DEBUG
    log4j.logger.com.opensymphony.oscache=ERROR
    log4j.logger.net.sf.navigator=ERROR
    log4j.logger.org.apache.commons=ERROR
    log4j.logger.org.apache.struts=WARN
    log4j.logger.org.displaytag=ERROR
    log4j.logger.org.springframework=DEBUG
    log4j.logger.com.ibatis.db=WARN
    log4j.logger.org.apache.velocity=FATAL
    log4j.logger.com.canoo.webtest=WARN
    #hibernate的配置 log4j.logger.org.hibernate.ps.PreparedStatementCache=WARN log4j.logger.org.hibernate=DEBUG #log4j.logger.org.logicalcobwebs=WARN

    然后idea连接数据库learn,通过持久化工具生成hibernate的表文件类和xml映射文件。

    对hibernate进行封装

     1 package com.utils;
     2 
     3 import org.hibernate.HibernateException;
     4 import org.hibernate.Session;
     5 import org.hibernate.SessionFactory;
     6 import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
     7 import org.hibernate.cfg.Configuration;
     8 import org.hibernate.service.ServiceRegistry;
     9 
    10 /**
    11  * @author hyp
    12  * Project name is LearnHibernate
    13  * Include in com.utils
    14  * hyp create at 2018/7/25
    15  **/
    16 public class HibernateUtil {
    17     public static final SessionFactory sessionFactory;
    18     //创建sessionFactory
    19     static
    20     {
    21         try
    22         {
    23             // 采用默认的hibernate.cfg.xml来启动一个Configuration的实例
    24             Configuration cfg = new Configuration()
    25                     .configure();
    26             // 以Configuration实例来创建SessionFactory实例
    27             ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
    28                     .applySettings(cfg.getProperties()).build();
    29             sessionFactory = cfg.buildSessionFactory(serviceRegistry);
    30         }
    31         catch (Throwable ex)
    32         {
    33             System.err.println("Initial SessionFactory creation failed." + ex);
    34             throw new ExceptionInInitializerError(ex);
    35         }
    36     }
    37 
    38     // ThreadLocal可以隔离多个线程的数据共享,因此不再需要对线程同步
    39     public static final ThreadLocal<Session> session
    40             = new ThreadLocal<Session>();
    41     //创建Session
    42     public static Session currentSession()
    43             throws HibernateException
    44     {
    45         //通过线程对象.get()方法安全创建Session
    46         Session s = session.get();
    47         // 如果该线程还没有Session,则创建一个新的Session
    48         if (s == null)
    49         {
    50             s = sessionFactory.openSession();
    51             // 将获得的Session变量存储在ThreadLocal变量session里
    52             session.set(s);
    53         }
    54         return s;
    55     }
    56     //关闭Session
    57     public static void closeSession()
    58             throws HibernateException
    59     {
    60         Session s = session.get();
    61         if (s != null) {
    62             s.close();
    63         }
    64         session.set(null);
    65     }
    66 
    67 }

    在接下来是创建DAO类,并对DAO类进行测试。

  • 相关阅读:
    [LeetCode] Insertion Sort List
    [LeetCode] Sort List
    [国嵌攻略][162][USB协议分析]
    [国嵌攻略][161][USB总线介绍]
    [国嵌攻略][160][SPI驱动程序设计]
    [国嵌攻略][159][SPI子系统]
    [国嵌攻略][158][SPI裸机驱动设计]
    [国嵌攻略][157][SPI总线介绍]
    [国嵌攻略][156][I2C自编设备驱动设计]
    ueditor 单独图片上传 转载
  • 原文地址:https://www.cnblogs.com/pingxin/p/p00027.html
Copyright © 2020-2023  润新知