SSH框架的搭建及应用

SSH框架的搭建及应用

一、创建maven程序,引入依赖
struts-core、apache-commons-fileupload,struts-convention.plugin
poi、poi-ooxml
spring-context、sprng-jdbc、spring-tx、spring-context-suport、aspectjweaver
spring-web、struts2-spring-plugin
hibernate-core、mysql、
spring-orm
druid

<?xml version="1.0" encoding="UTF-8"?>

<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.Hibernate</groupId>
  <artifactId>ssh</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>ssh Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
      <scope>provided</scope>
    </dependency>
    <!-- struts -->
    <dependency>
      <groupId>org.apache.struts</groupId>
      <artifactId>struts2-core</artifactId>
      <version>2.5.22</version>
    </dependency>
     <dependency>
      <groupId>org.apache.struts</groupId>
      <artifactId>struts2-convention-plugin</artifactId>
      <version>2.5.22</version>
    </dependency>

    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.4</version>
    </dependency>

    <!--poid相关的-->
    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi-ooxml-schemas</artifactId>
      <version>4.1.2</version>
    </dependency>
    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi-ooxml</artifactId>
      <version>4.1.2</version>
    </dependency>

    <!--spring-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.2.4.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>5.2.4.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>5.2.4.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>5.2.4.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.9.6</version>
      <scope>runtime</scope>
    </dependency>
    <!--ssh整合-->

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>5.2.4.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.apache.struts</groupId>
      <artifactId>struts2-spring-plugin</artifactId>
      <version>2.5.22</version>
    </dependency>
<!--hibernate相关-->
    <dependency>
      <groupId>org.hibernate.orm</groupId>
      <artifactId>hibernate-core</artifactId>
      <version>6.0.0.Final</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.29</version>
    </dependency>
    <!--sh整合-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-orm</artifactId>
      <version>5.3.10</version>
    </dependency>
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.2.1</version>
    </dependency>

  </dependencies>

  <build>
    <finalName>ssh</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

二、搭建Struts框架
1、引入依赖
2、在web.xml中配置核心入口(filter)

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_4_0.xsd"
         version="3.0">

    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>
            org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
        </filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

3、在scr/main/resources下创建struts.xml

<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
    <!--配置常量数量,处理action、do和没有后缀结尾的-->
    <constant name="struts.action.extension" value="action,do,,"/>

    <package name="dmc" extends="struts-default">
        
    </package>
</struts>

三:搭建spring框架
1、引入依赖
2、创建application.xml文件,建议在scr/main/resources下

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop 
      http://www.springframework.org/schema/beans/spring-aop.xsd
        http://www.springframework.org/schema/tx 
      http://www.springframework.org/schema/beans/spring-tx.xsd
        http://www.springframework.org/schema/context  
      http://www.springframework.org/schema/beans/spring-context.xsd">

</beans>

四:SS整合
所谓的ssh整合就是将sturts的action交给spring管理,原来action有sturts自己创建,随着struts2-spring-plugin整合插件包的引入,告诉sturts现在改为向Spring要action

1、引入依赖
2、在web.xml中配置监听器,在服务器启动时,就启动spring框架,确保比struts启动的早

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_4_0.xsd"
         version="3.0">
    <!--配置过滤器-->
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>
            org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
        </filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <!--配置监听器-->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
</web-app>

再提供一个全局参数,指定spring配置文件

<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:application.xml</param-value>
    </context-param>

五:搭建hibernate
1、scr/main/resources下创建hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration  PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <!-- 第二部分: 配置hibernate信息 可选的-->
        <!-- 输出底层sql语句 -->
        <property name="hibernate.show_sql">true</property>
        <!-- 输出底层sql语句格式 -->
        <property name="hibernate.format_sql">true</property>
        <!-- hibernate帮创建表,需要配置之后 update: 如果已经有表,更新,如果没有,创建 -->
        <property name="hibernate.hbm2ddl.auto">update</property>
        <!-- 配置数据库方言在mysql里面实现分页 关键字 limit,只能使用mysql里面在oracle数据库,实现分页rownum 让hibernate框架识别不同数据库的自己特有的语句 -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    </session-factory>
