• Spring整合Struts2,Hibernate的xml方式


           作为一个学习中的码农,一直学习才是我们的常态,所以最近学习了SSH(Spring,Struts2,Hibernate)整合,数据库用的MySQL。

    写了一个简单的例子,用的工具是IntelliJ Idea,写的Maven项目。

    1.首先创建项目

    我们看一下项目架构

    2.创建好项目我们开始项目的第一步,一如jar包,我们首先考虑一个问题需要什么jar包,会有什么问题,jar包冲突问题怎么解决。

    笔者遇到的问题比较少,但是遇到了一个log4j与hibernate带的jbossjar包版本冲突。最后注释掉log4j就可以了

    <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/maven-v4_0_0.xsd">
        <parent>
            <artifactId>Spring</artifactId>
            <groupId>cn.curry</groupId>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
        <artifactId>SSH02</artifactId>
        <packaging>war</packaging>
        <name>SSH02 Maven Webapp</name>
        <url>http://maven.apache.org</url>
        <dependencies>
            <!--单测-->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.3</version>
            </dependency>
            <!--javaee-->
            <dependency>
                <groupId>javax.javaee</groupId>
                <artifactId>javaee</artifactId>
                <version>6.0-alpha-1</version>
                <classifier>sources</classifier>
            </dependency>
            <!--slf4j日志-->
            <!-- <dependency>
                 <groupId>org.slf4j</groupId>
                 <artifactId>slf4j-api</artifactId>
                 <version>1.7.12</version>
             </dependency>-->
            <!--log4j日志-->
            <!-- <dependency>
                 <groupId>log4j</groupId>
                 <artifactId>log4j</artifactId>
                 <version>1.2.9</version>
             </dependency>-->
            <!--spring核心包-->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>4.3.6.RELEASE</version>
            </dependency>
            <!--aspectJ包-->
            <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjweaver</artifactId>
                <version>1.8.7</version>
            </dependency>
            <!--spring-jdbcjar 包-->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>4.3.3.RELEASE</version>
            </dependency>
            <!--dbcp包-->
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-dbcp2</artifactId>
                <version>2.1.1</version>
            </dependency>
    
            <!--c3p0jar 包-->
            <dependency>
                <groupId>c3p0</groupId>
                <artifactId>c3p0</artifactId>
                <version>0.9.1.2</version>
            </dependency>
            <!--mysql数据库驱动-->
            <dependency>
                <groupId>org.wisdom-framework</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.34_1</version>
            </dependency>
            <!--hibernate核心包-->
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-ehcache</artifactId>
                <version>5.0.6.Final</version>
            </dependency>
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-core</artifactId>
                <version>5.0.6.Final</version>
            </dependency>
            <!--oracle数据库-->
            <!--<dependency>
             <groupId>com.oracle</groupId>
             <artifactId>ojdbc6</artifactId>
             <version>11.2.0.1.0</version>
           </dependency>-->
            <!--jta的jar包-->
            <dependency>
                <groupId>javax.transaction</groupId>
                <artifactId>jta</artifactId>
                <version>1.1</version>
            </dependency>
            <!--支持缓存的核心包-->
            <!-- <dependency>
                 <groupId>net.sf.ehcache</groupId>
                 <artifactId>ehcache</artifactId>
                 <version>2.4.3 </version>
             </dependency>-->
            <!--支持缓存的依赖包-->
            <!--<dependency>
                <groupId>backport-util-concurrent</groupId>
                <artifactId>backport-util-concurrent</artifactId>
                <version>3.1</version>
            </dependency>-->
           <!-- jstl jar包-->
             <dependency>
                 <groupId>org.apache.taglibs</groupId>
                 <artifactId>taglibs-standard-spec</artifactId>
                 <version>1.2.1</version>
             </dependency>
    
             <dependency>
                 <groupId>org.apache.taglibs</groupId>
                 <artifactId>taglibs-standard-impl</artifactId>
                 <version>1.2.1</version>
             </dependency>
           <!-- mybatis jar包-->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.4.2</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-orm</artifactId>
                <version>4.3.3.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>4.3.6.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.apache.struts</groupId>
                <artifactId>struts2-spring-plugin</artifactId>
                <version>2.5.10.1</version>
            </dependency>
            <dependency>
                <groupId>org.apache.struts</groupId>
                <artifactId>struts2-core</artifactId>
                <version>2.5.8</version>
            </dependency>
    
            <dependency>
                <groupId>org.apache.struts.xwork</groupId>
                <artifactId>xwork-core</artifactId>
                <version>2.3.8</version>
            </dependency>
            <!--<dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring</artifactId>
                <version>2.5.2</version>
            </dependency>
            <dependency>
                <groupId>com.alexkasko.springjdbc</groupId>
                <artifactId>springjdbc-iterable</artifactId>
                <version>1.0.3</version>
            </dependency>-->
    
    
        </dependencies>
        <build>
            <resources>
                <resource>
                    <directory>src/main/java</directory>
                    <includes>
                        <include>**/*.*</include>
                    </includes>
                </resource>
            </resources>
        </build>
    </project>

    3.开始代码书写,创建实体类,小配置

    package cn.curry.entity;
    
    /**
     * Created by Curry on 2017/4/2.
     */
    
    public class Stock {
        private Integer sid;
        private String sname;
        private Integer scount;
    
        public Integer getSid() {
            return sid;
        }
    
        public void setSid(Integer sid) {
            this.sid = sid;
        }
    
        public String getSname() {
            return sname;
        }
    
        public void setSname(String sname) {
            this.sname = sname;
        }
    
        public Integer getScount() {
            return scount;
        }
    
        public void setScount(Integer scount) {
            this.scount = scount;
        }
    }


    <?
    xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="cn.curry.entity"> <class name="Stock" table="stock"> <id name="sid"> <generator class="native"/> </id> <property name="sname"/> <property name="scount"/> </class> </hibernate-mapping>

    实体类小配置不多说。

    3.然后我们开始写dao及其实现

    dao层

    package cn.curry.dao;
    
    import cn.curry.entity.Stock;
    
    /**
     * Created by Curry on 2017/4/2.
     */
    public interface IStockDao {
        public int addStock(Stock stock);
    }

    实现层

    package cn.curry.dao.impl;
    
    import cn.curry.dao.IStockDao;
    import cn.curry.entity.Stock;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    
    import java.io.Serializable;
    
    
    /**
     * Created by Curry on 2017/4/2.
     */
    public class StockDao implements IStockDao {
        private SessionFactory sessionFactory;
        public int addStock(Stock stock) {
            Session session = sessionFactory.getCurrentSession();
            Serializable save = session.save(stock);
            Integer count=(Integer)save;
    
            return count.intValue();
        }
    
        public SessionFactory getSessionFactory() {
            return sessionFactory;
        }
    
        public void setSessionFactory(SessionFactory sessionFactory) {
            this.sessionFactory = sessionFactory;
        }
    }

    4.然后我们开始写service

    package cn.curry.service;
    
    import cn.curry.entity.Stock;
    
    /**
     * Created by Curry on 2017/4/3.
     */
    public interface IStockService {
        public int addStock(Stock stock);
    }

    接下来写实现

    package cn.curry.service.impl;
    
    import cn.curry.dao.IStockDao;
    import cn.curry.entity.Stock;
    import cn.curry.service.IStockService;
    
    /**
     * Created by Curry on 2017/4/3.
     */
    public class StockService implements IStockService{
        private IStockDao stockDao;
        public int addStock(Stock stock) {
            return stockDao.addStock(stock);
        }
    
        public IStockDao getStockDao() {
            return stockDao;
        }
    
        public void setStockDao(IStockDao stockDao) {
            this.stockDao = stockDao;
        }
    }

    简单说两句,以上都是一些最基础的东西,可以看出我们是对数据库stock表添加一条数据。

    5.继续我们的重点了开始书写Action层

    package cn.curry.action;
    
    import cn.curry.entity.Stock;
    import cn.curry.service.IStockService;
    import com.opensymphony.xwork2.ActionSupport;
    import com.opensymphony.xwork2.ModelDriven;
    
    /**
     * Created by Curry on 2017/4/4.
     */
    //继承ActionSupport使其成为action类,实现ModelDriven实现属性名自动装配
    public class StockAction extends ActionSupport implements ModelDriven<Stock>{
        //植入stock实体类
        private Stock stock;
        //植入iStockService业务层
        private IStockService iStockService;
        
        public StockAction(){
            stock=new Stock();
        }
        @Override//重写execute
        public String execute() throws Exception {
            int count = iStockService.addStock(stock);
            if (count>0){
                return SUCCESS;
            }else{
                return INPUT;
            }
    
        }
    
        public Stock getModel() {
            return stock;
        }
    
        public Stock getStock() {
            return stock;
        }
    
        public void setStock(Stock stock) {
            this.stock = stock;
        }
    
        public IStockService getiStockService() {
            return iStockService;
        }
    
        public void setiStockService(IStockService iStockService) {
            this.iStockService = iStockService;
        }
    }

    6.我们先写页面最后在写最重点的xml配置

    我们准备了两个页面一个index.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ page isELIgnored="false"%>
    <%
        String path = request.getContextPath();
        String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    <html>
    <head>
        <title>添加</title>
    </head>
    <body>
    <h2>添加股票</h2>
    <form action="addStock" method="post">
        <input name="sname"/>
        <input name="scount"/>
        <input type="submit" value="提交"/>
    </form>
    </body>
    </html>

    第二个成功页面

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>成功</title>
    </head>
    <body>
    <h1>添加成功!!!</h1>
    </body>
    </html>

    7.最后的配置文件部分了,我们先写一个数据库连接的配置文件jdbc.properties

    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql:///y2163
    jdbc.username=root
    jdbc.password=1234

    然后我们看strust2的配置strus.xml

    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
    
    <struts>
        <constant name="struts.devMode" value="true" />
        <constant name="struts.custom.i18n.resources" value="messages" />
        <package name="default" namespace="/"  extends="struts-default">
            <!--控制权交给Spring容器所以class配置的是Spring配置的注入id-->
            <action name="addStock" class="stockAction">
                <result name="success">success.jsp</result>
                <result name="input">index.jsp</result>
            </action>
         </package>  
    
    </struts>

    接下来是我们至关重要的的applicationContext.xml的配置,里面配置连接数据库,关联hibernate,关联Struts2

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:aop="http://www.springframework.org/schema/aop"
           xmlns:p="http://www.springframework.org/schema/p"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:tx="http://www.springframework.org/schema/tx"
           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/aop/spring-aop.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context.xsd
           http://www.springframework.org/schema/tx
           http://www.springframework.org/schema/tx/spring-tx.xsd">
        <!--<context:component-scan base-package="cn.curry"></context:component-scan>-->
        <!--关联jdbc.properties-->
        <context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>
        <!--配置数据源-->
        <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="driverClass" value="${jdbc.driver}"></property>
            <property name="jdbcUrl" value="${jdbc.url}"></property>
            <property name="user" value="${jdbc.username}"></property>
            <property name="password" value="${jdbc.password}"></property>
        </bean>
        <!--配置注入sessionFactory-->
        <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
            <!--数据源-->
            <property name="dataSource" ref="dataSource"></property>
            <!--hibernate属性配置,代替hibernate的大配置-->
            <property name="hibernateProperties">
                <props>
                    <!--sql方言-->
                    <prop key="hibernate.dialect">org.hibernate.dialect.MySQL57InnoDBDialect</prop>
                    <!--是否输出sql语句-->
                    <prop key="hibernate.show_sql">true</prop>
                    <!--是否格式化输出sql语句-->
                    <prop key="hibernate.format_sql">true</prop>
                    <!--是否与当前线程绑定-->
                    <prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate5.SpringSessionContext</prop>
                </props>
            </property>
            <!--关联小配置-->
            <property name="mappingDirectoryLocations" value="classpath:cn/curry"></property>
        </bean>
        <!--注入dao-->
        <bean id="stockDao" class="cn.curry.dao.impl.StockDao">
            <property name="sessionFactory" ref="sessionFactory"></property>
        </bean>
        <!--注入service-->
        <bean id="stockService" class="cn.curry.service.impl.StockService">
            <property name="stockDao" ref="stockDao"></property>
        </bean>
        <bean id="stockAction" class="cn.curry.action.StockAction">
            <property name="iStockService" ref="stockService"></property>
        </bean>
        <!--事物管理器-->
        <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
            <property name="sessionFactory" ref="sessionFactory"></property>
        </bean>
        <!--aop配置事物管理-->
        <tx:advice id="txAdvice" transaction-manager="transactionManager">
            <tx:attributes>
                <tx:method name="add*" isolation="DEFAULT" propagation="REQUIRED"/>
            </tx:attributes>
        </tx:advice>
        <aop:config>
            <aop:pointcut id="piontCut" expression="execution(* *..service.*.*(..))"/>
            <aop:advisor advice-ref="txAdvice" pointcut-ref="piontCut"/>
        </aop:config>
    </beans>

    最后配置一下web.xml,就可以发布项目了

    <!DOCTYPE web-app PUBLIC
     "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
     "http://java.sun.com/dtd/web-app_2_3.dtd" >
    
    <web-app>
      <display-name>Archetype Created Web Application</display-name>
      <!--读取配置文件-->
      <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
      </context-param>
    <!--配置Struts2-->
      <filter>
        <filter-name>struts</filter-name>
        <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
      </filter>
    
      <filter-mapping>
        <filter-name>struts</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>
    <!--配置监听器-->
      <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener>
      <!--欢迎页-->
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
    </web-app>

    然后我们完成了我们项目的全部配置,最后我们启动程序看一下结果

    首先看一下数据库的数据

    然后启动服务,看页面

    然后我们再看一下数据库

    我们看到成功的在数据库添加了一条数据。

    到此为止,我们的xml整合已经全部完成。

      总结:我们有大量的配置,所以我们要小心不要写错名字,引用错名字,最后在编写类的时候不要引用错包,主要还是多写多练,熟悉每一步的配置。

  • 相关阅读:
    析构函数中的virtual是否必要?
    程序员必看的书
    UML类图几种关系的总结
    VS 2008的64位编译环境的安装和使用
    VB获取CAD属性值
    30分钟LINQ教程
    ADO.NET
    C#编写Windows服务程序图文教程
    Json的序列化与反序列化以及乱入的k_BackingField
    C#中的委托(Delegate)和事件(Event)
  • 原文地址:https://www.cnblogs.com/wei-91/p/6665469.html
Copyright © 2020-2023  润新知