使用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.Final\lib\optional\c3p0

第二步:加入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类进行测试。

 

转载于:https://www.cnblogs.com/pingxin/p/p00027.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值