</hibernate-configuration>

2、封装hibernateUtil,管理sessionFactory工厂

package com.hibernate.util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;

/**
 * @author PGG
 */
public class HibernateUtil {
    private static SessionFactory factory;
    static {

        //方式一:
       /* Configuration cfg=new Configuration();
        cfg.configure();
        SessionFactory factory=cfg.buildSessionFactory();
        */

        //方式二
        StandardServiceRegistry r = new StandardServiceRegistryBuilder().configure().build();
        Configuration cfg=new Configuration();
        factory=cfg.buildSessionFactory(r);
    }
    /**
     * 获取session对象
     * @return
     */
    public static Session getSession(){
        return factory.openSession();
    }
}

注意:因为后面要实现sh整合,sh整合后,spring负责管理hibernatede 数据源,工厂,事务,所以配置文件中不需要配置数据源信息和hibernate封装了

六:sh整合
所谓的ss整合,就是由spring负责管理hibernate数据源,工厂,事务
1、引入依赖
2、实现hibernate整合的配置:管理数据源、管理工厂、管理事务

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop
      http://www.springframework.org/schema/beans/spring-aop.xsd
        http://www.springframework.org/schema/tx
      http://www.springframework.org/schema/beans/spring-tx.xsd
        http://www.springframework.org/schema/context
      http://www.springframework.org/schema/beans/spring-context.xsd">
    <!--管理数据源-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/hibernate?useUnicode=true"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
    </bean>
    <!--管理工厂-->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        <property name="configLocation" value="classpath:hibernate.cfg.xml"/>
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <!--管理事务-->
    <bean id="manager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
      <!--事务策略和管理切入点-->
    <tx:annotation-driven transaction-manager="manager"/>
</beans>

事务管理又分为三个点:
事务管理者(谁管理事务)

 <bean id="manager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

事务策略(如何管理事务)
事务切入点(什么时候管理事务)
注意:事务策略和事务切入点可以使用注解

  <!--事务策略和管理切入点-->
    <tx:annotation-driven transaction-manager="manager"/>

注意:sh整合时,对dao的操作也有影响:因为.原来dao与数据库交互时,使用我们自己管理的工厂获得session对象
现在:sh整合后,需要使用spring管理的工厂获得session对象

dao继承父类hibernateDaoSupport,然后为Dao的父类注入SessionFactory工厂,在方法中,通过父类方法获得hibernate操作的模板对象super.getHIbernateTemplate,该模板提供了crud方法

SSH框架的应用

1、创建包结构,功能类,实现orm,实现IOC,DI,excel文件
注意:在application.xml文件中,开启spring,IOC DI的注解编程

 <!--开启spring,IOC DI的注解编程-->
    <context:component-scan base-package="com.hibernate.action,com.hibernate.service,com.hibernate.dao"/>

注意:sh整合后,dao需要到spring管理的sessionFactory中获得session对象,1:dao继承HIbernateDaoSupport 为dao(父类)注入SessionFactory(曲线救国的方式)


@Repository
public class CarDao extends HibernateDaoSupport {
    /**
     * 采用曲线救国的方式为为dao(父类)注入SessionFactory
     * @param factory
     */
    @Autowired
    public void setFactory (SessionFactory factory){
        super.setSessionFactory(factory);
    }
}

2、设计网页,选择文件上传

<html>
<body>
    <form action="upload.do" method="get" enctype="multipart/form-data">
        <input type="file" name="excel"/><br/>
        <button>按钮</button>
    </form>
</body>
</html>

3、action处理请求(接收文件,读取excel,实现批量保存)
注意:
action注解实现的请求映射

 @Action(value="upload")
    public void upload(){
        //poi读取excel文件

    }

注意:struts文件上传


    private File excel;
    public void setExcel(File excel){
        this.excel=excel;
    }

