笔记48 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>  

八、代码下载

https://github.com/lyj8330328/SSHDemo-Maven-Webapp

posted @ 2018-06-17 18:14  雨落忧伤-  阅读(496)  评论(0编辑  收藏  举报