spring与web struts2 以及MyBatis的整合

1、Spring整合web应用
    添加依赖  Spring-web  spring-context-support
    
    配置监听器  web.xml
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:app*.xml</param-value>
        </context-param>
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
        
    定义核心配置文件   applicationContext.xml
        <bean id="now" class="java.util.Date" p:year="1900"/>
        
    在 servlet中获取ApplicationContext,然后获取受管bean
        ApplicationContext ac = WebApplicationContextUtils.getRequiredWebApplicationContext(application);
        Date now=(Date)ac.getBean("now");
        out.println(now);        
        
2、Spring整合Struts2框架
    添加spring-web  struts2-core
        Struts2和Spring框架整合需要一个额外的插件包struts2-spring-plugin
        
    配置Spring整合web应用的监听器
        ContextLoaderListener
        
    配置Struts2的前端控制器  web.xml
        <filter>
            <filter-name>struts2</filter-name>
            <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
            <init-param>
                <param-name>struts.devMode</param-name>
                <param-value>true</param-value>
            </init-param>
        </filter>
        <filter-mapping>
            <filter-name>struts2</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>    
        
    定义Struts2的核心配置文件  struts.xml
        <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE struts PUBLIC
            "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
            "http://struts.apache.org/dtds/struts-2.5.dtd">
        <struts>
            <package name="default" extends="struts-default"
                strict-method-invocation="false"></package>
        </struts>
        
    定义对象工厂:  struts2默认使用xwork充当对象工厂,整合Spring框架后Action对象的创建应该由Spring负责
        struts.xml定义常量用于设置对象工厂为spring
            常量名称为struts.objectFactory
                <constant name="struts.objectFactory" value="spring"/>
            这个常量可以不用定义,因为在struts2-spring-plugin.jar中的struts-plugin.xml中已经定义了;当然定义了也不会出现任何错误
            
    定义Action类
        public class HelloAction extends ActionSupport {
            private String username;
            private String message;
        
            @Override
            public String execute() throws Exception {
                if (StringUtils.isBlank(username))
                    username = "Struts2";
                message = "Hello " + username + "!";
                return SUCCESS;
            }            
    
    Action组件在整合Spring后,是由Spring的IoC/DI容器负责管理。需要将Action配置在applicationContext.xml中
        <bean id="helloAction" class="com.yan.action.HelloAction"/>
        注意:因为action要求多实例单线程的运行方式,所以必须配置 scope=prototype,否则默认Spring的受管bean是单例的
            <bean id="helloAction" class="com.yan.action.HelloAction" scope="prototype"/>
            
    在Struts2的核心配置struts.xml中定义对应的路径
        <action name="hello" class="helloAction">
            <result>/msg_show.jsp</result>
        </action>    
        注意:class不再是Action类的全名,而是Action类在Spring的IoC/DI容器的名称,对应<bean>的id属性值
        
    页面输出HelloAction中的message属性值    
        vb  
        
    访问路径
        http://localhost:8080/spring0060/hello.action?username=yanjun    
        
3、Spring整合MyBatis,具体的整合方式至少有3种,要求大家熟悉MapperScanerConfig的整合方式
    添加依赖    mybatis(框架)  mybatis-spring(整合的插件)
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.4.6</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>1.3.2</version>
            </dependency>
    还需要连接池和驱动
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.10</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.46</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.0.8.RELEASE</version>
        </dependency>
        
    整合Spring框架后,所有的应用组件都将由Spring框架负责管理,例如连接池,sqlSessionFactory等
        applicationContext.xml
            <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
                p:driverClassName="${jdbc.driver}" p:url="${jdbc.url}" p:username="${jdbc.username}"
                p:password="${jdbc.password}" destroy-method="close"/>
        
        为了实现分离配置,将数据库连接的相关配置信息定义在一个database.properties资源文件中
            jdbc.driver=com.mysql.jdbc.Driver
            jdbc.url=jdbc:mysql:///test
            jdbc.username=root
            jdbc.password=eduask    
            
        引入context名空间以简化properties文件的解析
            <context:property-placeholder location="classpath:database.properties"/>
        然后在配置文件的其它位置就可以使用SpEL直接应用配置的值
        
        
        配置SqlSessionFactory
            <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"
                p:dataSource-ref="dataSource" p:mapperLocations="classpath*:/com/yan/mapper/*.xml" />
                
        创建表结构并使用maven对应的反向映射插件执行反向映射
            create table t_users(
                id bigint primary key auto_increment,
                username varchar(20) not null,
                password varchar(20) not null
            )engine=innodb default charset utf8;
            
        定义MapperScannerConfig自动扫描mybatis的相关配置信息
            <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"
                p:sqlSessionFactoryBeanName="sqlSessionFactory" p:basePackage="com.yan.dao"/>
            注意属性sqlSessionFactory-ref已经不建议使用,一般使用p:sqlSessionFactoryBeanName注入SqlSessionFactory受管bean的名称
        
        修改mapper接口,添加一个注解@Repository
        @Repository("userDao")
        public interface UserMapper {
            UserBean selectByPrimaryKey(Long id);
            
        定义业务:
            @Service("userService")
            public class UserServImpl implements IUserServ {
                @Autowired
                private UserMapper userMapper;
            
                @Override
                public void create(UserBean user) {
                    Assert.notNull(user,"参数错误!");
                    Assert.hasText(user.getUsername(),"参数错误!");
                    Assert.hasText(user.getPassword(),"参数错误!");
                    userMapper.insertSelective(user);
                }
            }
            
        添加注解相关的配置:
            <context:component-scan base-package="com.yan"></context:component-scan>
            在com.yan包或者子包中查找有对应注解的类,有4大注解的类就是受管bean
            4大注解: @Controller  @Service  @Repository  @Component
            
                
                
对连接池进行单元测试
    引入依赖  spring-test  junit(要求4.8+)
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.0.8.RELEASE</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        
    定义测试用例
        @RunWith(SpringJUnit4ClassRunner.class)
        @ContextConfiguration(locations = "classpath*:applicationContext.xml")
        public class EnvTest {
            @Autowired
            private DataSource ds;
        
            @Test
            public void testConnection() throws SQLException {
                System.out.println(ds.getConnection());
            }
        
        }                
        
            
                
                        
            
            

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值