Spring、Mybatis、SpringMVC集成

Spring、Mybatis、SpringMVC集成 

(主要是自动扫描控制器,视图模式,注解的启动)

1步、web.xml

<!-- 配置Springmybatis的配置文件 -->

    <context-param>

        <param-name>contextConfigLocation</param-name>

        <param-value>classpath:spring-dao.xml</param-value>

    </context-param>

    <!-- Spring监听器 也就是加载上面配置的spring-dao.xml -->

    <listener>

        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

    </listener>

    <!-- 配置spring mvc默认编码 -->

    <filter>

        <filter-name>encodingFilter</filter-name>

        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

        <init-param>

            <param-name>encoding</param-name>

            <param-value>UTF-8</param-value>

        </init-param>

    </filter>

    <filter-mapping>

        <filter-name>encodingFilter</filter-name>

        <url-pattern>/*</url-pattern>

    </filter-mapping>

    <!-- ************************ -->

    <!-- 配置spring mvc过滤器配置 -->

    <servlet>

        <servlet-name>springmvc</servlet-name>

        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

        <init-param>

            <param-name>contextConfigLocation</param-name>

            <param-value>classpath:springmvc-servlet.xml</param-value>

        </init-param>

    </servlet>

    <servlet-mapping>

        <servlet-name>springmvc</servlet-name>

        <url-pattern>/</url-pattern>

    </servlet-mapping>

2步、springmvc-servlet.xml (配置spring mvc的,没有其他的增加)

<!--配置扫描路径 spring可以自动去扫描base-pack下面或者子包下面的Java文件,如果扫描到有 -->

    <!-- @Component @Controller@Service等这些注解的类,则把这些类注册为bean -->

    <context:component-scan base-package="com.springmvc"></context:component-scan>

    <!--启用MVC注解功能 增加了下面的<mvc:resources >必须使用,否则不能访问spring控制器(Controller) -->

    <mvc:annotation-driven />

   

    <!--能够访问静态静态,(因为spring过滤器是拦截 / 所有的要求)如果不加,所有的静态资源都会经过spring的处理,这个时候静态资源不能访问了 -->

    <mvc:resources location="/images/" mapping="/images/**" />

    <mvc:resources location="/css/" mapping="/css/**" />

    <mvc:resources location="/style/" mapping="/style/**" />

    <mvc:resources location="/script/" mapping="/script/**" />

    <mvc:resources location="/js/" mapping="/js/**" />

    <mvc:resources location="/fonts/" mapping="/fonts/**" />

    <!-- 文件上传 -->

    <bean id="multipartResolver"

    class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

        <!-- 默认编码 -->

        <property name="defaultEncoding" value="utf-8" />

        <!-- 文件大小最大值(字节) -->

        <property name="maxUploadSize" value="10485760000" />

    </bean>

    <!-- 配置视图页面解析 -->

    <bean

    class="org.springframework.web.servlet.view.InternalResourceViewResolver"

        id="internalResourceViewResolver">

        <!-- 前缀 -->

        <property name="prefix" value="/WEB-INF/jsp/" />

        <!-- 后缀 -->

        <property name="suffix" value=".jsp" />

    </bean>

3步、spring 控制器

@Controller

public class UserController {

    // 根据名字取service层的实例(spring自动注入)

    @Resource(name="UserServiceImp")

    UserService us;

    @RequestMapping("/seluser")

    public String seluser(HttpServletRequest request) {

        User user = us.getUser(33);

        request.setAttribute("user", user);

        return "user";

    }

4步、增加spring对事务的控制 (直接在spring的配置文件后面加入,对应上面的Spring-dao.xml)

Spring容器优先加载由ServletContextListener(对应applicationContext.xml)产生的父容器,而SpringMVC(对应mvc_dispatcher_servlet.xml)产生的是子容器。子容器Controller进行扫描装配时装配的@Service注解的实例是没有经过事务加强处理,即没有事务处理能力的Service,而父容器进行初始化的Service是保证事务的增强处理能力的。如果不在子容器中将Service exclude掉,此时得到的将是原样的无事务处理能力的Service,因为在多上下文的情况下,如果同一个bean被定义两次,后面一个优先。   因为事务是对service层进行处理,所以service层的扫描必须放在application.xml里面,不能在springmvc.xml里面、service层尽量用接口

►1、Annotation注解式事务

spring_dao.xml增加

        <!--************************** 配置注解 开始************************* -->

        <tx:annotation-driven transaction-manager="transactionManager" />

        <!--************************** 配置注解 结束************************* -->

        <!--************************** 配置基于Mybatis的事务切面类 开始************************* -->

        <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->

        <bean id="transactionManager"

                class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

                <property name="dataSource" ref="dataSource" />

        </bean>

业务层增加

//使用@transaction 标注持久化方法,实现事务控制,此语法可以附加到类、接口、方法声明之前,注解的参数提供多种事务控制机制

@Override

    @Transactional(propagation = Propagation.REQUIRED)

    public int insertGoodsAndGoodsType(Goods goods, Goodstype goodsType) {

        goodsMapper.insert(goods);

        // int a = Integer.parseInt("a");

        goodstypeMapper.insert(goodsType);

        return 0;

    }

►2、声明式事务XML

<!--配置基于Mybatis的事务切面类 -->

        <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->

        <bean id="transactionManager"

                class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

                <property name="dataSource" ref="dataSource" />

        </bean>

        <!--手动配置事务的建议 -->

        <tx:advice id="tx_advice" transaction-manager="transactionManager">

                <tx:attributes>

                        <tx:method name="insert*" propagation="REQUIRED" />

                        <tx:method name="delete*" propagation="REQUIRED" />

                        <tx:method name="update*" propagation="REQUIRED" />

                        <tx:method name="query*" read-only="true" />

                        <tx:method name="*" propagation="REQUIRED" />

                </tx:attributes>

        </tx:advice>

        <!--配置切入点 -->

        <aop:config>

                <aop:pointcut expression="execution(* *.service..*(..))"

                        id="pointcut" />

                <aop:advisor advice-ref="tx_advice" pointcut-ref="pointcut" />

        </aop:config>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值