• 笔记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 argetclasses,也就是把配置文件都放入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

  • 相关阅读:
    FAQ: c++ 函数名后添加 const void function1(int &id) const
    FAQ: C++中定义类的对象:用new和不用new有何区别?
    How to create a project with existing folder of files in Visual Studio?
    How to export a template in Visual Studio?
    t4 multiple output sample
    fastjson1.2.48以下版本存在重大漏洞
    一秒完成springboot与logback配置
    统计greenplum_postgresql数据占用存储情况
    上传文件不落地转Base64字符串
    三个标签完成springboot定时任务配置
  • 原文地址:https://www.cnblogs.com/lyj-gyq/p/9193407.html
Copyright © 2020-2023  润新知