注意:poi读取excel文件

 /**
     *  @Action表示接收的时upload的请求
     */
    @Action(value="upload")
    public void upload() throws IOException {
        List<Car> cars=new ArrayList<>();
        //poi读取excel文件
        Workbook book= WorkbookFactory.create(excel);
        Sheet sheet=book.getSheetAt(0);
        for(int i=1;i<=sheet.getLastRowNum();i++){
            //获取行
            Row r=sheet.getRow(i);
            //获取列的单元格
            Cell c1 = r.getCell(0);
            Cell c2 = r.getCell(1);
            Cell c3 = r.getCell(2);
            Cell c4 = r.getCell(3);
            int cno=(int)c1.getNumericCellValue();
            String cname=c2.getStringCellValue();
            String color=c3.getStringCellValue();
            int price=(int)c4.getNumericCellValue();
            Car car=new Car(cno,cname,color,price);
            cars.add(car);
        }
        //批量保存
        carService.saves(cars);
        //直接响应
        ServletActionContext.getResponse().getWriter().write("上传成功");
    }

注意:service实现批量保存的方法需要指定事务

 /**
     * 批量保存
     * @param cars
     */
    @Transactional(isolation= Isolation.SERIALIZABLE,propagation= Propagation.REQUIRED,rollbackFor=Exception.class)
    public void saves(List<Car> cars){
        //循环保存
        for(Car car:cars){
            carDao.save(car);
        }
    }

完整代码

1、pom

<?xml version="1.0" encoding="UTF-8"?>

<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.Hibernate</groupId>
  <artifactId>ssh</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>ssh Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
      <scope>provided</scope>
    </dependency>
    <!-- struts -->
    <dependency>
      <groupId>org.apache.struts</groupId>
      <artifactId>struts2-core</artifactId>
      <version>2.5.22</version>
    </dependency>
    <dependency>
      <groupId>org.apache.struts</groupId>
      <artifactId>struts2-convention-plugin</artifactId>
      <version>2.5.22</version>
    </dependency>

    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.4</version>
    </dependency>

    <!--poid相关的-->
    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi-ooxml-schemas</artifactId>
      <version>4.1.2</version>
    </dependency>
    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi-ooxml</artifactId>
      <version>4.1.2</version>
    </dependency>

    <!--spring-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.2.4.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>5.2.4.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>5.2.4.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>5.2.4.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.9.6</version>
      <scope>runtime</scope>
    </dependency>
    <!--ssh整合-->

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>5.2.4.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.apache.struts</groupId>
      <artifactId>struts2-spring-plugin</artifactId>
      <version>2.5.22</version>
    </dependency>
<!--hibernate相关-->
    <dependency>
      <groupId>org.hibernate.orm</groupId>
      <artifactId>hibernate-core</artifactId>
      <version>6.0.0.Final</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.29</version>
    </dependency>

    <!--sh整合-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-orm</artifactId>
      <version>5.3.10</version>
    </dependency>
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.2.1</version>
    </dependency>

  </dependencies>

  <build>
    <finalName>ssh</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

application.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop
      http://www.springframework.org/schema/beans/spring-aop.xsd
        http://www.springframework.org/schema/tx
      http://www.springframework.org/schema/beans/spring-tx.xsd
        http://www.springframework.org/schema/context
      http://www.springframework.org/schema/beans/spring-context.xsd">
    <!--管理数据源-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/hibernate?useUnicode=true"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
    </bean>
    <!--管理工厂-->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        <property name="configLocation" value="classpath:hibernate.cfg.xml"/>
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <!--管理事务-->
    <bean id="manager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
    <!--管理事务和管理切入点-->
    <tx:annotation-driven transaction-manager="manager"/>
   <!--开启spring,IOC DI的注解编程-->
    <context:component-scan base-package="com.hibernate.action,com.hibernate.service,com.hibernate.dao"/>
</beans>

hibernate.cfg.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration  PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <!-- 第二部分: 配置hibernate信息 可选的-->
        <!-- 输出底层sql语句 -->
        <property name="hibernate.show_sql">true</property>
        <!-- 输出底层sql语句格式 -->
        <property name="hibernate.format_sql">true</property>
        <!-- hibernate帮创建表,需要配置之后 update: 如果已经有表,更新,如果没有,创建 -->
        <property name="hibernate.hbm2ddl.auto">update</property>
        <!-- 配置数据库方言在mysql里面实现分页 关键字 limit,只能使用mysql里面在oracle数据库,实现分页rownum 让hibernate框架识别不同数据库的自己特有的语句 -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <mapping class="com.hibernate.domain.Car"></mapping>
    </session-factory>
