博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
struts2 spring mybatis 整合(test)
阅读量:4676 次
发布时间:2019-06-09

本文共 7040 字,大约阅读时间需要 23 分钟。

这几天搭了个spring+struts2+mybatis的架子,练练手,顺便熟悉熟悉struts2.

环境:myEclipse10+tomcat7+jdk1.6(1.8的jre报错,所以换成了1.6).

框架:spring+struts2+mybatis。

 

前言:

1.spring+mybatis的配置同    spring  MVC ;

2.唯一要注意的是strtus2和spring的整合(spring中的bean注入到action中,网上各种讲解,但都相对于各自的项目,所以,新入手struts2的时候还是要自己耐心体验);

3.由于struts2本身存在bug,且相比较spring MVC没有什么优势,所以,年轻的项目基本不会选择strtus2,我使用他纯属偶然,若看客是以较功利的目的学习框架的话,不建议学习看本章博客。

 

以下,为框架:

一.   首先是jar包,这个比较烦人(相对于个人而言,企业都有整套的jar包),

以下为本人使用的jar包(由于公司不使用struts2,所以虽然我借鉴了前人的博客,但还是被jar包冲突狠狠的折磨了一番):

 

其中,commons-fileupload,commons.io,commons.lang3,freemarker,javassist,ognl,spring-strtus,struts2-core,struts2-spring-plugin,xwork-core为与struts2相关的jar包,注意,aopalliance,aspectjrt要增加。

至于每个jar包的作用请自行百度(请原谅我和部分jar包不熟的不负责任的态度)。

二.  层级

传统的企业级的项目,由于考虑到扩展性,会将service分拆为service接口,和serviceImple实现类,

我属于玩票性质,所以直接忽略了service层(图片里的service并没有使用,可忽略),直接将在action中使用mapper(框架是死的,活学活用最重要(请原谅我给自己的懒惰找借口))。

 

新人这里要注意src/Resources这个文件夹,这是资源文件夹,可以随意设置,

右击项目,选择Build Path  选择Configure  Build Path自行设置(不懂请百度)。

 

接着是web.xml,application-common.xml,mybatis.xml,struts.xml,log4j.xml,如下:

web.xml:

contextConfigLocation
classpath:applicationContext-common.xml
org.springframework.web.context.ContextLoaderListener
struts2
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
struts2
/*
index.jsp

 

application-common.xml:

 

 

mybatis.xml:

 

struts.xml:

/WEB-INF/login.jsp

 

log4j.xml:

### direct log messages to stdout ###log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target=System.outlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%nlog4j.rootLogger=debug, stdoutlog4j.logger.java.sql.PreparedStatement=debug

 

文件夹struts请忽略,这里是为了分写struts接口时使用的,但我只写了一个接口,所以,就只能呵呵了····

以下问代码部分:

LoginAction.java

package main.java.com.zq.action;import java.util.HashMap;import java.util.Map;import javax.annotation.Resource;import org.apache.log4j.Logger;import org.apache.log4j.spi.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Scope;import org.springframework.stereotype.Controller;import org.springframework.stereotype.Service;import main.java.com.zq.dao.LoginMapper;import main.java.com.zq.model.User;import main.java.com.zq.service.LoginService;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ModelDriven;@Scope("prototype")@Controller("loginAction")public class LoginAction extends ActionSupport implements ModelDriven
{ Logger logger=Logger.getLogger(LoginAction.class); @Autowired private LoginMapper loginMapper; private static final long serialVersionUID = 1L; @Override public User getModel() { // TODO Auto-generated method stub return user; } private User user=new User(); public User getUser() { return user; } public void setUser(User user) { this.user=user; } public void setLoginMapper(LoginMapper loginMapper) { this.loginMapper = loginMapper; } public String Login(){ Map
map=new HashMap
(); map.put("username", user.getUsername()); map.put("password", user.getPassword()); System.out.println(map.toString()); logger.debug(map.toString()); Map
resultMap=loginMapper.login(map); if(resultMap.get("password").equals(user.getPassword())){ return "SUCCESS"; }else { return SUCCESS; } }}

 

LoginMapper.java:

package main.java.com.zq.dao;import java.util.Map;import org.springframework.stereotype.Repository;public interface LoginMapper {    Map login(Map map);    }

 

 

LoginMapper.xml

 

User.java:

package main.java.com.zq.model;import java.io.Serializable;/** *  * @author Sean * */public class User implements Serializable{    private static final long serialVersionUID = 1L;        private String username;    public String getUsername() {        return username;    }    public void setUsername(String username) {        this.username = username;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }    private String password;    }

 

Test.java(这是我测试用的,建议坚持使用测试类,无论你偷懒直接建Test类还是使用junit,Test能在你不知道哪里出错的时候一步一步调试,让你有迹可循):

package main.java.com.zq.utils;import java.util.HashMap;import java.util.Map;import main.java.com.zq.action.LoginAction;import main.java.com.zq.dao.LoginMapper;import main.java.com.zq.model.User;import org.mybatis.spring.SqlSessionFactoryBean;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Test {    public static void main(String [] args){        ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext-common.xml");                System.out.println(context.getBean("dataSource").toString());             LoginMapper loginMapper=        (LoginMapper) context.getBean("loginMapper");          Map map=new HashMap();     map.put("username", "admin");     System.out.println(loginMapper.login(map));               LoginAction loginAction=(LoginAction) context.getBean("loginAction");     User user=new User();     user.setPassword("adine");     user.setUsername("admin");     loginAction.setUser(user);          System.out.println(loginAction.Login().toString());            }}

 

 

 

 jsp部分只有一个表单,其他什么都没有,不喜欢jsp,html万岁!

github:https://github.com/zhouqia/spring-mybatis-struts2.git

 可以直接克隆,里面的代码不可以直接用,但都有,那些想直接拉下来跑的,我就呵呵了,多动手少年。

 

 

以上。

为全部代码。

如果可以轻松搭建,建议可以看绿考虑    strtus2的过滤器和mybatis的插件的原理,你会发现都是使用动态代理实现的,

而且,你可以考虑考虑,他们使用的动态代理到底是环形的,还是直线形的。

 

 

最讨厌又臭又长的文章,以后写博客,要尽量精简。

 

转载于:https://www.cnblogs.com/zqsky/p/6170659.html

你可能感兴趣的文章
小米手机 - Charles无法安装证书 因为无法读取证书
查看>>
android 动态壁纸开发
查看>>
你误解了Windows的文件后缀名吗?
查看>>
谷歌浏览器插件
查看>>
gcc malloc/free的质疑
查看>>
Servlet注解
查看>>
今后几个月的IT读书计划
查看>>
蓝桥杯 传球游戏 动态规划
查看>>
apk反编译、smali修改、回编译笔记
查看>>
.Net程序员学习Linux最简单的方法(转载)
查看>>
Django DEBUG=False
查看>>
把实体 转为json 数据格式---jackson 的详细用法.
查看>>
数据库管理软件的由来
查看>>
Servlet容器如何处理请求资源路径
查看>>
Linux find 用法示例
查看>>
强悍高效率 92% Nixie Tube 升压电路 12V升150-250V(转)
查看>>
Happy Programming Contest
查看>>
四、K8S
查看>>
网页宽高clientWidth clientHeight获得数值不对的问题
查看>>
AX向在线用户发送消息
查看>>