ssm框架整合:

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37256896/article/details/82632550

ssm:spring +springmvc+mybatis:

springmvc整合mybatis:
                    出现这个错误:BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the Application
                    原因:未能扫描到@controller ,配置controller扫描包 的路径,或者是出现相同的controller的控制器(控制器类的名字相同了)
                    1.导包。
                    2.配置配置文件
                        2.1:web.xml
                        2.2:applicationContext.xml:书写spring的配置文件
                        2.3springmvc-servlert.xml:springmvc的配置文件
                        2.4sqlMapConfig.xml:mybatis的核心的配置文件
                        2.5db.properties:数据库的配置
                        2.6mapper映射xml

其实在springmvc的模块也是spring的配置文件的一部分,这里分开书写是为了进行方便管理可以说是比较方便管理
                        2.1web.xml需要做以下配置:加载spring的配置文件,spring上下的监听器,配置前端控制器并读取springmvc配置文件,配置映射及拦截规则;
                                                    

 <!-- 加载spring的配置文件 -->
                                                        <context-param>
                                                                <param-name>contextConfigLocationn</param-name>
                                                                <param-value>classpath*:/applicationContext.xml</param-value>
                                                        </context-param>
                                                         <!-- spring 的上下文的监听器 -->
                                                        <listener>
                                                            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
                                                        </listener>
                                                      <!-- 配置前端控制器 -->
                                                      <servlet>
                                                            <servlet-name>springmvc-mybatis</servlet-name>
                                                            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
                                                            <!-- 配置读取springmvc配置文件 -->
                                                            <init-param>
                                                                <param-name>contextConfigLocation</param-name>
                                                                <param-value>classpath:springmvc-servlet.xml</param-value>
                                                            </init-param>
                                                            <load-on-startup>1</load-on-startup>  
                                                        <async-supported>true</async-supported>  
                                                     </servlet>
                                                     <!-- 配置映射的及请求设置拦截规则 -->
                                                      <servlet-mapping>
                                                            <servlet-name>springmvc-mybatis</servlet-name>
                                                            <!-- 设置请求拦截规则 
                                                            1./*:不能进行对其访问:No mapping found for HTTP request with URI [/spring-mvc/WEB-INF/jsp/hello.jsp] in DispatcherServlet with name 'spring-mvc'
                                                                拦截所有,jsp,js,css都会拦截,不建议
                                                            2./:拦截所有不包括jsp,肯定可以用
                                                            3.*.action,*.do,拦截do,action的结尾请求,一般用于前台,面向消费者的
                                                            -->
                                                            <url-pattern>/</url-pattern>
                                                      </servlet-mapping>
                                                    </web-app>
                        


                        2.2:applicationContext.xml    :
                                    读取指定的数据源,配置连接池,注册mybatis工厂读取mybatis核心配置文件,mapper代理扫描包,注解事务开启aop事务,注入各个bean;
                                                  

 <!-- 指定spring读取db.properties配置 -->
                                                    <context:property-placeholder location="classpath:db.properties"  />

                                                    <!-- 1.将连接池 -->
                                                    <bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" >
                                                        <property name="jdbcUrl" value="${jdbc.jdbcUrl}" ></property>
                                                        <property name="driverClass" value="${jdbc.driverClass}" ></property>
                                                        <property name="user" value="${jdbc.user}" ></property>
                                                        <property name="password" value="${jdbc.password}" ></property>
                                                    </bean>
                                                    <!-- mybatis工厂 -->
                                                    <bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
                                                        <property name="dataSource" ref="dataSource"></property>
                                                        <!-- 核心的配置的文件 -->
                                                        <property name="configLocation" value="classpath:sqlMapConfig.xml"></property>
                                                    </bean>
                                                    <!--使用mapper动态代理  扫描的方式:-->
                                                        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 
                                                            <!-- 指定基本包  在这里dao层的接口相当于动态代理mapper-->
                                                            <property name="basePackage" value="com.leo.springmvc.dao"></property>
                                                        </bean>
                                                    <!--注解事务,封装了所有事务操作. 依赖于连接池 -->
                                                    <bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" >
                                                        <property name="dataSource" ref="dataSource" ></property>
                                                    </bean>
                                                    <!-- 开启使用注解管理aop事务 -->
                                                    <tx:annotation-driven transaction-manager="transactionManager"/>
                                                    <!-- 注入bean -->
                                                    <bean id="itemService" class="com.leo.springmvc.service.impl.ItemServiceImpl">
                                                        <property name="itemdao" ref="itemdao"></property>
                                                    </bean>

                                                    <bean id="itemdao" class="com.leo.springmvc.dao.impl.ItemDaoImpl">
                                                        <property name="sqlSessionFactory" ref="sqlSessionFactoryBean"></property>
                                                    </bean>
                                                    </beans>


                        2.3springmvc-servlert.xml
                                    主要用于扫描控制器,注解驱动,配置视图解析器。
                                                

<!-- 配置controller扫描包 ,多个包调用用","隔开
                                                    扫描@Controller,@Service
                                                    在不配置处理器映射器,和处理器适配器,会使用默认的,可以不配置
                                                -->
                                                <context:component-scan base-package="com.leo.springmvc"></context:component-scan>
                                                <!-- 废除了:配置处理器映射器 
                                                <bean class="org.springframework.web.servlet.mvc.annotation.RequestMappingHandlerMapping"></bean> 
                                                 配置处理器配置器 
                                                <bean class="org.springframework.web.servlet.mvc.annotation.RequestMappingHandlerAdapter"></bean> -->
                                                <!-- 注解驱动 ,配置这个就相当于配置了上面的两个-->
                                                <mvc:annotation-driven></mvc:annotation-driven>
                                                <!--配置视图解析器
                                                <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
                                                     逻辑视图的前缀,后缀 ,逻辑视图名在controller中返回ModelView指定
                                                    <property name="prefix" value="/WEB-INF/jsp/"></property>
                                                    <property name="suffix" value=".jsp"></property>
                                                    最终的jsp物理地址:前缀+逻辑视图+后缀 
                                                </bean>  -->
                                                </beans>


                        2.4sqlMapConfig.xml:
                                mybatis的配置文件,其实不用配置只需要相应的头文件就可以
                                          

 <?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>
                                                <!-- 设置别名 -->
                                                    <typeAliases>
                                                        <!--指定的包内的所有的类都设置别名,别名的名称就是类名大小写不敏感 -->
                                                        <package name="com.leo.springmvc"/>
                                                    </typeAliases>
                                                    <!-- 已经扫秒的包了,所以不用配置mapper的路径了 -->
                                                </configuration>


                        2.5db.properties:配置数据库的属性
                        2.6mapper映射xml:书写sql的配置文件,
                    3. 在controller中调用其他各层,由于在这里用了接口的方式所以自动装配注解@Autowired就不可以使用,在controller中需要使用service层时就
                    指定这个属性去读取相应bean的id;用下面的方式实现属性的注入。
                                                    @Resource(name="itemService")
                                                    private ItemService itemService;
                        在这里说下 @Resource(name="itemService")和 @Autowired的区别:
                        @Resource默认按照名称方式进行bean匹配, j2EE的。可以指定读取按哪个名称的装配方法。
                        @Autowired默认按照类型方式进行bean匹配,spring的。默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使用按照名称(byName)来装配,可以结合@Qualifier注解一起使用。
                        @Resource可以减少代码和Spring之间的耦合
                        @Resource默认按照ByName自动注入,由J2EE提供,需要导入包javax.annotation.Resource。
                        @Resource有两个重要的属性:name和type,而Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。
                        所以,如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不制定name也不制定type属性,这时将通过反射机制使用byName自动注入策略。
                         @Resource装配顺序:

                            ①如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常。

                            ②如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常。

                            ③如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或是找到多个,都会抛出异常。

                            ④如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配。

                            @Resource的作用相当于@Autowired,只不过@Autowired按照byType自动注入。
                    4.运行项目并访问就可以拿到你想要的结果及页面。

猜你喜欢

转载自blog.csdn.net/qq_37256896/article/details/82632550