</hibernate-configuration>

struts.xml文件

<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
    <!--配置常量数量,处理action、do和没有后缀结尾的-->
    <constant name="struts.action.extension" value="action,do,,"/>

    <package name="dmc" extends="struts-default">

    </package>
</struts>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_4_0.xsd"
         version="3.0">
    <!--配置过滤器-->
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>
            org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
        </filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <!--配置监听器-->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:application.xml</param-value>
    </context-param>
</web-app>

CarAction

package com.hibernate.action;

import com.hibernate.domain.Car;
import com.hibernate.service.CarService;
import org.apache.poi.ss.usermodel.*;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

@Controller
@ParentPackage("struts-default")
public class CarAction {
    @Autowired
    private CarService carService;

    private File excel;
    public void setExcel(File excel){
        this.excel=excel;
    }
    /**
     *  @Action表示接收的时upload的请求
     */
    @Action(value="upload")
    public void upload() throws IOException {
        List<Car> cars=new ArrayList<>();
        //poi读取excel文件
        Workbook book= WorkbookFactory.create(excel);
        Sheet sheet=book.getSheetAt(0);
        for(int i=1;i<=sheet.getLastRowNum();i++){
            //获取行
            Row r=sheet.getRow(i);
            //获取列的单元格
            Cell c1 = r.getCell(0);
            Cell c2 = r.getCell(1);
            Cell c3 = r.getCell(2);
            Cell c4 = r.getCell(3);
            int cno=(int)c1.getNumericCellValue();
            String cname=c2.getStringCellValue();
            String color=c3.getStringCellValue();
            int price=(int)c4.getNumericCellValue();
            Car car=new Car(cno,cname,color,price);
            cars.add(car);
        }
        //批量保存
        carService.saves(cars);
        //直接响应
        ServletActionContext.getResponse().getWriter().write("上传成功");
    }
}

Dao

package com.hibernate.dao;

import com.hibernate.domain.Car;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;

@Repository
public class CarDao extends HibernateDaoSupport {
    /**
     * 采用曲线救国的方式为为dao(父类)注入SessionFactory
     * @param factory
     */
    @Autowired
    public void setFactory (SessionFactory factory){
        super.setSessionFactory(factory);
    }

    /**
     * 保存的方法
     * @param car
     */
    public void save(Car car){
        super.getHibernateTemplate().save(car);
    }
}

service

package com.hibernate.service;

import com.hibernate.dao.CarDao;
import com.hibernate.domain.Car;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
public class CarService {
    @Autowired
    private CarDao carDao;

    /**
     * 批量保存
     * @param cars
     */
    @Transactional(isolation= Isolation.SERIALIZABLE,propagation= Propagation.REQUIRED,rollbackFor=Exception.class)
    public void saves(List<Car> cars){
        //循环保存
        for(Car car:cars){
            carDao.save(car);
        }
    }
}

car实体

package com.hibernate.domain;

import jakarta.persistence.*;

import java.io.Serializable;

@Entity
@Table(name = "t_Car")
public class Car implements Serializable {
   @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer cno;
    private String cname;
    private String color;
    private Integer price;

    public Car() {
    }

    public Car(Integer cno, String cname, String color, Integer price) {
        this.cno = cno;
        this.cname = cname;
        this.color = color;
        this.price = price;
    }
    @Id
    public Integer getCno() {
        return cno;
    }

    public void setCno(Integer cno) {
        this.cno = cno;
    }
    @Column(name = "carname",length = 8)
    public String getCname() {
        return cname;
    }

    public void setCname(String cname) {
        this.cname = cname;
    }
    @Transient
    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public Integer getPrice() {
        return price;
    }

    public void setPrice(Integer price) {
        this.price = price;
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值