笔记46 Spring+SpringMVC+Hibernate整合
搭建Spring+SpringMVC+Hibernate的框架的思路如下:
1、创建Maven项目,按需映入Maven包依赖。
2、搭建Spring:配置Spring对控件层Bean的注入。
3、搭建Hibernate:配置数据源,配置SessionFactory,配置事务。
4、映入SpringMVC:配置SpringMVC配置信息。
5、配置web.xml容器
6、测试三个框架的整合:。
一、创建Maven项目、导入依赖
1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 3 <modelVersion>4.0.0</modelVersion> 4 <groupId>com.li</groupId> 5 <artifactId>SSHDemo</artifactId> 6 <packaging>war</packaging> 7 <version>0.0.1-SNAPSHOT</version> 8 <name>SSHDemo Maven Webapp</name> 9 <url>http://maven.apache.org</url> 10 <dependencies> 11 <dependency> 12 <groupId>junit</groupId> 13 <artifactId>junit</artifactId> 14 <version>3.8.1</version> 15 <scope>test</scope> 16 </dependency> 17 <!-- https://mvnrepository.com/artifact/org.springframework/spring-context --> 18 <dependency> 19 <groupId>org.springframework</groupId> 20 <artifactId>spring-context</artifactId> 21 <version>5.0.7.RELEASE</version> 22 </dependency> 23 24 <!-- https://mvnrepository.com/artifact/org.springframework/spring-beans --> 25 <dependency> 26 <groupId>org.springframework</groupId> 27 <artifactId>spring-beans</artifactId> 28 <version>5.0.7.RELEASE</version> 29 </dependency> 30 <!-- https://mvnrepository.com/artifact/org.springframework/spring-core --> 31 <dependency> 32 <groupId>org.springframework</groupId> 33 <artifactId>spring-core</artifactId> 34 <version>5.0.7.RELEASE</version> 35 </dependency> 36 <!-- https://mvnrepository.com/artifact/org.springframework/spring-web --> 37 <dependency> 38 <groupId>org.springframework</groupId> 39 <artifactId>spring-web</artifactId> 40 <version>5.0.7.RELEASE</version> 41 </dependency> 42 <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --> 43 <dependency> 44 <groupId>org.springframework</groupId> 45 <artifactId>spring-webmvc</artifactId> 46 <version>5.0.7.RELEASE</version> 47 </dependency> 48 <!-- https://mvnrepository.com/artifact/org.springframework/spring-aop --> 49 <dependency> 50 <groupId>org.springframework</groupId> 51 <artifactId>spring-aop</artifactId> 52 <version>5.0.7.RELEASE</version> 53 </dependency> 54 <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc --> 55 <dependency> 56 <groupId>org.springframework</groupId> 57 <artifactId>spring-jdbc</artifactId> 58 <version>5.0.7.RELEASE</version> 59 </dependency> 60 <!-- https://mvnrepository.com/artifact/org.springframework/spring-context-support --> 61 <dependency> 62 <groupId>org.springframework</groupId> 63 <artifactId>spring-context-support</artifactId> 64 <version>5.0.7.RELEASE</version> 65 </dependency> 66 <!-- https://mvnrepository.com/artifact/org.springframework/spring-expression --> 67 <dependency> 68 <groupId>org.springframework</groupId> 69 <artifactId>spring-expression</artifactId> 70 <version>5.0.7.RELEASE</version> 71 </dependency> 72 <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> 73 <dependency> 74 <groupId>mysql</groupId> 75 <artifactId>mysql-connector-java</artifactId> 76 <version>5.1.46</version> 77 </dependency> 78 <!-- https://mvnrepository.com/artifact/commons-logging/commons-logging --> 79 <dependency> 80 <groupId>commons-logging</groupId> 81 <artifactId>commons-logging</artifactId> 82 <version>1.2</version> 83 </dependency> 84 <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core --> 85 <dependency> 86 <groupId>org.hibernate</groupId> 87 <artifactId>hibernate-core</artifactId> 88 <version>5.3.1.Final</version> 89 </dependency> 90 <!-- https://mvnrepository.com/artifact/org.hibernate.common/hibernate-commons-annotations --> 91 <dependency> 92 <groupId>org.hibernate.common</groupId> 93 <artifactId>hibernate-commons-annotations</artifactId> 94 <version>5.0.3.Final</version> 95 </dependency> 96 <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-c3p0 --> 97 <dependency> 98 <groupId>org.hibernate</groupId> 99 <artifactId>hibernate-c3p0</artifactId> 100 <version>5.3.1.Final</version> 101 </dependency> 102 <!-- https://mvnrepository.com/artifact/dom4j/dom4j --> 103 <dependency> 104 <groupId>dom4j</groupId> 105 <artifactId>dom4j</artifactId> 106 <version>1.6.1</version> 107 </dependency> 108 <!-- https://mvnrepository.com/artifact/com.mchange/mchange-commons-java --> 109 <dependency> 110 <groupId>com.mchange</groupId> 111 <artifactId>mchange-commons-java</artifactId> 112 <version>0.2.15</version> 113 </dependency> 114 <!-- https://mvnrepository.com/artifact/org.jboss.logging/jboss-logging --> 115 <dependency> 116 <groupId>org.jboss.logging</groupId> 117 <artifactId>jboss-logging</artifactId> 118 <version>3.3.2.Final</version> 119 </dependency> 120 <!-- https://mvnrepository.com/artifact/org.jboss.spec.javax.transaction/jboss-transaction-api_1.2_spec --> 121 <dependency> 122 <groupId>org.jboss.spec.javax.transaction</groupId> 123 <artifactId>jboss-transaction-api_1.2_spec</artifactId> 124 <version>1.0.0.Final</version> 125 </dependency> 126 <!-- https://mvnrepository.com/artifact/com.fasterxml/classmate --> 127 <dependency> 128 <groupId>com.fasterxml</groupId> 129 <artifactId>classmate</artifactId> 130 <version>1.4.0</version> 131 </dependency> 132 <!-- https://mvnrepository.com/artifact/org.springframework/spring-orm --> 133 <dependency> 134 <groupId>org.springframework</groupId> 135 <artifactId>spring-orm</artifactId> 136 <version>5.0.7.RELEASE</version> 137 </dependency> 138 <!-- https://mvnrepository.com/artifact/com.mchange/c3p0 --> 139 <dependency> 140 <groupId>com.mchange</groupId> 141 <artifactId>c3p0</artifactId> 142 <version>0.9.5.2</version> 143 </dependency> 144 <!-- https://mvnrepository.com/artifact/org.springframework/spring-test --> 145 <dependency> 146 <groupId>org.springframework</groupId> 147 <artifactId>spring-test</artifactId> 148 <version>5.0.7.RELEASE</version> 149 <scope>test</scope> 150 </dependency> 151 <!-- https://mvnrepository.com/artifact/org.springframework/spring-tx --> 152 <dependency> 153 <groupId>org.springframework</groupId> 154 <artifactId>spring-tx</artifactId> 155 <version>5.0.7.RELEASE</version> 156 </dependency> 157 <!-- https://mvnrepository.com/artifact/org.eclipse.persistence/javax.persistence --> 158 <dependency> 159 <groupId>org.eclipse.persistence</groupId> 160 <artifactId>javax.persistence</artifactId> 161 <version>2.2.0</version> 162 </dependency> 163 <!-- https://mvnrepository.com/artifact/org.javassist/javassist --> 164 <dependency> 165 <groupId>org.javassist</groupId> 166 <artifactId>javassist</artifactId> 167 <version>3.22.0-GA</version> 168 </dependency> 169 <!-- https://mvnrepository.com/artifact/org.jboss/jandex --> 170 <dependency> 171 <groupId>org.jboss</groupId> 172 <artifactId>jandex</artifactId> 173 <version>2.0.5.Final</version> 174 </dependency> 175 <!-- https://mvnrepository.com/artifact/com.fasterxml/classmate --> 176 <dependency> 177 <groupId>com.fasterxml</groupId> 178 <artifactId>classmate</artifactId> 179 <version>1.4.0</version> 180 </dependency> 181 <!-- https://mvnrepository.com/artifact/antlr/antlr --> 182 <dependency> 183 <groupId>antlr</groupId> 184 <artifactId>antlr</artifactId> 185 <version>2.7.7</version> 186 </dependency> 187 <!-- https://mvnrepository.com/artifact/net.bytebuddy/byte-buddy --> 188 <dependency> 189 <groupId>net.bytebuddy</groupId> 190 <artifactId>byte-buddy</artifactId> 191 <version>1.8.12</version> 192 </dependency> 193 194 </dependencies> 195 <build> 196 <finalName>SSHDemo</finalName> 197 </build> 198 </project>
二、配置web.xml
1.配置Spring的IOC容器
1 <context-param> 2 <param-name>contextConfigLocation</param-name> 3 <param-value>classpath:applicationContext.xml</param-value> 4 </context-param> 5 <listener> 6 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 7 </listener>
在src/main/resources下新建文件config,将所有的配置文件放在里面。创建spring配置文件applicationContext.xml
2.配置SpringMVC的核心控制器
1 <servlet> 2 <servlet-name>dispatcherServlet</servlet-name> 3 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 4 <init-param> 5 <param-name>contextConfigLocation</param-name> 6 <param-value>classpath:springmvc.xml</param-value> 7 </init-param> 8 <load-on-startup>1</load-on-startup> 9 </servlet> 10 <servlet-mapping> 11 <servlet-name>dispatcherServlet</servlet-name> 12 <url-pattern>/*</url-pattern> 13 </servlet-mapping>
在config目录中创建SpringMVC的配置文件springmvc.xml
3.配置编码方式(过滤器),这个过滤器必须放在所有过滤器前。
1 <filter> 2 <filter-name>characterEncodingFilter</filter-name> 3 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 4 <init-param> 5 <param-name>encoding</param-name> 6 <param-value>UTF-8</param-value> 7 </init-param> 8 </filter> 9 <filter-mapping> 10 <filter-name>characterEncodingFilter</filter-name> 11 <url-pattern>/*</url-pattern> 12 </filter-mapping>
4.为了使用SpringMVC框架实现REST,需配置HiddenHttpMethodFilter。
1 <filter> 2 <filter-name>hiddenHttpMethodFilter</filter-name> 3 <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> 4 </filter> 5 <filter-mapping> 6 <filter-name>hiddenHttpMethodFilter</filter-name> 7 <url-pattern>/*</url-pattern> 8 </filter-mapping>
web.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 5 http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" id="WebApp_1529217958650"> 6 <!-- 配置Spring IOC 容器 --> 7 <context-param> 8 <param-name>contextConfigLocation</param-name> 9 <param-value>classpath:applicationContext.xml</param-value> 10 </context-param> 11 <listener> 12 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 13 </listener> 14 15 <!-- 配置Springmvc的核心控制器 --> 16 <servlet> 17 <servlet-name>dispatcherServlet</servlet-name> 18 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 19 <init-param> 20 <param-name>contextConfigLocation</param-name> 21 <param-value>classpath:springmvc.xml</param-value> 22 </init-param> 23 <load-on-startup>1</load-on-startup> 24 </servlet> 25 <servlet-mapping> 26 <servlet-name>dispatcherServlet</servlet-name> 27 <url-pattern>/*</url-pattern> 28 </servlet-mapping> 29 <!-- 配置编码方式过滤器,且必须配置在所有的过滤器最前面 --> 30 <filter> 31 <filter-name>characterEncodingFilter</filter-name> 32 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 33 <init-param> 34 <param-name>encoding</param-name> 35 <param-value>UTF-8</param-value> 36 </init-param> 37 </filter> 38 <filter-mapping> 39 <filter-name>characterEncodingFilter</filter-name> 40 <url-pattern>/*</url-pattern> 41 </filter-mapping> 42 <!-- 为了使用SpringMVC框架实现REST,需配置HiddenHttpMethodFilter --> 43 <filter> 44 <filter-name>hiddenHttpMethodFilter</filter-name> 45 <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> 46 </filter> 47 <filter-mapping> 48 <filter-name>hiddenHttpMethodFilter</filter-name> 49 <url-pattern>/*</url-pattern> 50 </filter-mapping> 51 52 </web-app>
三、配置SpringMVC
1.配置自动扫描的包
1 <context:component-scan base-package="com.Spittr.dao.impl" 2 use-default-filters="false"> 3 <context:include-filter type="annotation" 4 expression="org.springframework.stereotype.Controller" /> 5 <context:include-filter type="annotation" 6 expression="org.springframework.web.bind.annotation.ControllerAdvice" /> 7 </context:component-scan>
2.配置视图解析器
应用中所有的视图即JSP文件都放入WEB-INF下的view文件夹中。
1 <bean id="viewResolver" 2 class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 3 <property name="prefix" value="/WEB-INF/view/"> 4 </property> 5 <property name="suffix" value=".jsp"> 6 </property> 7 </bean>
3.配置静态资源
1 <mvc:default-servlet-handler/>
4.配置注解
1 <mvc:annotation-driven></mvc:annotation-driven>
springmvc.xml
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" xmlns:context="http://www.springframework.org/schema/context" 4 xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop" 5 xmlns:tx="http://www.springframework.org/schema/tx" 6 xsi:schemaLocation="http://www.springframework.org/schema/beans 7 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 8 http://www.springframework.org/schema/context 9 http://www.springframework.org/schema/context/spring-context-3.0.xsd 10 http://www.springframework.org/schema/aop 11 http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 12 http://www.springframework.org/schema/tx 13 http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 14 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> 15 16 <!-- 配置自动扫描的包 --> 17 <context:component-scan base-package="com.Spittr.dao.impl" 18 use-default-filters="false"> 19 <context:include-filter type="annotation" 20 expression="org.springframework.stereotype.Controller" /> 21 <context:include-filter type="annotation" 22 expression="org.springframework.web.bind.annotation.ControllerAdvice" /> 23 </context:component-scan> 24 25 <!-- 配置视图解析器 --> 26 <bean id="viewResolver" 27 class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 28 <property name="prefix" value="/WEB-INF/view/"> 29 </property> 30 <property name="suffix" value=".jsp"> 31 </property> 32 </bean> 33 <!-- 配置静态资源 --> 34 <mvc:default-servlet-handler/> 35 <!-- 配置注解 --> 36 <mvc:annotation-driven></mvc:annotation-driven> 37 </beans>
四、配置Spring
1.配置自动扫描的包
包含Controller和ControllerAdvice注解的bean交给SpringMVC来扫描,Spring就不再扫描了,所以要把这两个注解排除在外。
1 <context:component-scan base-package="com.Spittr" 2 use-default-filters="false"> 3 <!-- 去除由Springmvc负责扫描的注解 --> 4 <context:exclude-filter type="annotation" 5 expression="org.springframework.stereotype.Controller" /> 6 <context:exclude-filter type="annotation" 7 expression="org.springframework.web.bind.annotation.ControllerAdvice" /> 8 </context:component-scan>
2.配置数据源
数据源配置文件:db.properties,也放在config文件夹中。
1 jdbc.user=root 2 jdbc.password=123456 3 jdbc.driverClass=com.mysql.jdbc.Driver 4 jdbc.jdbcUrl=jdbc\:mysql\://localhost\:3306/spittr
1 <context:property-placeholder location="classpath:/config/db.properties" />
3.配置DataSource,使用c3p0连接池。
1 <bean class="com.mchange.v2.c3p0.ComboPooledDataSource" id="dataSource"> 2 <property name="user" value="${jdbc.user}"></property> 3 <property name="password" value="${jdbc.password}"></property> 4 <property name="driverClass" value="${jdbc.driverClass}"></property> 5 <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property> 6 </bean>
五、配置Hibernate
1.配置SeeionFactory
1 <bean class="org.springframework.orm.hibernate5.LocalSessionFactoryBean" 2 id="sessionFactory"> 3 4 </bean>
在SessionFactory中需要添加以下三个property:
1.1.配置数据源
1 <property name="dataSource" ref="dataSource"></property>
1.2.配置实体包(pojo)
1 <property name="PhysicalNamingStrategy"> 2 <bean class="org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl"></bean> 3 </property> 4 <property name="packagesToScan" value="com.Spittr.entity"></property>
1.3.配置Hibernate的常用属性
1 <property name="hibernateProperties"> 2 <props> 3 <!-- 数据库的方言 --> 4 <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 5 <prop key="hibernate.show_sql">true</prop> 6 <prop key="hibernate.format_sql">true</prop> 7 <prop key="hibernate.hbm2ddl.auto">update</prop> 8 </props> 9 </property>
2.配置hibernate的事务管理器
1 <bean class="org.springframework.orm.hibernate5.HibernateTransactionManager"> 2 <property name="sessionFactory" ref="sessionFactory"></property> 3 </bean>
applicationContext.xml
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" xmlns:context="http://www.springframework.org/schema/context" 4 xsi:schemaLocation="http://www.springframework.org/schema/beans 5 http://www.springframework.org/schema/beans/spring-beans-4.1.xsd 6 http://www.springframework.org/schema/context 7 http://www.springframework.org/schema/context/spring-context-4.1.xsd"> 8 9 <!-- 配置自动扫描的包 --> 10 <context:component-scan base-package="com.Spittr" 11 use-default-filters="false"> 12 <!-- 去除由Springmvc负责扫描的注解 --> 13 <context:exclude-filter type="annotation" 14 expression="org.springframework.stereotype.Controller" /> 15 <context:exclude-filter type="annotation" 16 expression="org.springframework.web.bind.annotation.ControllerAdvice" /> 17 </context:component-scan> 18 19 <!-- 配置数据源 --> 20 <context:property-placeholder location="classpath:/config/db.properties" /> 21 22 <!-- 配置DataSource --> 23 <bean class="com.mchange.v2.c3p0.ComboPooledDataSource" id="dataSource"> 24 <property name="user" value="${jdbc.user}"></property> 25 <property name="password" value="${jdbc.password}"></property> 26 <property name="driverClass" value="${jdbc.driverClass}"></property> 27 <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property> 28 </bean> 29 30 <!-- 配置SeeionFactory --> 31 <bean class="org.springframework.orm.hibernate5.LocalSessionFactoryBean" 32 id="sessionFactory"> 33 <!-- 配置数据源 --> 34 <property name="dataSource" ref="dataSource"></property> 35 <!-- 配置实体包(pojo) --> 36 <property name="PhysicalNamingStrategy"> 37 <bean 38 class="org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl"></bean> 39 </property> 40 <property name="packagesToScan" value="com.Spittr.entity"></property> 41 42 <!-- 配置Hibernate的常用属性 --> 43 <property name="hibernateProperties"> 44 <props> 45 <!-- 数据库的方言 --> 46 <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 47 <prop key="hibernate.show_sql">true</prop> 48 <prop key="hibernate.format_sql">true</prop> 49 <prop key="hibernate.hbm2ddl.auto">update</prop> 50 </props> 51 </property> 52 </bean> 53 54 <!-- 配置hibernate的事务管理器 --> 55 <bean class="org.springframework.orm.hibernate5.HibernateTransactionManager"> 56 <property name="sessionFactory" ref="sessionFactory"></property> 57 </bean> 58 </beans>
六、测试
1.测试是否能得到配置文件applicationContext.xml
1 private ApplicationContext ctx = null; 2 ctx = new ClassPathXmlApplicationContext("/config/applicationContext.xml"); 3 System.out.println(ctx);
2.测试是否能获取数据源
1 DataSource dataSource = ctx.getBean(DataSource.class); 2 System.out.println(dataSource.getConnection().toString());
3.测试Hibernate中SessionFactory是否能获取
1 SessionFactory sessionFactory = ctx.getBean(SessionFactory.class); 2 System.out.println(sessionFactory);
4.对数据库进行操作
首先创建实体类:Spitter.java
1 package com.Spittr.entity; 2 3 import java.io.Serializable; 4 5 import javax.persistence.Entity; 6 import javax.persistence.GeneratedValue; 7 import javax.persistence.GenerationType; 8 import javax.persistence.Id; 9 import javax.persistence.Table; 10 11 @Entity 12 @Table(name = "spitter") 13 public class Spitter implements Serializable { 14 @Id 15 @GeneratedValue(strategy = GenerationType.IDENTITY) 16 int id; 17 String username; 18 String password; 19 String email; 20 21 public Spitter() { 22 // TODO Auto-generated constructor stub 23 } 24 25 public Spitter(String username, String password, String email) { 26 super(); 27 this.username = username; 28 this.password = password; 29 this.email = email; 30 } 31 32 public int getId() { 33 return id; 34 } 35 36 public void setId(int id) { 37 this.id = id; 38 } 39 40 public String getUsername() { 41 return username; 42 } 43 44 public void setUsername(String username) { 45 this.username = username; 46 } 47 48 public String getPassword() { 49 return password; 50 } 51 52 public void setPassword(String password) { 53 this.password = password; 54 } 55 56 public String getEmail() { 57 return email; 58 } 59 60 public void setEmail(String email) { 61 this.email = email; 62 } 63 }
测试
1 Session session = sessionFactory.openSession(); 2 Transaction transaction = session.beginTransaction(); 3 Spitter spitter = new Spitter("222qqqq222", "123123", "123213"); 4 session.save(spitter); 5 transaction.commit(); 6 session.close();
testSSH.java
1 package com.Spittr.test; 2 3 import java.sql.SQLException; 4 5 import javax.sql.DataSource; 6 import javax.transaction.HeuristicMixedException; 7 import javax.transaction.HeuristicRollbackException; 8 import javax.transaction.RollbackException; 9 import javax.transaction.SystemException; 10 11 import org.hibernate.Session; 12 import org.hibernate.SessionFactory; 13 import org.hibernate.Transaction; 14 import org.junit.Test; 15 import org.springframework.context.ApplicationContext; 16 import org.springframework.context.support.ClassPathXmlApplicationContext; 17 18 import com.Spittr.entity.Spitter; 19 20 public class testSSH { 21 22 private ApplicationContext ctx = null; 23 24 @Test 25 public void testDataSource() throws SQLException, SecurityException, RollbackException, HeuristicMixedException, 26 HeuristicRollbackException, SystemException { 27 28 ctx = new ClassPathXmlApplicationContext("/config/applicationContext.xml"); 29 System.out.println(ctx); 30 // System.out.println(); 31 // 测试数据源 32 DataSource dataSource = ctx.getBean(DataSource.class); 33 System.out.println(dataSource.getConnection().toString()); 34 35 // 测试SessionFactory 36 SessionFactory sessionFactory = ctx.getBean(SessionFactory.class); 37 System.out.println(sessionFactory); 38 39 // 测试操作数据库表(session) 40 Session session = sessionFactory.openSession(); 41 Transaction transaction = session.beginTransaction(); 42 Spitter spitter = new Spitter("222qqqq222", "123123", "123213"); 43 session.save(spitter); 44 transaction.commit(); 45 session.close(); 46 47 } 48 49 }
七、配置过程中遇到的问题
1.classpath的相关问题
前缀 | 说明 |
---|---|
classpath | 优先本项目class路径查找,没有的话依次在其他jar包中class路径查找,找到第一个匹配的为止 |
classpath* | 加载到所有class路径下的配置文件,包括jar包的class路径下,最终加载所有匹配的 |
file | 通过URL加载,来源为文件系统(注意文件读取权限) |
http | 通过URL加载,来源为网络 |
在maven项目中,classpath对应的目录是Webapp\target\classes,也就是把配置文件都放入src/main/resources目录下即可,本例中是把config文件夹放入src/main/resources中,所以在读取config中的配置文件时,所以才会使用classpath:/config/***形式。
2.hibernate的配置
org.hibernate.cfg.NamingStrategy接口允许你为数据库中的对象和schema 元素指定一个“命名标准”. 你可能会提供一些通过Java标识生成数据库标识或将映射定义文件中”逻辑”表/列名处理成”物理”表/列名的规则. 这个特性有助于减少冗长的映射定义文件。
但是在Hibernate到5.1的后,hibernate.ejb.naming_strategy将不再被支持,而是被替换成了两个属性:
-
-
- hibernate.physical_naming_strategy:隐式命名策略,使用此属性当我们使用的表或列没有明确指定一个使用的名称。
- hibernate.implicit_naming_strategy:物理命名策略,用于转换“逻辑名称”(隐式或显式)的表或列成一个物理名称。
-
①对于physical_naming_strategy有两个常用的配置:
-
- org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
- org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
对于PhysicalNamingStrategyStandardImpl有DefaultNamingStrategy的效果;对于SpringPhysicalNamingStrategy有
ImprovedNamingStrategy的效果。
②在sessionFactory的bean里配置。
1 <property name="PhysicalNamingStrategy"> 2 <bean class="org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl"></bean> 3 </property>
或
1 <property name="ImplicitNamingStrategy"> 2 <bean class="org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyHbmImpl" /> 3 </property>
八、代码下载