整合Struts,Spring,mybatis三个框架的helloworld

struts 整合 spring 整合 mybatis:
  1-spring在web工程中使用(原理):
    1-使用spring的本质是获取每一个bean对象和让spring帮我们自动注入每个属性;
     2-所以需要获取ApplicationContext,ApplicationContext是单例的;
     3-web中可以在服务器一启动就马上工作的有:监听器(ServletContextlistener) ,application;

     4-实现原理:在web 工程中,定义个ServletContextlistener监听器,将ApplicationContext容器对象的创建语句放到监听器中,创建好后,将该容器对象存放到application域中,需要容器对象时,调用application  的 getAttribute方法;

 2-整合:
 整合分为两步:
        1-struts跟spring整合:其中利用spring管理action;
        2-spring跟mybatis整合:  其中利用spring管理sessionfactory;

3-实现步骤:

(1)整合spring:
           1-导入spring的架包jar(1-必须jar和 2-logging-jar 3-spring-web-4.0.0.RELEASE.jar, spring-webmvc-4.0.0.RELEASE.jar)
           2-配置文件:spring的核心配置文件:applicationContext.xml
           3-在web工程中的web.xml中:
            <!-- 配置spring配置文件参数 -->
              <context-param>
                  <param-name>contextConfigLocation</param-name>
                  <param-value>classpath:applicationContext.xml</param-value>
              </context-param>
              <!-- 配置spring容器监听器 -->
              <listener>
                  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
              </listener>

(2)整合struts:
           1-导入struts的jar(1-struts核心jar  2-struts2-spring-plugin-2.3.20.jar)
           2-配置文件:struts.xml配置文件;
           3-注册核心控制器,在web.xml中
           4-整合spring(将spring和Struts结合):
             1-在spring中管理action对象(注意:action作用域:prototype非单例模式,由于action是非单例的,而spring创建的对象默认是单例的,所以需要修改scpoe的属性为prototype)
             <bean id="usersAction" class="com.ssm.action.UsersAction" scope="prototype"></bean>
             2-在struts的配置文件中:
                 1- <constant name="struts.objectFactory" value="spring"></constant>
                 2-action的class属性不再指定全类名了,而是spring中的bean的id
                 <action name="xxx" class="usersAction" method="">

(3)3-整合mybatis(数据源):
          1-导入mybatis的jar(1-mybatis-jar  2-数据源-jar  3-数据库-jar 4-myabtis-spring-jar)    
           注:由于导入的架包较多,有些架包可能会重复所以需要删减重复的jar(保留高版本的架包); 
          2-mybatis的配置文件:
             1-mybatis配置文件中:只保留别名,缓存设置等配置(甚至可以完全删除)
             2-数据源:DB.properties
             3-log4j
          3-整合:
             1-spring的配置文件中:
                 1-配置数据源:

                 <!-- 整合数据库连接池c3p0 -->
                 <!-- 引入键值对文件 -->        

                  <context:property-placeholder location="classpath:db.properties"/>
                    <!-- 配置数据源对象 -->
                    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
                        <property name="driverClass" value="${jdbc.driver}"/>
                        <property name="user" value="${jdbc.user}"/>
                        <property name="password" value="${jdbc.pwd}"/>
                        <property name="jdbcUrl" value="${jdbc.url}"/>
                        <property name="maxPoolSize" value="${jdbc.maxsize}"/>
                        <property name="initialPoolSize" value="${jdbc.initsize}"/>
                    </bean>
                
                 2-配置sessionfactory:

                 <!-- 整合sessionfactory -->

                 <bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
                    <property name="dataSource" ref="dataSource"/>
                    <property name="configLocation" value="classpath:conf.xml"/>
                    <property name="mapperLocations" value="classpath:com/ssm/mapper/*.xml"/>
                </bean>
                
                3-配置mapper接口:
                <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
                    <property name="basePackage" value="com.ssm.dao"/>
                    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean"/>
                </bean>
                
                4-声明式事务:

具体实现的实例:

实现对数据库中一张user表的添加操作:

使用分层,将设计分为三层:控制层control,业务逻辑层service,持久层dao.

各层目录结构如下:

(1)Bean类有User:

package com.bean;

public class User {
	private int uid;
	private float money;
	public int getUid() {
		return uid;
	}
	public void setUid(int uid) {
		this.uid = uid;
	}
	public float getMoney() {
		return money;
	}
	public void setMoney(float money) {
		this.money = money;
	}
	@Override
	public String toString() {
		return "User [uid=" + uid + ", money=" + money + "]";
	}
	
}
(2)Dao层的mapper接口UserMapper

package com.dao;

import java.util.List;

import org.springframework.stereotype.Repository;

import com.bean.Goods;
import com.bean.User;
@Repository
public interface UserMapper {
	public int AddUser(User u);
	public int AddGoods(Goods g);
	public List<User> selectUser();
	public int deleteUser(int uid);
	public int updateUser(User u);
}

(3)控制层

1.userAction,执行添加的逻辑;

package com.handler;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.bean.Goods;
import com.bean.User;
import com.opensymphony.xwork2.ActionSupport;
import com.service.UserService;
@Controller

public class UserAction extends ActionSupport{
	private User u;
	@Autowired
	private UserService us;
	public User getU() {
		return u;
	}

	public void setU(User u) {
		this.u = u;
	}

	public void setUs(UserService us) {
		this.us = us;
	}

	public String AddUser(){
		this.us.addUser(u);
		/*this.us.addGoods(g);
		System.out.println(g+"******");*/
		return SUCCESS;
	}
}
2.’selectAction执行查询的逻辑:
package com.handler;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

