Spring4第五讲学习笔记,整合Spring,Struts,Mybatis框架
来源:互联网 发布:java nio长连接实现 编辑:程序博客网 时间:2024/05/19 10:40
1.导入Spring4 struts2 Mybatis JAR包
注意导入整合包 :struts2-spring-plugin-2.3.4.jar mybatis-spring-1.2.3.jar 还有数据库驱动
aopalliance.jar
asm-3.3.1.jar
asm-commons-3.3.jar
asm-tree-3.3.jar
aspectjweaver.jar
cglib-2.2.2.jar
commons-fileupload-1.2.2.jar
commons-io-2.0.1.jar
commons-lang3-3.1.jar
commons-logging-1.1.1.jar
freemarker-2.3.19.jar
javassist-3.17.1-GA.jar
log4j-1.2.17.jar
log4j-api-2.0-rc1.jar
log4j-core-2.0-rc1.jar
mybatis-3.2.7.jar
mybatis-spring-1.2.3.jar
mysql-connector-java-5.1.20-bin.jar
ognl-3.0.5.jar
slf4j-api-1.7.5.jar
slf4j-log4j12-1.7.5.jar
spring-aop-4.1.6.RELEASE.jar
spring-aspects-4.1.6.RELEASE.jar
spring-beans-4.1.6.RELEASE.jar
spring-context-4.1.6.RELEASE.jar
spring-context-support-4.1.6.RELEASE.jar
spring-core-4.1.6.RELEASE.jar
spring-expression-4.1.6.RELEASE.jar
spring-jdbc-4.1.6.RELEASE.jar
spring-orm-4.1.6.RELEASE.jar
spring-tx-4.1.6.RELEASE.jar
spring-web-4.1.6.RELEASE.jar
spring-webmvc-4.1.6.RELEASE.jar
struts2-core-2.3.4.jar
struts2-spring-plugin-2.3.4.jar
xwork-core-2.3.4.jar
2.编写配置文件
需要在web.xml声明Spring和struts的配置文件。web.xml是整个配置文件的指挥者。
Spring配置文件是applicationContext.xml
Struts2的配置文件是struts.xml
为了配置Spring的配置文件,首先需要在web.xml中添加全局参数。
首先配置全局参数context-param, 参数名是全局配置文件路径contextConfigLocation,值是classpath:applicationContext.xml
配置一个监听器,全局加载监听器contextLoaderListener,它在初始化的时候创建webApplicationContext容器,根据全局参数contextConfigLocation的路径去加载Spring的配置文件
再配置struts2的过滤器的相关信息,filter 和 filter-mapping
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_9" 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的配置文件 -->
<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>*.action</url-pattern>
</filter-mapping>
<display-name>Struts Showcase Application</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
3.配置mybatis的配置文件
mybatis.cfg.xml ,映射命名空间的sql语句mybatis.cfg.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>
<mappers>
<!--注意在这里注册user的userMapper.xml配置文件,文件夹的"/"导入-->
<mapper resource="domain/userMapper.xml"/>
</mappers>
</configuration><?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="domain.userMapper">
<select id="getAll" resultType="domain.User">
select * from user
</select>
<insert id="addUser" parameterType="domain.User">
insert into user(name,pwd) values(#{name},#{pwd})
</insert>
查询动作,相当重要,根据修改后的全局ID查询并返回User对象
<select id="getUserById" resultType="domain.User" parameterType="int">
select * from user where id = #{id}
</select>
<update id="updateUser" parameterType="domain.User">
update user set name=#{name},pwd=#{pwd} where id=#{id}
</update>
<delete id="deleteUser" parameterType="domain.User">
delete from user where id=#{id}
</delete>
</mapper>
4.编码
domain dao dao.impl service service.impl action
domainpublic interface UserDao {
public List<User> getAll();
public int add(User user);
public User getUserById(int id);
public int update(User user);
public int delete(User user);
}dao.impl
package dao.imp;
import java.util.List;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import dao.UserDao;
import domain.User;
public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao{
/*在spring配置文件中注入的是sqlSessionFactory,它继承了sqlSessionDaoSupport可以直接使用getSqlSession()方法得到sqlSession*/
@Override
public List<User> getAll() {
String statement ="domain.userMapper.getAll";//映射的是user的命名空间和ID
return this.getSqlSession().selectList(statement);
}
@Override
public int add(User user) {
String statement ="domain.userMapper.addUser";
return this.getSqlSession().insert(statement, user);
}
@Override
public User getUserById(int id) {
String statement = "domain.userMapper.getUserById";
return this.getSqlSession().selectOne(statement, id);
}
@Override
public int update(User user) {
String statement ="domain.userMapper.updateUser";
return this.getSqlSession().update(statement, user);
}
public int delete(User user){
String statement="domain.userMapper.deleteUser";
return this.getSqlSession().delete(statement,user);
}
}
package service;
import java.util.List;
import domain.User;
public interface UserService {
/*UserService接口,与UserDao接口保持一致*/
public List<User> getAll();
public int add(User user);
public User getUserById(int id);
public int update(User user);
public int delete(User user);
}
package service.imp;
import java.util.List;
import service.UserService;
import dao.UserDao;
import domain.User;
public class UserServiceImpl implements UserService{
private UserDao userDao;//通过Spring的Bean注入,需要set方法
@Override
public List<User> getAll(){
return userDao.getAll();
}
public UserDao getUserDao() {
return userDao;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public int add(User user) {
return userDao.add(user);
}
@Override
public User getUserById(int id) {
return userDao.getUserById(id);
}
@Override
public int update(User user) {
return userDao.update(user);
}
@Override
public int delete(User user) {
return userDao.delete(user);
}
}
8.添加记录 首先在list.jsp页面中添加一个超链接,跳转至toAdd.action请求,struts2根据请求对应的方法转发至add.jsp,在账户和密码上写记录。记录提交至add.aciton,Action中调用service的方法。service调用userDao。userDao里继承的是SqlSessionDaoSupport,注入sqlSessionFactory。this.getSqlSession().insert(statement,参数)。statement指向的是mybatis命名空间的类名加标签ID。
9.查询记录,修改记录之前必须先查询到个别user。在userDao中根据迭代器中提交的参数ID查询到相关的user。在执行超链接中的action的时候它的参数把全局的user的id改为此行记录的id
<td><a href="toUpdate.action?user.id=<s:property value="id" />">修改</a></td>
10.更新记录
在list.jsp页面中添加超链接,跳转是toUpdate.action请求,struts2根据请求对应的方法转发至update.jsp,必须先获取要修改对象的<a href="toUpdate.action?user.id=<s:property value="id" />">修改</a>ID,通过添加参数的方法提交。
在update.jsp中修改完成后向update.action提交请求,在Action中调用service方法。修改完成后跳转list.action至list.jsp
11.删除
在list.jsp页面中添加超链接,执行delete.action,同上,根据此行的ID,将全局的user的id改为它,执行userService的删除方法。
Action:UserAction
package action;
import java.util.List;
import service.UserService;
import com.opensymphony.xwork2.Action;
import domain.User;
userAction
public class UserAction implements Action{
private List<User> list;//需要set和get方法,用于OGNL表达式在页面展示数据,需要set和get方法
private UserService userService;//通过Spring的Bean注入userService,需要set方法
private User user;//属性驱动,用于接收页面提交的一些参数,需要set,get方法
@Override
public String execute() throws Exception {
System.out.println("默认的action的execute方法执行");
return Action.SUCCESS;
}
public String list(){
list = userService.getAll();
return Action.SUCCESS;
}
public String toAdd(){
return Action.SUCCESS;
}
public String add(){
System.out.println("add function run");
int i =userService.add(user);
return i>0?Action.SUCCESS:Action.ERROR;
}
public String toUpdate(){
user = userService.getUserById(user.getId());//修改,先根据页面提交的更改后的全局ID,拿到查询的user对象
System.out.println("接受到的User的ID是:"+user.getId());
return Action.SUCCESS;
}
public String update(){
int i =userService.update(user);
return i>0?Action.SUCCESS:Action.ERROR;
}
public String delete(){
user = userService.getUserById(user.getId()); //删除,先根据全局ID查询到user对象
System.out.println("即将删除的ID是:"+user.getId());
int i = userService.delete(user);
return i>0?Action.SUCCESS:Action.ERROR; //三目运算符
}
public List<User> getList() {
return list;
}
public void setList(List<User> list) {
this.list = list;
}
public UserService getUserService() {
return userService;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
5.编写Spring的applicationContext.xml和struts.xml配置文件
str
<?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>
<include file="config/struts/user.xml"></include>
</struts>
--------------------------------------------------------------------------------------------------------------
user.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>
user模块的Spring配置文件在为Action注入userService的时候,bean的id是userAction,class="action.UserAction"所以这里也可以这么写
<package name="user" namespace="/" extends="struts-default">
<action name="list" class="userAction" method="list">
<result>/list.jsp</result>
</action>
添加就要跳转至添加页面
<action name="toAdd" class="userAction" method="toAdd">
<result type="redirect">/add.jsp</result>
</action>
添加成功跳转list.action重新加载list.jsp
<action name="add" class="userAction" method="add">
<result name="success" type="redirectAction">list</result>
<result name="error">/index.jsp</result>
</action>
更新先要查询,先获取迭代器中的要被修改的User的ID,根据此ID修改全局User。成功后跳转更新页面,填写相应的更新信息,这个时候是通过属性驱动修改User的信息,ID跟Action要。下面的蓝色代码
<action name="toUpdate" class="userAction" method="toUpdate">
<result>/update.jsp</result>
</action>
修改页面通过属性驱动向Action提交,成功后重新加载list.jsp
<action name="update" class="userAction" method="update">
<result name="success" type="redirectAction">list</result>
<result name="error">/index.jsp</result>
</action>
<action name="delete" class="userAction" method="delete">
<result name="success" type="redirect">list.action</result>
<result name="error">/index.jsp</result>
</action>
</package>
</struts>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body background="images/bgPic">
<table width="80%" border="2" bordercolor="0f0f0f">
<tr>
<td>编号</td>
<td>姓名</td>
<td>密码</td>
<td>操作</td>
</tr>
<s:iterator value="list">
<tr>
<td><s:property value="id" /></td>
<td><s:property value="name" /></td>
<td><s:property value="pwd" /></td>
<td>
<a href="toUpdate.action?user.id=<s:property value="id" />">修改</a>
<a href="delete.action?user.id=<s:property value="id" />" >删除</a>
</td>
</tr>
</s:iterator>
</table>
<h3><a href="toAdd.action" >添加一条记录</a></h3>
</body>
</html>
update.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="update.action" method="post">
<input type="hidden" name="user.id" value="<s:property value="user.id"/>">
账户名<input type="text" name="user.name" value="<s:property value="user.name"/>">
密码 <input type="text" name="user.pwd" value="<s:property value="user.pwd"/>">
<input type="submit" value="提交">
</form>
</body>
</html>
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: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.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 配置数据源 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="3333"/>
</bean>
<!-- 声明式事务配置 开始 -->
<!-- 配置事务管理器 -->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 配置事务通知 -->
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<!-- 配置哪些方法使用什么样的事务,配置事务的传播特性 -->
<tx:method name="add" propagation="REQUIRED"/>
<tx:method name="insert" propagation="REQUIRED"/>
<tx:method name="update" propagation="REQUIRED"/>
<tx:method name="delete" propagation="REQUIRED"/>
<tx:method name="remove*" propagation="REQUIRED"/>
<tx:method name="get" read-only="true"/>
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut expression="execution(* service.impl.*.*(..))" id="pointcut"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut"/>
</aop:config>
<!-- 声明式事务配置 结束 -->
sqlSessionFactory需要两个核心参数,一个是数据源ref,另一个是mybatis的配置文件value
<!-- 配置sqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource"ref="dataSource"/>
<property name="configLocation"value="classpath:mybatis.cfg.xml"></property>
这里我看到还有别人用了mapperLoactions参数
</bean>
<import resource="config/spring/user.xml"/>添加user模块的Spring配置文件
</beans>
----------------------------------------------------------------------------
user.xml User模块的Spring配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.1.xsd ">
<bean id="userDao"class="dao.imp.UserDaoImpl">
<property name="sqlSessionFactory"ref="sqlSessionFactory"/>
</bean>
<bean id="userService" class="service.imp.UserServiceImpl">
<property name="userDao"ref="userDao"></property>
</bean>
<bean id="userAction"class="action.UserAction" scope="prototype">
struts的配置文件中可以引用这个ID作为class,并且设置这个的范围是prototype,
每次创建都产生新的对象,跟struts的Action保持一致
<property name="userService"ref="userService"></property>
</bean>
</beans>
附 index.jsp <h1><a href="list.action">管理员登录</a></h1>
add.jsp 属性驱动
<body>
<form action="add.action" method="post">
账户名<input type="text" name="user.name">
密码 <input type="text" name="user.pwd">
<input type="submit" value="提交">
</form>
</body>
阅读全文
0 0
- Spring4第五讲学习笔记,整合Spring,Struts,Mybatis框架
- Spring4.2 +Spring MVC+Mybatis 框架整合
- struts,spring,mybatis框架整合
- Struts+spring+mybatis框架整合
- Spring、MyBatis、Struts框架整合的jar
- 三大框架整合struts+spring+mybatis
- myeclipse+struts+spring+mybatis+mave的框架整合---spring+mybatis
- Spring框架学习(第五讲)
- Spring boot 和 mybatis 学习笔记1--框架整合
- struts、spring、mybatis 整合
- Spring-Struts-Mybatis整合
- 整合Struts、Spring、Mybatis
- Spring + Spring MVC + Mybatis 框架整合学习
- Java学习笔记--SSH框架整合(struts2、spring4、hibernate5)
- springmvc+spring4.04+mybatis框架整合
- 框架学习之mybatis整合spring
- Spring整合Struts框架
- Spring+mybatis+struts框架整合的配置详解
- base64img
- 美情报高级研究计划局研发多项下一代情报技术
- Python嵌套列表转一维(压平嵌套列表)
- Flex文件操作相关
- STM32F4独立看门狗IWDG
- Spring4第五讲学习笔记,整合Spring,Struts,Mybatis框架
- dede程序上传服务器
- Windows系统基于anocanda安装tensorflow以及如何在notebook,spyder等中使用tensorflow
- 初识.net界面程序(15)--鼠标事件
- void及void指针含义的深刻解析
- 数据结构之线性表顺序存储
- 重要!非常重要的提示,必看!!!
- 美陆军发布《网络战和电子战FM(战地手册)3-12》报告
- Kth Largest Element in an Array