spring3.0+struts2+ibatis2整合学习

spring3.0+struts2+ibatis2 整合简单实例

写在前面的话:

	工作需要从SSM框架向后学习SSI框架,在此总结一下学习的过程和经验总结,一方面在以后工作中能有据可依,另一方面与大家分享一下,若各位略有所得也算为社会发展人类进步略尽绵薄之力.


																																																		董风徐徐:19.4.19

一.项目的目的

1.项目框架简介

整个项目分三层:Action Service Dao
框架的作用:spring 管理所有对象 包括执行sql语句的对象,三层的对象,action对象
strtus 流程管理,用户请求发送到后端的过滤选择过程,执行后服务返回到前端的过程
ibatis 封装了Jdbc高效访问数据库,将sql语句从Java代码中分离出来是他的最大的贡献

2.项目框架意义

个人认为框架的意义就是为了快速开发,层次逻辑分明,极大地优化了后期维护流程,降低功能模块间的耦合程度,学习要带着这样的目的去理解框架.
为了符合这样的思想,将配置文件拆分,与它所在的框架一一对应,更显得条例分明.

3.前期准备

1. 知识储备

建议有时间详细学习下三个框架,框架的价值在个人面前永远是其设计原理,给思想上带来的开阔.会<“使用框架只能证明你是一个很好的装配工”>,如果 想从工人变成科学家,那我们的路还有很远.

2.工具平台

笔记本.Window7系统 .sts编译器maven项目,Tomcat8.5服务器,jdk1.8(可参照准备)

二.工程步骤

1.创建maven-webapp项目

在这里插入图片描述必须要有三个源文件夹在这里插入图片描述:

2.pom依赖引入jar包

有maven项目替我们管理jar包是非常幸福的一件事

<properties>
<struts.version>2.2.1.1</struts.version>
<struts.d.javassist>3.12.1.GA</struts.d.javassist>
<spring.version>3.0.5.RELEASE</spring.version>
<ibatis.version>2.0.8</ibatis.version>
<junit.version>4.8.2</junit.version>
<slf4j.version>1.6.1</slf4j.version>
<logback.version>0.9.29</logback.version>
</properties>
  <dependencies>


<!-- 依赖包配置 -->

<!-- j2ee5依赖包 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>

<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>



<!-- struts2 依赖包 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>${struts.version}</version>
</dependency>

<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-convention-plugin</artifactId>
<version>${struts.version}</version>
</dependency>

<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>${struts.version}</version>
</dependency>

<dependency>
<groupId>javassist</groupId>
<artifactId>javassist</artifactId>
<version>${struts.d.javassist}</version>
</dependency>

<!-- spring 依赖包 -->

<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>${spring.version}</version>
		</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>c3p0</groupId>
    <artifactId>c3p0</artifactId>
    <version>0.9.1.2</version>
</dependency>
<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${spring.version}</version>
		</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>

<!-- ibatis依赖包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-ibatis</artifactId>
<version>${ibatis.version}</version>
</dependency>

<dependency>
<groupId>org.apache.ibatis</groupId>
<artifactId>ibatis-sqlmap</artifactId>
<version>2.3.4.726</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.14</version>
</dependency>
<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-dbcp2</artifactId>
			<version>2.1.1</version>
		</dependency>

