您的位置:首页 > 编程语言 > Java开发

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

2017-08-18 21:44 543 查看
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"
c79a
/>

                    <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>



运行结果:



添加成功后的查询结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: