关于spring与hibernate的applicatonContext.xml配置(用maven创建项目)
如何将hibernate整合到spring中去呢?
1、创建项目,引入各自的相关JAR包
2、设计项目的包结构,以及类结构 (项目设计阶段) ---垂直分块 水平分层
3、编写applicationContext.xml完成框架的整合
<!-- 第1步:开启spring容器的自动扫描功能 -->
<!-- 第2步:引入外部的数据库配置描述文件 -->
<!-- 第3步:配置数据源连接池:C3P0,DBCP2,DRUID -->
<!-- 第4步,配置SessionFactory -->
<!-- 第5步,配置事务管理器 -->
<!-- 第6步,配置hibernate模板操作类,持久层dao会用到这个类与数据库交互 -->
<!-- 第7步,配置spring管理事务的2种方式:编程式事务管理,声明式事务管理 -->
<!-- 第8步,开启切面动态代理支持 -->
需要jar包(必须):aspectjrt、aspectjweaver、hibernate-c3p0 、hibernate-core、mysql-connector-java、spring-context、spring-orm
测试jar包(可选):spring-test、junit
日志jar包(可选):log4j
applicatonContext.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 第1步:开启spring容器的自动扫描功能 -->
<context:component-scan base-package="com.ali.sh"></context:component-scan>
<!-- 第2步:引入外部的数据库配置描述文件 -->
<context:property-placeholder location="classpath:mysql.properties" />
<!-- 第3步:配置数据源连接池:C3P0,DBCP2,DRUID -->
<!-- destroy-method="close" 该方法代表spring容器在销毁时,需要调用close(),关闭掉所有的数据库连接对象 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<!-- 配置JDBC连接数据库的4个元素 -->
<property name="driverClass" value="${jdbc.driver}"></property>
<property name="jdbcUrl" value="${jdbc.url}"></property>
<property name="user" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
<!-- 配置扩展属性 -->
<!-- 配置连接池中,初始化的连接数量 -->
<property name="initialPoolSize" value="5"></property>
<!-- 配置连接池中,任何时刻允许存在的最大连接数量 -->
<property name="maxPoolSize" value="50"></property>
<!-- 配置连接池中,当连接不充足时,需要再次获取的连接数 -->
<property name="acquireIncrement" value="10"></property>
<!-- 配置连接池中,间隔10秒,检测一次空闲连接 -->
<property name="idleConnectionTestPeriod" value="10"></property>
<!-- 配置连接池中,用于校验连接是否有效的校验语句 -->
<property name="preferredTestQuery" value="select now() from dual"></property>
<!-- 配置连接池中,在借出连接时,需要通过SQL进行连接校验 -->
<property name="testConnectionOnCheckout" value="true"></property>
<!-- 配置连接池中,允许存在的最大预编译对象的数量 -->
<property name="maxStatements" value="200"></property>
<!-- 配置连接在创建时,需要等待的最大超时时间,单位:毫秒 如果设置为0,将会无限期等待 -->
<property name="checkoutTimeout" value="5000"></property>
</bean>
<!-- 第4步,配置SessionFactory -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<!-- 开启自动扫描功能,扫描使用JPA规范(注解),完成ORM映射关系的实体类 -->
<property name="packagesToScan">
<array>
<value>com.ali.sh.bean</value>
<!-- <value>com.ali.sh.bean02</value> -->
</array>
</property>
<!-- 假设你们公司,还在用XML完成ORM映射,那么就应该采用如下方式,完成注册 -->
<!-- <property name="mappingResources"> <array> <value>com/ali/sh/xmls/UserBean.hbm.xml</value>
</array> </property> -->
<!-- 配置跟 hibernate 相关的一些配置 -->
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
</props>
</property>
</bean>
<!-- 第5步,配置事务管理器 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 配置hibernate模板操作类,持久层dao会用到这个类与数据库交互 -->
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate4.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 第6步,配置spring管理事务的2种方式:编程式事务管理,声明式事务管理 -->
<!-- 编程式事务管理 需要在业务类中,借助TransactionTemplate,PlatformTransactionManager 完成对业务逻辑
的逻辑事务管理 -->
<!-- 声明式事务管理,第1种方式,采用AOP管理业务逻辑事务 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" read-only="true" propagation="SUPPORTS" />
<tx:method name="save*" read-only="false" rollback-for="java.lang.Exception"
propagation="REQUIRED" />
<tx:method name="add*" read-only="false" rollback-for="java.lang.Exception"
propagation="REQUIRED" />
<tx:method name="insert*" read-only="false" rollback-for="java.lang.Exception"
propagation="REQUIRED" />
<tx:method name="create*" read-only="false" rollback-for="java.lang.Exception"
propagation="REQUIRED" />
<tx:method name="update*" read-only="false" rollback-for="java.lang.Exception"
propagation="REQUIRED" />
<tx:method name="modify*" read-only="false" rollback-for="java.lang.Exception"
propagation="REQUIRED" />
<tx:method name="change*" read-only="false" rollback-for="java.lang.Exception"
propagation="REQUIRED" />
<tx:method name="delete*" read-only="false" rollback-for="java.lang.Exception"
propagation="REQUIRED" />
<tx:method name="remove*" read-only="false" rollback-for="java.lang.Exception"
propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="txMagPoint"
expression="execution(* com.gezhi.sh.*mag.service.impl.*.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="txMagPoint" />
</aop:config>
<!-- 声明式事务管理,第2种方式,使用@Transactional管理业务逻辑事务,见我的文章mybatis整合spring https://blog.csdn.net/IT_CREATE/article/details/85329007-->
<!-- 开启事务的注解支持 -->
<!-- <tx:annotation-driven transaction-manager="transactionManager"/> -->
<!-- 第7步,开启切面动态代理支持 -->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
</beans>
mysql.properties文件:(连接数据库要要用到的信息)
jdbc.driver=org.gjt.mm.mysql.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF8&allowMultiQueries=true
jdbc.username=root
jdbc.password=1234
maven的pom.xml配置文件:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.gezhi</groupId>
<artifactId>sh</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>sh</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<junit.version>4.12</junit.version>
<log4j.version>1.2.17</log4j.version>
<spring.version>4.3.14.RELEASE</spring.version>
<hibernate.version>4.3.11.Final</hibernate.version>
<aspect.version>1.8.9</aspect.version>
<mysql.version>5.1.38</mysql.version>
</properties>
<dependencies>
<!-- 引入第3方的切面框架AspectJrt的相关JAR文件 -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${aspect.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspect.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!-- 导入spring容器相关JAR文件 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- 导入spring容器整合ORM框架的相关JAR文件 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- 引入spring框架兼容Junit单元测试框架的相关JAR包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
<scope>test</scope>
</dependency>
<!-- 导入junit单元测试框架JAR包 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<!-- 导入LOG4J日志框架JAR包 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<!-- 导入hibernate持久层框架JAR包 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
<!-- 导入hibernate持久层框架的C3P0连接池JAR包 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>${hibernate.version}</version>
</dependency>
</dependencies>
<build>
<pluginManagement>
<!-- 配置maven 在构建项目时,采用相关插件 -->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>