<!-- slf4j+LOGBack依赖包 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>${logback.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
</dependency>
 </dependencies> 

有些jar包不是非必须的,在后续项目会用到,目前不会冲突

3.web.xml配置

说明:这两个配置一个是在启动项目时创建springcontext容器,自动管理所有对象,第二个是加载Struts2的核心调度器

<?xml version="1.0" encoding="UTF-8"?>
	<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
		http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
			 
		<!-- 用于指定Spring的配置文件路径 -->
		<context-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:applicationContext.xml</param-value>
		</context-param>
	 
		<!-- 服务器启动时,通过监听器初始化Spring的配置环境 
			监听器,默认加载文件是:/WEB-INF/applicationContext.xml
		-->
		<listener>
			<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
		</listener>
		 
		<!-- 配置Struts2框架的核心调度器 -->
		<filter>
			<filter-name>struts2</filter-name>
			<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
		</filter>
		<filter-mapping>
			<filter-name>struts2</filter-name>
			<url-pattern>/*</url-pattern>
		</filter-mapping>
	 
	    <!-- 默认主界面 -->
		<welcome-file-list>
			<welcome-file>login.jsp</welcome-file>
		</welcome-file-list>
	</web-app>

4.resources添加

1.applicationContext.xml配置文件

注意看注释:

<bean id="userDao" class="com.ljh.dao.UserDao">
	<property name="sqlMapClient" ref="sqlMapClient"></property>
</bean>

<bean id="userService" class="com.ljh.service.UserService">
	<property name="userDao" ref="userDao"></property>
</bean>

<bean id="loginAction" class="com.ljh.action.LoginAction" autowire="byName" scope="prototype" >
	<property name="userService" ref="userService"></property>
</bean>

<bean class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
	<property name="locations">
		<value>classpath:db.properties</value>
	</property>
</bean>

				<!-- 配置C3P0数据源连接池,通过读取属性文件 -->
<bean id="c3p0" class="com.mchange.v2.c3p0.ComboPooledDataSource">
	<property name="user" value="${jdbc.username}"></property>
	<property name="password" value="${jdbc.password}"></property>
	<property name="jdbcUrl" value="${jdbc.url}"></property>
	<property name="driverClass" value="${jdbc.driver}"></property>                
</bean>
			 
		<!-- IBatis核心对象sqlMapClient的声明 ,通过工厂SqlMapClientFactoryBean和IBatis核心配置文件-->
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
	<property name="dataSource" ref="c3p0"></property>
	<property name="configLocation" >
		<value>classpath:SqlMapConfig.xml</value>
	</property>
</bean>
2.db.properties与sqlMap.xml与SqlMapConfig.xml

db.properties:
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/store?useUnicode=true&characterEncoding=utf8 jdbc.username=root jdbc.password=tiger

sqlMap.xml
主要写sql的地方

<sqlMap>
	<typeAlias alias="account" type="com.ljh.userpojo.Account"/>
	<select id="queryAll" resultClass="account" >
		select uname,password from account
	</select>
</sqlMap>

SqlMapConfig.xml
整合后只需要在里面加载sql映射文件即可

<sqlMapConfig>
	<sqlMap resource="sqlMap.xml" />
</sqlMapConfig>

Struts.xml核心配置文件

 <struts>
		<!-- 指定以name的方式组合action和service的关系 -->
		<!-- <constant name="struts.objectFactory.spring.autoWire" value="name"></constant>
	     -->
	    <!-- 设置action的信息 -->
		<package name="example" namespace="/" extends="struts-default">
	        <action name="doit" class="com.ljh.action.LoginAction" method="queryAll">
	            <result name="success" type="redirect">/index.jsp</result>
	        </action>   
	    </package>        
	</struts>

5.java源文件编写

注重两个类的编写

1.Action相关类
package com.ljh.action;

import java.sql.SQLException;
import java.util.List;

import com.ljh.service.UserService;
import com.ljh.userpojo.Account;

public class LoginAction {
	private UserService userService;
	
	public void setUserService(UserService userService) {
		this.userService = userService;
	}

	public String queryAll(){
		try {
			List<Account> list=userService.queryAll();
			System.out.println("-------------"+list);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println("hello");
		return "success";
	}
}
2.Dao相关类
package com.ljh.dao;

import java.sql.SQLException;
import java.util.List;

import com.ibatis.sqlmap.client.SqlMapClient;
import com.ljh.userpojo.Account;

public class UserDao {
	private SqlMapClient sqlMapClient;
	
	public void setSqlMapClient(SqlMapClient sqlMapClient) {
		this.sqlMapClient = sqlMapClient;
	}

	public List<Account> queryAll() throws SQLException
		List<Account> list=sqlMapClient.queryForList("queryAll");
		return list;
	};
}

要注意每个注入的属性对象都需要set方法,不然无法注入

三.测试结果

测试路劲为:localhost:8080/ssi/doit
查看控制台输出与页面跳转!

com.mchange.v2.c3p0.impl.NewPooledConnection@1e9cef)
service
-------------[Account [uname=manman, password=100619]]
hello
16:44:31.467 [http-nio-8080-exec-5] DEBUG o.a.s.d.ServletRedirectResult - Redirecting to finalLocation /ssi/index.jsp

页面跳转结果
在这里插入图片描述
到此为止整个项目结束,需要源码请联系[email protected]

四.总结

1.总结问题

首先是遇到的问题.
首先是jar包的获得,网上不同的参考文章会有不同的版本jar包,而且大部分是不提供下载包的,会化很多时间去找jar包,
配置文件不好获得,配置文件头部也会显示版本,有时版本不相匹配导致整个maven项目一直报错,不得不重新建立项目
变量名称问题,在加载配置文件时,加载的文件名一定要与你提供的配置文件名称一致,有时候在某个jar包中的类名是固定的,胡乱更改配置文件的名字是加载不上去的
在遇到数据库连接池的配置过程中,过去一直靠复制,一直不太理解,配置源的过程中涉及到两种池,dbcp和c3p0两种,错误百出
还有就是在搭建好后调试过程中的各种报错.

2.问题处理

解决中的血泪史
depandency是个好东西,包再也不用到处找了,但要注意统一版本,不然会报个jar冲突什么什么的
配置文件我都是复制的别人的,涉及到的错误不是很多,看网上意思是去官网下载然后复制
配置文件传值过程中,名称这块还需要理解才行,哪些是自己命名的,哪些是固定名称的要区分好
涉及到数据库固定配置的东西一定要要熟悉,不然每次都会遇到这个问题很难受
调试是个细致活,跟它斗需要有个好身体

3.总结收获
	到了收获的时候了想想就开心,看看我都收到了些什么东西
	1.学框架先学原理,学原理先搜经验,从简单的经验往高深原理学习.前辈的经验可是很宝贵的,搜完经验搜原理,完整的原理要背下来,不背下来请别动手开写
	2.学习要从整体到细节学习,好比你先看到一所房屋,从外部看到它是什么样的,记住了它的样子,然后学习它的组成,最简单的支撑和屋顶,慢慢学到地基.,墙面.在深入后就是材质,在深入材质的组成配比,在深入材质品级......,由整体到细节,这样你就知道如果你想盖房子你都需要什么,一步步建立起来.试想如果你上来就学什么是沙子,什么时水泥,如何分类然后就是如何造墙,如何打地基,你都不知道你要干什么,首先要有个总体的认识,需要什么就去加什么,慢慢就会成功的

猜你喜欢

转载自blog.csdn.net/weixin_43671743/article/details/89141439