对框架的使用理解:下载所需jar包放入项目lib目录,然后配置相应的框架的配置;就这两步框架便可使用了;
对框架组合进一步抽象:分两部分,第一部分:jsp页面的请求到达后台的action(使用struts;现在还有一个流行的选择springmvc,那就是到达controller);第二部分,jsp请求到达后台后,后台对请求进行处理,然后返回结果给jsp页面(返回结果也是要用到第一部分的配置的);
我们结合上面的两部分来讲解struts+spring+mybatis:
第一部分:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- 将action交给spring进行管理 -->
<constant name="struts.objectFactory" value="spring" />
<!--解决乱码 -->
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<!-- 更改struts2请求Action的后缀名,默认为action。若想去掉后缀,设为","即可 -->
<constant name="struts.action.extension" value=","></constant>
<!-- Struts 2 的Action必须放在包空间下 -->
<package name="abstract_struts" abstract="true" extends="struts-default"
namespace="/">
<!-- 公共东西可以放到这个抽象包下 -->
</package>
<package name="LoginActions" extends="struts-default">
<action name="*_*" class="action.UserManageAction" method="{2}">
<result name="success">/pages/main/main.jsp</result>
<result name="info">/pages/user/userInfo.jsp</result>
</action>
</package>
</struts>
这个是jsp请求发送到后台时的配置文件,也就是jsp的请求发送到了action;action代码如下
public class UserManageAction {
@Resource(name = "userService")
private UserService userService;
public String judgeLogin(){
userService.login("chenqing", "123456");
return "success";
}
}
jsp请求发送:http://localhost:8080/项目名/LoginActions.judgeLogin;此时jsp的请求已经发送到上面的action类
第二部分:
请求到达action(后台之间的调用使用spring的ioc,依赖注入),action调用service进行业务逻辑的处理,service调用dao对数据库进行操作;这里的持久层框架选择的是mybatis所以dao层是mapper和mapper.xml;这是任何框架集成后台的调用顺序,如有需要可以在这之间在加其它层;
持久层框架的配置都是和spring集成在一起的,持久层是hibernate或者mybatis都是一样;
mybatis和spring的集成:
<?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:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd">
<!-- 启用spring注解支持 -->
<context:annotation-config />
<!-- 扫描包 -->
<context:component-scan base-package="*"/>
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
<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/strutsspringmybatis" />
<property name="username" value="root" />
<property name="password" value="123456" />
</bean>
<!--创建sqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:config/mybatis.xml" />
<property name="dataSource" ref="dataSource" />
</bean>
<!-- mybatis mappers, scanned automatically -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage">
<value>
dao.mapper
</value>
</property>
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
</beans>
上面的第一部分action层调用了service层,现在贴出service层的代码
<pre class="html" name="code">@Component
public class UserService {
@Resource(name = "userInfoMapper")
private UserInfoMapper userInfoMapper;
public int login(String name,String passWord){
System.out.println(name + " " + passWord + "haha");
UserInfo userInfo = userInfoMapper.login(name, passWord);
System.out.println(userInfo + "查询出来的数据");
System.out.println(userInfo.getName() + " " + userInfo.getPassWord() + "heihei" + userInfo.getUserId());
return 1;
}
}
service层调用dao层,贴出dao层代码
@Component
public interface UserInfoMapper {
public UserInfo login(@Param(value="name")String name,@Param(value="passWord")String passWord);
}
</pre><pre class="html" name="code"><?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">
<!-- namespace属性一定要填对应Mapper接口的全路径 -->
<mapper namespace="dao.mapper.UserInfoMapper">
<!-- -->
<resultMap type="UserInfo" id="userInfoMap">
<!-- 指明数据库字段要如何和java bean对象的字段匹配 -->
<id property="userId" column="userId"/>
<result property="name" column="name"/>
<result property="passWord" column="passWord"/>
</resultMap>
<select id="login" resultMap="userInfoMap" parameterType="java.util.Map">
select * from userInfo
where name=#{name} and passWord=#{passWord};
</select>
</mapper>
留心的朋友肯定看到了第一部分的struts中有返回结果(项目中的返回是不可能像现在这样的,下次补充完整)的成分,对,有请求传递接收,处理请求和返回结果;整个过程已经结束了,而且整个过程我们借助了struts+spring+mybatis;<pre class="html" name="code">