zoukankan      html  css  js  c++  java
  • Java进阶知识27 SSH整合(Struts2、Spring、Hibernate)

    1、我用到的jar包  

        

    2、整合实例  

    2.1、MySQL数据库建表语句

    1 create database school; -- 创建数据库
    2 use school; -- 使用school数据库
    3 4 create table user( -- 创建user表
    4   id int(4) primary key auto_increment,
    5   name varchar(20) not null,
    6   age int(4) not null
    7 );
    8 inert into user(name,age) values("张三",18);

    2.2、配置web.xml文件

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
     3   <display-name></display-name>
     4   <welcome-file-list>
     5     <welcome-file>index.jsp</welcome-file>
     6   </welcome-file-list>
     7   
     8   <!-- Spring监听器 -->
     9   <context-param>
    10         <param-name>contextConfigLocation</param-name>
    11         <param-value>/WEB-INF/classes/beans_*.xml</param-value>
    12     </context-param>
    13     <listener>
    14         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    15     </listener>
    16 
    17     <!-- Struts2过滤器 -->
    18     <filter>
    19         <filter-name>struts2</filter-name>
    20         <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    21     </filter>
    22     <filter-mapping>
    23         <filter-name>struts2</filter-name>
    24         <url-pattern>/*</url-pattern>
    25     </filter-mapping>
    26 </web-app>

    2.3、创建实体类(User)

     1 package com.shore.entity;
     2 
     3 /**
     4  * @author DSHORE/2019-11-12
     5  * 
     6  */
     7 public class User {
     8     private Integer id;
     9     private String name;
    10     private Integer age;
    11 
    12     public Integer getId() {
    13         return id;
    14     }
    15     public void setId(Integer id) {
    16         this.id = id;
    17     }
    18 
    19     public String getName() {
    20         return name;
    21     }
    22     public void setName(String name) {
    23         this.name = name;
    24     }
    25 
    26     public Integer getAge() {
    27         return age;
    28     }
    29     public void setAge(Integer age) {
    30         this.age = age;
    31     }
    32 }

    2.4、配置实体类User的hibernate文件(User.hbm.xml)

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <!DOCTYPE hibernate-mapping PUBLIC
     3         "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
     4         "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
     5         
     6 <hibernate-mapping package="com.shore.entity">
     7     <class name="User">  
     8         <id name="id"> 
     9             <generator class="native"/>
    10         </id>
    11         <property name="name" type="java.lang.String"/> 
    12         <property name="age" type="java.lang.Integer"/> 
    13     </class>
    14 </hibernate-mapping>

    2.5、创建dao层IUserDao接口类以及UserDao接口实现类

     1 //接口类
     2 public interface IUserDao {
     3     public User getByName(String name);//根据用户名查询
     4 }
     5 
     6 //对应的接口实现类
     7 public class UserDao implements IUserDao {
     8     //从IoC容器注入SessionFactory
     9     private SessionFactory sessionFactory;
    10     public void setSessionFactory(SessionFactory sessionFactory) {
    11         this.sessionFactory = sessionFactory;
    12     }
    13     
    14     @Override  //根据用户名查询
    15     public User getByName(String name) {
    16         Query query = sessionFactory.getCurrentSession().createQuery("from User where name=:name");  //:name是命名参数
    17         query.setParameter("name", name);
    18         @SuppressWarnings("unchecked")
    19         List<User> users = query.list();
    20         if (users != null && users.size() > 0) {
    21             return users.get(0);
    22         }
    23         return null;
    24     }
    25 }

    2.6、创建service层IUserService接口类以及UserService接口实现类

     1 //接口类
     2 public interface IUserService {
     3     public User getByName(String name);
     4 }
     5 
     6 //对应的接口实现类
     7 public class UserService implements IUserService {
     8 
     9     private IUserDao userDao;
    10     public void setUserDao(IUserDao userDao) {
    11         this.userDao = userDao;
    12     }
    13     
    14     @Override
    15     public User getByName(String name) {
    16         return userDao.getByName(name);
    17     }
    18 }

    2.7、创建UserAction

     1 package com.shore.action;
     2 
     3 import com.opensymphony.xwork2.ActionSupport;
     4 import com.shore.service.IUserService;
     5 
     6 /**
     7  * @author DSHORE/2019-11-16
     8  *
     9  */
    10 public class UserAction extends ActionSupport{
    11     private static final long serialVersionUID = -3099218232367860074L;
    12     
    13     private IUserService userService;
    14     
    15     public String login() {
    16         System.out.println(userService.getByName("张三"));
    17         return SUCCESS;
    18     }
    19     
    20     public void setUserService(IUserService userService) {
    21         this.userService = userService;
    22     }
    23 }

    2.8、配置Spring文件(beans_common.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" 
     4     xmlns:aop="http://www.springframework.org/schema/aop"
     5     xmlns:tx="http://www.springframework.org/schema/tx"
     6     xsi:schemaLocation="
     7        http://www.springframework.org/schema/beans
     8        http://www.springframework.org/schema/beans/spring-beans.xsd
     9        http://www.springframework.org/schema/tx
    10        http://www.springframework.org/schema/tx/spring-tx.xsd
    11        http://www.springframework.org/schema/aop
    12        http://www.springframework.org/schema/aop/spring-aop.xsd">
    13 
    14     <!-- c3p0数据库连接池配置 -->
    15     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    16         <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
    17         <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/school"></property>
    18         <property name="user" value="root"></property>
    19         <property name="password" value="root"></property>
    20         <property name="initialPoolSize" value="3"></property>
    21         <property name="maxPoolSize" value="100"></property>
    22         <property name="maxStatements" value="200"></property>
    23         <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
    24         <property name="acquireIncrement" value="2"></property>
    25     </bean>
    26 
    27     <!-- Hibernate核心配置文件(hibernate.cfg.xml)全交给Spring去管理 -->
    28     <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    29         <!-- c3p0的数据库连接池 -->
    30         <property name="dataSource" ref="dataSource"></property>
    31         <!-- Hibernate基础参数配置 -->
    32         <property name="hibernateProperties">
    33             <props>  <!-- 注意:这个是Spring配置文件,故下面的key要写全名,即:前面加上hibernate.xxxxxx -->
    34                 <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
    35                 <prop key="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</prop>
    36                 <prop key="hibernate.show_sql">true</prop>
    37                 <prop key="hibernate.format_sql">true</prop>
    38                 <prop key="hibernate.hbm2ddl.auto">update</prop>
    39             </props>
    40         </property>
    41         <!-- Hibernate 映射文件的配置 -->
    42         <property name="mappingLocations">
    43             <list>
    44                 <value>classpath:com/shore/entity/*.hbm.xml</value>
    45             </list>
    46         </property>
    47     </bean>
    48 
    49     <!-- dao层 -->
    50     <bean id="userDao" class="com.shore.dao.impl.UserDao">
    51         <property name="sessionFactory" ref="sessionFactory"></property>  
    52     </bean>
    53     
    54     <!-- service层 -->
    55     <bean id="userService" class="com.shore.service.impl.UserService">
    56         <property name="userDao" ref="userDao"></property>
    57     </bean>
    58     
    59     <!-- action层 -->
    60     <bean id="userAction" class="com.shore.action.UserAction" scope="prototype">
    61         <property name="userService" ref="userService"></property>
    62     </bean>
    63     
    64     <!-- ############Spring声明式事务管理配置########### -->
    65     <!-- 配置事务管理器 -->
    66     <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    67         <property name="sessionFactory" ref="sessionFactory"></property>
    68     </bean>
    69     
    70     <!-- 配置事务增强(针对DAO层) -->
    71     <tx:advice transaction-manager="transactionManager" id="transactionAdvice">
    72         <tx:attributes>  <!-- *代表DAO层的所有方法 -->
    73             <tx:method name="*" read-only="false"/>
    74         </tx:attributes>
    75     </tx:advice>
    76     
    77     <!-- AOP配置:配置切入点表达式 -->
    78     <aop:config>    <!-- 第一个*表示返回值类型;第二个*表示service层下的所有接口实现类;第三个*表示每个接口实现类下的所有方法 -->
    79         <aop:pointcut expression="execution(* com.shore.service.impl.*.*(..))" id="pt"/>
    80         <aop:advisor advice-ref="transactionAdvice" pointcut-ref="pt"/>
    81     </aop:config>
    82 </beans>

    2.9、配置Struts2 文件(struts.xml)

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE struts PUBLIC
     3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
     4     "http://struts.apache.org/dtds/struts-2.3.dtd">
     5 
     6 <struts>
     7     <!-- true支持动态方法调用 -->
     8     <constant name="struts.enable.DynamicMethodInvocation" value="true" />
     9     <constant name="struts.devMode" value="true" /> <!-- true -->
    10 
    11 
    12     <package name="user" namespace="/user" extends="struts-default">
    13         <action name="userAction" class="com.shore.action.UserAction">
    14             <result name="success">/success.jsp</result>
    15         </action>
    16     </package>
    17 </struts>

    测试结果图:

      

    总结:

      1、与传统方式相比,SSH框架 代码层(dao层、service层 等)耦合度较低,方便后期维护。

      2、entity、dao、service、action层、以及db层(连接数据库)都交给spring IOC容器来管理,大大降低各层之间的耦合度,极大方便该项目后期的维护。

      3、Hibernate或Spring IOC容器管理project与DB之间的连接Spring IOC容器管理dao层(及BaseDao)、service层、action层Struts2管理action层与前端页面的数据交互

    原创作者:DSHORE

    作者主页:http://www.cnblogs.com/dshore123/

    原文出自:https://www.cnblogs.com/dshore123/p/11874947.html

    版权声明:欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!

  • 相关阅读:
    SpringBoot(五)-- 整合Spring的拦截器
    SpringBoot(四)-- 整合Servlet、Filter、Listener
    SpringBoot(三)-- 整合FreeMarker模板
    XML转JSON工具类
    SpringBoot(二)-- 支持JSP
    SpringBoot(一)-- 知识点介绍
    导出Excel工具类
    Linux CentOS6.5上搭建环境遇到的问题
    网络环境未能通过安全验证,请稍候再试
    Struts2,Spring,Hibernate框架的优缺点
  • 原文地址:https://www.cnblogs.com/dshore123/p/11874947.html
Copyright © 2011-2022 走看看