import com.bean.User;
import com.opensymphony.xwork2.ActionSupport;
import com.service.UserService;
@Controller
public class SelectAction extends ActionSupport{
	@Autowired
	UserService us;
	List<User> l;
	public UserService getUs() {
		return us;
	}

	public void setUs(UserService us) {
		this.us = us;
	}
	public List<User> getL() {
		return l;
	}
	public void setL(List<User> l) {
		this.l = l;
	}
	public String select(){
		l=this.us.selectUser();
		return SUCCESS;
	}
}

(4)service层有:UserServlce

package com.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.bean.Goods;
import com.bean.User;
import com.dao.UserMapper;
@Service
public class UserService {
	@Autowired
	private UserMapper um;
	public void setUm(UserMapper um) {
		this.um = um;
	}
	public void addUser(User u){
		this.um.AddUser(u);
	}
	public void addGoods(Goods g){
		this.um.AddGoods(g);
	}
	public List<User> selectUser(){
		List<User> l=this.um.selectUser();
		return l;
	}
	public int deleteUser(int uid){
		int num=this.um.deleteUser(uid);
		return num;
	}
	public int updateUser(User u){
		int num=this.um.updateUser(u);
		return num;
	}
}
(5)mapper.xml的映射文件UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dao.UserMapper">
	<insert id="AddUser" parameterType="user">
	insert into user values(#{uid},#{money})
	</insert>
	
	<select id="selectUser" resultType="user">
	select * from user
	</select>
	<delete id="deleteUser" parameterType="int">
	delete from user where uid=#{value}
	</delete>
	<update id="updateUser" parameterType="user">
	update user set money=#{money} where uid=#{uid}
	</update>
</mapper>
(6)spring的主配置文件applicationContext.xml

<?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:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans  
                        http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  
                        http://www.springframework.org/schema/context  
                        http://www.springframework.org/schema/context/spring-context-4.0.xsd  
                        http://www.springframework.org/schema/mvc  
                        http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
                        http://www.springframework.org/schema/aop 
                        http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
                        http://www.springframework.org/schema/tx 
                        http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
                        
    <!--   扫描注入          -->         
     <context:component-scan base-package="com"></context:component-scan>
	<!-- <bean id="userAction" class="com.handler.UserAction" scope="prototype">
	<property name="us" ref="userService"></property>
	</bean> -->
	<!-- <bean id="userService" class="com.service.UserService">
	<property name="um" ref=""></property>
	</bean> -->
	<!-- 配置数据源 -->
	<!-- 引入键值对文件 -->
	<context:property-placeholder location="classpath:DB.properties"/>
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
	<property name="driverClass" value="${driverClass}"></property>
	<property name="jdbcUrl" value="${jdbcUrl}"></property>
	<property name="user" value="${user}" ></property>
	<property name="password" value="${password}"></property>
	</bean>
	<!-- 整合sessionfactory -->
	<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
	<property name="dataSource" ref="dataSource"></property>
	<property name="configLocation" value="classpath:conf.xml"></property>
	<property name="mapperLocations" value="classpath:com/mapper/*.xml"></property>
	</bean>
	<!--配置mapper接口  -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
	<property name="basePackage" value="com.dao"></property>
	<property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean"></property>
	</bean>
	<!-- 配置事务管理器 -->
	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
	<property name="dataSource" ref="dataSource"></property>
	</bean>
	<!-- 配置事务属性 -->
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
	<tx:attributes>
	<tx:method name="*"/>
	</tx:attributes>
	</tx:advice>
	<!-- 声明式事务 -->
	<aop:config>
	<aop:pointcut expression="execution(* com.service.*.*(..))" id="pc"/>
	<aop:advisor advice-ref="txAdvice" pointcut-ref="pc"/>
	</aop:config>
</beans>
(7)mybatis的核心配置文件conf.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<typeAliases>
		<package name="com.bean"></package>
	</typeAliases>
</configuration>
(8)struts的核心配置文件struts.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />
    <constant name="struts.objectFactory" value="spring"></constant>

    <package name="default" namespace="/" extends="struts-default">
		<action name="userAction" class="userAction" method="AddUser">
		<result type="redirectAction">
		<param name="actionName">selectAction</param>
		<param name="namespace">/</param>
		</result>
		</action>
      <action name="selectAction" class="selectAction" method="select">
      <result>/show.jsp</result>
      </action>
       <action name="deleteAction" class="deleteAction" method="delete">
      <result type="redirectAction">
		<param name="actionName">selectAction</param>
		<param name="namespace">/</param>
		</result>
      </action>
       <action name="updateAction" class="updateAction" method="update">
      <result type="redirectAction">
		<param name="actionName">selectAction</param>
		<param name="namespace">/</param>
		</result>
      </action>
    </package> 
</struts>
展示界面show.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'show.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
  <table border="1px">
  <tr>
  <td>uid</td>
  <td>money</td>
  <td>opt</td>
  </tr>
   <s:iterator value="l" var="u">
  <tr>
  <td><s:property value="#u.uid"/></td>
  <td><s:property value="#u.money"/></td>
  <td><a href="deleteAction?uid=<s:property value="#u.uid"/>"style="width: 40px"> delete</a><a href="update.jsp?uid=<s:property value="#u.uid"/>&money=<s:property value="#u.money"/>">update</a></td>
  </tr>
   </s:iterator> 
  </table>
   
  </body>
</html>



运行结果:


添加成功后的查询结果:


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值