Maven+Spring.4.3.10+hibernate.5.3.4+c3p0配置整合(IDEA版)

由于我使用的是MySql-8.0.11版本的,hibernate支持的dialect应为org.hibernate.dialect.MySQL8Dialect,所有hibernate应使用高版本

同时spring-orm需要支持hibernate5,其中sessionFactory应为org.springframework.orm.hibernate5.LocalSessionFactoryBean,因此spring应使用高版本

如果不是项目要求,尽量使用低版本,降低复杂度。

一、使用idea构建maven项目

pom中的depedencies配置

 1  <dependencies>
 2         <dependency>
 3             <groupId>log4j</groupId>
 4             <artifactId>log4j</artifactId>
 5             <version>1.2.17</version>
 6         </dependency>
 7         <!--<dependency>-->
 8             <!--<groupId>junit</groupId>-->
 9             <!--<artifactId>junit</artifactId>-->
10             <!--<version>4.12</version>-->
11             <!--<scope>test</scope>-->
12         <!--</dependency>-->
13         <dependency>
14             <groupId>mysql</groupId>
15             <artifactId>mysql-connector-java</artifactId>
16             <version>8.0.11</version>
17         </dependency>
18         <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
19         <dependency>
20             <groupId>org.hibernate</groupId>
21             <artifactId>hibernate-core</artifactId>
22             <version>5.3.4.Final</version>
23         </dependency>
24         <!-- 线程池C3P0 -->
25         <!-- https://mvnrepository.com/artifact/c3p0/c3p0 -->
26         <dependency>
27             <groupId>c3p0</groupId>
28             <artifactId>c3p0</artifactId>
29             <version>0.9.1.2</version>
30         </dependency>
31         <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-c3p0 -->
32         <dependency>
33             <groupId>org.hibernate</groupId>
34             <artifactId>hibernate-c3p0</artifactId>
35             <version>5.3.4.Final</version>
36         </dependency>
37     <!--spring.version=4.3.10.RELEASE -->
38         <dependency>
39             <groupId>org.springframework</groupId>
40             <artifactId>spring-core</artifactId>
41             <version>${spring.version}</version>
42         </dependency>
43         <dependency>
44             <groupId>org.springframework</groupId>
45             <artifactId>spring-context</artifactId>
46             <version>${spring.version}</version>
47         </dependency>
48         <dependency>
49             <groupId>org.springframework</groupId>
50             <artifactId>spring-beans</artifactId>
51             <version>${spring.version}</version>
52         </dependency>
53         <dependency>
54             <groupId>org.springframework</groupId>
55             <artifactId>spring-aop</artifactId>
56             <version>${spring.version}</version>
57         </dependency>
58         <dependency>
59             <groupId>org.springframework</groupId>
60             <artifactId>spring-orm</artifactId>
61             <version>${spring.version}</version>
62         </dependency>
63         <dependency>
64             <groupId>org.springframework</groupId>
65             <artifactId>spring-web</artifactId>
66             <version>${spring.version}</version>
67         </dependency>
68         <dependency>
69             <groupId>org.springframework</groupId>
70             <artifactId>spring-webmvc</artifactId>
71             <version>${spring.version}</version>
72         </dependency>
73         <dependency>
74             <groupId>org.springframework</groupId>
75             <artifactId>spring-test</artifactId>
76             <version>${spring.version}</version>
77             <scope>test</scope>
78         </dependency>
79         <dependency>
80             <groupId>com.kenai.nbpwr</groupId>
81             <artifactId>javax-inject</artifactId>
82             <version>1.0-201002241208</version>
83         </dependency>
84         <dependency>
85             <groupId>junit</groupId>
86             <artifactId>junit</artifactId>
87             <scope>compile</scope>
88         </dependency>
89     </dependencies>    

二、配置

在resource文件夹下定义spring配置文件

hibernate中的配置属性解释请参考这里:https://www.cnblogs.com/pingxin/p/p00076.html

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4        xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
 5        xmlns:aop="http://www.springframework.org/schema/aop"
 6        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
 7     <context:property-placeholder location="jdbc.properties"/>
 8     <context:annotation-config/>
 9     <bean class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close" id="dataSource">
10         <!--<property name="jdbcUrl" value="${connection.url}"/>-->
11         <!--<property name="driverClass" value="${connection.driver_class}"/>-->
12         <!--<property name="user" value="${connection.username}"/>-->
13         <!--<property name="password" value="${connection.password}"/>-->
14         <property name="initialPoolSize" value="${c3p0.initsize}"/>
15         <property name="maxPoolSize" value="${c3p0.max_size}"/>
16         <property name="minPoolSize" value="${c3p0.min_size}"/>
17         <property name="checkoutTimeout" value="${c3p0.timeout}"/>
18         <property name="idleConnectionTestPeriod" value="${c3p0.idle_test_period}"/>
19         <property name="acquireIncrement" value="${c3p0.acquire_increment}"/>
20     </bean>
21     <bean class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"
22           id="sessionFactory">
23 
24         <property name="dataSource" ref="dataSource"/>
25         <property name="hibernateProperties">
26             <props>
27                 <prop key="hibernate.dialect">org.hibernate.dialect.MySQL8Dialect</prop>
28                 <prop key="hibernate.connection.provider_class">org.hibernate.c3p0.internal.C3P0ConnectionProvider</prop>
29                 <prop key="hibernate.format_sql">true</prop>
30                 <prop key="hibernate.show_sql">true</prop>
31                 <prop key="hibernate.hbm2ddl.auto">update</prop>
32                 <prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate5.SpringSessionContext</prop>
33                 <prop key="hibernate.connection.url" >${connection.url}</prop>
34                 <prop key="hibernate.connection.driver_class">${connection.driver_class}</prop>
35                 <prop key="hibernate.connection.username">${connection.username}</prop>
36                 <prop key="hibernate.connection.password">${connection.password}</prop>
37             </props>
38         </property>
39         <!--<property name="mappingLocations">-->
40             <!--<list>-->
41                 <!--<value>classpath:test/com/hyp/cms/model/ItemsEntity.hbm.xml</value>-->
42                 <!--<value>classpath:test/com/hyp/cms/model/OrderdetailEntity.hbm.xml</value>-->
43                 <!--<value>classpath:test/com/hyp/cms/model/OrdersEntity.hbm.xml</value>-->
44                 <!--<value>classpath:test/com/hyp/cms/model/UserEntity.hbm.xml</value>-->
45             <!--</list>-->
46         <!--</property>-->
47     </bean>
48 
49     <bean class="org.springframework.orm.hibernate5.HibernateTransactionManager" id="transactionManager">
50         <property name="sessionFactory" ref="sessionFactory"/>
51     </bean>
52 
53     <tx:advice id="txAdvice" transaction-manager="transactionManager">
54         <tx:attributes>
55             <tx:method name="get*" read-only="true"/>
56             <tx:method name="*"/>
57         </tx:attributes>
58     </tx:advice>
59     <!--<aop:config>-->
60         <!--<aop:pointcut expression="execution(* com.zxc.service.*Impl.*(..))"-->
61                       <!--id="zxcpointcut"/>-->
62         <!--<aop:advisor advice-ref="txAdvice" pointcut-ref="zxcpointcut"/>-->
63     <!--</aop:config>-->
64 </beans

jdbc.properties文件

connection.url=jdbc:mysql://localhost:3306/learn?useSSL=false&serverTimezone=GMT-8
connection.driver_class=com.mysql.cj.jdbc.Driver
connection.username=root
connection.password=970603
c3p0.max_size=20
c3p0.min_size=2
c3p0.timeout=300
c3p0.idle_test_period=3000
c3p0.acquire_increment=2
c3p0.initsize=2
#dialect=org.hibernate.dialect.MySQL8Dialect

log4j.properties文件配置

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=basic-hibernate.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
log4j.logger.org.hibernate.ps.PreparedStatementCache=WARN
#log4j.logger.org.hibernate=DEBUG

ok了,这样就可以通过spring使用SessionFactory了

 

三、调用hibernate

 1 import org.hibernate.HibernateException;
 2 import org.hibernate.Session;
 3 import org.hibernate.SessionFactory;
 4 import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
 5 import org.hibernate.cfg.Configuration;
 6 import org.hibernate.service.ServiceRegistry;
 7 import org.springframework.context.ApplicationContext;
 8 import org.springframework.context.support.ClassPathXmlApplicationContext;
 9 
10 /**
11  * @author hyp
12  * Project name is CMS
13  * Include in com.hyp.cms
14  * hyp create at 2018/8/6
15  **/
16 public class HibernateUtils {
17     private static final SessionFactory SESSION_FACTORYF;
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             ApplicationContext applicationContext=new ClassPathXmlApplicationContext("beans.xml");
30             SESSION_FACTORYF =(SessionFactory) applicationContext.getBean("sessionFactory");
31         }
32         catch (Throwable ex)
33         {
34             System.err.println("Initial SessionFactory creation failed." + ex);
35             throw new ExceptionInInitializerError(ex);
36         }
37     }
38 
39     // ThreadLocal可以隔离多个线程的数据共享,因此不再需要对线程同步
40     public static final ThreadLocal<Session> session
41             = new ThreadLocal<Session>();
42     //创建Session
43     public static Session currentSession()
44             throws HibernateException
45     {
46         //通过线程对象.get()方法安全创建Session
47         Session s = session.get();
48         // 如果该线程还没有Session,则创建一个新的Session
49         if (s == null)
50         {
51             s = SESSION_FACTORYF.openSession();
52             // 将获得的Session变量存储在ThreadLocal变量session里
53             session.set(s);
54         }
55         return s;
56     }
57     //关闭Session
58     public static void closeSession()
59             throws HibernateException
60     {
61         Session s = session.get();
62         if (s != null) {
63             s.close();
64         }
65         session.set(null);
66     }
67 
68 }

并进行测试

public class test {

    @Test
    public void test1()
    {
//        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("beans.xml");
//        SessionFactory sessionFactory=(SessionFactory)applicationContext.getBean("sessionFactory");
//        Session session=sessionFactory.openSession();
//        System.out.println(session);
//        session.close();
      Session session=HibernateUtils.currentSession();
      session.doWork(new Work() {
          @Override
          public void execute(Connection connection) throws SQLException {
              System.out.println("hello " + System.currentTimeMillis());
          }
      });
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值