SSM项目中关于配置的一二三

摘要:
在SSM项目中用于配置的一二三javaSSM后端三层架构中,控制层调用服务层,服务层调用dao层。控制层将把bean对象注入SpringMVCIOC容器,服务层和dao层将把bean对象注入SpringIOC容器。1.要导入的依赖项?
SSM项目中关于配置的一二三
javaSSM后端
三层架构中,控制层调用Service层,Service层调用Dao层,控制层会将Bean对象注入到SpringMVCIOC容器中,Service和Dao层将会Bean对象注入到SpringIOC容器中

1. 要引入的依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
 
    <groupId>com.lxs</groupId>
    <artifactId>ssm</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>
 
    <properties>
        <spring.version>5.0.2.RELEASE</spring.version>
        <slf4j.version>1.6.6</slf4j.version>
        <log4j.version>1.2.12</log4j.version>
        <mysql.version>5.1.6</mysql.version>
        <mybatis.version>3.4.5</mybatis.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    </properties>
 
    <!--依赖jar包-->
    <dependencies>
        <!-- spring -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.6.8</version>
        </dependency>
 
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${spring.version}</version>
        </dependency>
 
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
 
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>
 
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
 
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
        </dependency>
 
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring.version}</version>
        </dependency>
 
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>
 
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>compile</scope>
        </dependency>
 
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>
 
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
 
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.0</version>
            <scope>provided</scope>
        </dependency>
 
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
 
        <!-- log start -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>
 
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
 
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <!-- log end -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>${mybatis.version}</version>
        </dependency>
 
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.0</version>
        </dependency>
 
        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.1.2</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>
 
    </dependencies>
 
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <port>18081</port>
                    <path>/</path>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

2. Web.xml

基础的web.xml,是一切的开始,容器本身只会进入web.xml进行配置,像上面后三个自己写的文件,他们的命名甚至无所谓,因为他们不是标准的配置文件。所以,其实是web.xml中调用了spring-mvc.xml以及spring-mybatis.xml,而spring-mybatis.xml中又调用了mybatis-config.xml,所以他们三个才有了意义。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <!--全局范围内环境参数初始化-->
    <context-param>
        <!--参数名称-->
        <param-name>contextConfigLocation</param-name>
        <!--参数取值-->
        <param-value>classpath:spring-mybatis.xml</param-value>
    </context-param>

    <!--以下配置的加载顺序:先 ServletContext >> context-param >> listener >> filter >> servlet >>  spring-->

    <!--过滤器配置-->
    <!--例:编码过滤器-->
    <filter>      <!-- 用来声明filter的相关设定,过滤器可以截取和修改一个Servlet或JSP页面的请求或从一个Servlet或JSP页面发出的响应-->
        <filter-name>characterEncodingFilter</filter-name>     <!--指定filter的名字-->
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <!--定义filter的类的名称-->
        <async-supported>true</async-supported>     <!--设置是否启用异步支持-->
        <init-param><!--用来定义参数,若在Servlet可以使用下列方法来获得:String param_name=getServletContext().getInitParamter("param-name里面的值");-->
            <param-name>encoding</param-name>   <!--参数名称-->
            <param-value>UTF-8</param-value> <!--参数值-->
        </init-param>
    </filter>
    <filter-mapping><!--用来定义filter所对应的URL-->
        <filter-name>characterEncodingFilter</filter-name>     <!--指定对应filter的名字-->
        <url-pattern>/*</url-pattern>       <!--指定filter所对应的URL-->
    </filter-mapping>

    <!--监听器配置-->
    <!--例:spring监听器-->
    <listener>        <!--用来设定Listener接口-->
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class><!--定义Listener的类名称-->
    </listener>
    <!-- 防止Spring内存溢出监听器  -->
    <listener>
        <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
    </listener>

    <!---servlet配置-->
    <!--用来声明一个servlet的数据 -->
    <servlet>
        <!--指定servlet的名称-->
        <servlet-name>dispatcherServlet</servlet-name>
        <!--指定servlet的类名称,这里配置了前端控制器-->
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--用来定义参数,可有多个init-param。在servlet类中通过getInitParamenter(String name)方法访问初始化参数    -->
        <init-param>
            <param-name>contextConfigLocation</param-name>  <!--参数名称-->
            <param-value>classpath:spring-mvc.xml</param-value> <!--参数值-->
        </init-param>
        <!--当值为正数或零时:Servlet容器先加载数值小的servlet,再依次加载其他数值大的servlet.-->
        <load-on-startup>1</load-on-startup>
        <!--设置是否启用异步支持-->
        <async-supported>true</async-supported>
    </servlet>
    <!--用来定义servlet所对应的URL-->
    <servlet-mapping>
        <!--指定servlet的名称-->
        <servlet-name>dispatcherServlet</servlet-name>
        <!--指定servlet所对应的URL-->
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <!--会话超时配置(单位为分钟)-->
    <session-config>
        <!--如果某个会话在一定时间未被访问,则服务器可以扔掉以节约内存-->
        <session-timeout>120</session-timeout>
    </session-config>

    <!---MIME类型配置 -->
    <!--设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开-->
    <mime-mapping>
        <!--扩展名名称-->
        <extension>*.ppt</extension>
        <!--MIME格式-->
        <mime-type>application/mspowerpoint</mime-type>
    </mime-mapping>

    <!---欢迎页面配置 -->
    <!--定义首页列单.-->
    <welcome-file-list>
        <!--用来指定首页文件名称.我们可以用<welcome-file>指定几个首页,而服务器会依照设定的顺序来找首页.-->
        <welcome-file>/WEB-INF/jsp/index.jsp</welcome-file>
    </welcome-file-list>

    <!--配置错误页面-->
    <error-page>  <!--将错误代码(Error Code)或异常(Exception)的种类对应到web应用资源路径.-->
        <!--HTTP Error code,例如: 404、403-->
        <error-code>404</error-code>
        <!--用来设置发生错误或异常时要显示的页面-->
        <location>/error.html</location>
    </error-page>

    <error-page>
        <!--设置可能会发生的java异常类型,例如:java.lang.Exception-->
        <exception-type>java.lang.Exception</exception-type>
        <!--用来设置发生错误或异常时要显示的页面-->
        <location>/ExceptionError.html</location>
    </error-page>

</web-app>

3. SpingMVC核心配置文件

在resources下创建spring-mvc.xml核心配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">
 
    <!-- 扫描controller的注解,别的不扫描 -->
    <context:component-scan base-package="com.lxs" use-default-filters="false">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
 
    <!-- 配置视图解析器 -->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- JSP文件所在的目录 -->
        <property name="prefix" value="/WEB-INF/pages/" />
        <!-- 文件的后缀名 -->
        <property name="suffix" value=".jsp" />
    </bean>
 
    <!-- 设置静态资源不过滤,如果目录不存在,会报红,这里不是程序问题,是idea检测到目录不存在-->
    <mvc:resources location="/css/" mapping="/css/**" />
    <mvc:resources location="/images/" mapping="/images/**" />
    <mvc:resources location="/js/" mapping="/js/**" />
 
    <!-- 开启对SpringMVC注解的支持 -->
    <mvc:annotation-driven />
</beans>

4. Spring和Mybatis核心配置文件

在resources下创建spring-mybatis.xml核心配置文件
<?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:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx.xsd">
 
    <!-- 开启注解扫描,要扫描的是service和dao层的注解,要忽略web层注解,因为web层让SpringMVC框架去管理 -->
    <context:component-scan base-package="com.lxs">
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
	
  <!-- 加载数据资源属性文件 -->
   <bean id="propertyConfigurer"
          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="classpath:jdbc.properties"/>
    </bean>
	
   <!-- 配置的连接池对象 -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql:///lxs"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
    </bean>

    <!-- 配置SqlSession的工厂 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
		<property name="configLocation" value="classpath:mybatis-config.xml"/>
    </bean>
 
    <!-- 配置扫描dao的包 -->
    <bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.lxs.dao"/>
    </bean>
 
    <!-- 配置事务管理器 -->
    <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
 
    <!-- 配置事务通知 -->
    <tx:advice id="txAdvice" transaction-manager="txManager">
        <tx:attributes>
            <tx:method name="list*" read-only="true"/>
            <tx:method name="*" isolation="DEFAULT"/>
        </tx:attributes>
    </tx:advice>
 
    <!-- 配置AOP增强事务 -->
    <aop:config>
        <aop:advisor advice-ref="txAdvice" pointcut="execution(public * com.lxs.service.impl.*.*(..))"/>
    </aop:config>
</beans>

5. Mybatis的核心配置

mybatis-config.xml
<?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>
    <properties resource="jdbc.properties"/>

    <settings>
        <!-- ☆这个配置使全局的映射器启用或禁用缓存 -->
        <setting name="cacheEnabled" value="true"/>
        <!-- ☆全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载 -->
        <setting name="lazyLoadingEnabled" value="true"/>
        <!-- ☆当启用时,有延迟加载属性的对象在被调用时将会完全加载任意属性。否则,每种属性将会按需要加载 -->
        <setting name="aggressiveLazyLoading" value="true"/>
        <!-- 允许或不允许多种结果集从一个单独的语句中返回(需要适合的驱动) -->
        <setting name="multipleResultSetsEnabled" value="true"/>
        <!-- 使用列标签代替列名。不同的驱动在这方便表现不同。参考驱动文档或充分测试两种方法来决定所使用的驱动 -->
        <setting name="useColumnLabel" value="true"/>
        <!-- 允许JDBC支持生成的键。需要适合的驱动。如果设置为true则这个设置强制生成的键被使用,尽管一些驱动拒绝兼容但仍然有效(比如Derby) -->
        <setting name="useGeneratedKeys" value="true"/>
        <!-- ☆指定MyBatis如何自动映射列到字段/属性。PARTIAL只会自动映射简单,没有嵌套的结果。FULL会自动映射任意复杂的结果(嵌套的或其他情况) -->
        <setting name="autoMappingBehavior" value="PARTIAL"/>
        <!-- ☆配置默认的执行器。SIMPLE执行器没有什么特别之处。REUSE执行器重用预处理语句。BATCH执行器重用语句和批量更新 -->
        <setting name="defaultExecutorType" value="SIMPLE"/>
    </settings>

    <!-- 别名定义 -->
    <typeAliases>
        <!-- 将类名第一个字母变为小写作为别名 -->
        <package name="com.lxs.entity"/>
        <package name="com.lxs.dto"/>
    </typeAliases>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/lifecat"/>
                <property name="username" value="root"/>
                <property name="password" value="wangshihao"/>
                <!-- 在任意时间存在的活动(也就是正在使用)连接的数量 -->
                <property name="poolMaximumActiveConnections" value="10"/>
                <!-- 任意时间存在的空闲连接数 -->
                <property name="poolMaximumIdleConnections" value="5"/>
                <!-- 在被强制返回之前,池中连接被检查的时间 -->
                <property name="poolMaximumCheckoutTime" value="20000"/>
                <!-- 这是给连接池一个打印日志状态机会的低层次设置,还有重新尝试获得连接,这些情况下往往需要很长时间(为了避免连接池没有配置时静默失败) -->
                <property name="poolTimeToWait" value="20000"/>
                <!-- 发送到数据的侦测查询,用来验证连接是否正常工作,并且准备接受请求。 -->
                <property name="poolPingQuery" value="NO PING QUERY SET"/>
                <!-- 这是开启或禁用侦测查询。如果开启,你必须用一个合法的SQL语句(最好是很快速的)设置poolPingQuery属性 -->
                <property name="poolPingEnabled" value="false"/>
                <!-- 这是用来配置poolPingQuery多次时间被用一次。这可以被设置匹配标准的数据库连接超时时间,来避免不必要的侦测 -->
                <property name="poolPingConnectionsNotUsedFor" value="0"/>
            </dataSource>
        </environment>
    </environments>
	
</configuration>

Mybatis配置属性
Mybatis配置属性

6. 如何调用?

让我们从web.xml开始

第一个元素,调用了spring-mybatis.xml

<!--全局范围内环境参数初始化-->
<context-param>
    <!--参数名称-->
    <param-name>contextConfigLocation</param-name>
    <!--参数取值-->
    <param-value>classpath:spring-mybatis.xml</param-value>
</context-param>

第二个元素,调用了spring-mvc.xml

  <!---servlet配置-->
    <!--用来声明一个servlet的数据 -->
    <servlet>
        <!--指定servlet的名称-->
        <servlet-name>dispatcherServlet</servlet-name>
        <!--指定servlet的类名称,这里配置了前端控制器-->
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--用来定义参数,可有多个init-param。在servlet类中通过getInitParamenter(String name)方法访问初始化参数    -->
        <init-param>
            <param-name>contextConfigLocation</param-name>  <!--参数名称-->
            <param-value>classpath:spring-mvc.xml</param-value> <!--参数值-->
        </init-param>
        <!--当值为正数或零时:Servlet容器先加载数值小的servlet,再依次加载其他数值大的servlet.-->
        <load-on-startup>1</load-on-startup>
        <!--设置是否启用异步支持-->
        <async-supported>true</async-supported>
    </servlet>

在spring-mybatis.xml中,又调用了mybatis-config.xml

 <!-- 配置SqlSession的工厂 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
		<property name="configLocation" value="classpath:mybatis-config.xml"/>
    </bean>

在mybatis-config.xml以及spring-mybatis中,可以调用外部properties文件如jdbc.properties,

7. 运行流程

SpringMVC运行流程图
SpringMVC运行流程图

免责声明:文章转载自《SSM项目中关于配置的一二三》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇将图片转换为Base64编码的字符串安卓手机无法使用adb导出文件下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

PLSQL常用配置之窗口/版面保存、SQL格式化/美化、SQL注释去掉注释等快捷键配置、登陆历史修改配置

//Blog.csdn.net/eyeidolon/article/details/8251791 PLSQL常用配置的快捷键配置,如窗口/布局保存、SQL格式化/美化和SQL注释删除,以及登录历史修改1的配置。PL/SQLDeveloper记住登录密码当使用PL/SQLDeveloper时,默认情况下PL/SQLDeveloper会执行此窗口中的所有SQL...

JAVA 实现CLOB转String

CLOB定义了用于在数据库中保存文件的类型。SQLCLOB是一种内置类型,它将一个大型字符对象作为列值存储在数据库表的一行中。默认情况下,驱动程序使用SQLlocator实现Clob对象,这意味着Clob对象包含指向SQLCLOB数据的逻辑指针,而不是数据本身。Clob对象在其创建的事务期间有效。在一些数据库系统中,文本也用作CLOB的别名。例如,SQL S...

当微信小程序遇到AR(二)

当微信小程序遇到AR,会擦出怎么样的火花?期待与激动......通过该教程,可以从基础开始打造一个微信小程序的AR框架,所有代码开源,提供大家学习。注册地址=˃注册成功之后,需要下载微信小程序开发工具。下载地址=˃目前笔者的开发环境是:Windows10下载的微信小程序版本为:RCv1.0.2.1909111 打开,微信开发者工具之后,会看到如下的页面。...

说说接口封装

今天,我为同事封装了一个接口。当谈到接口封装时,有很多关于它的讨论。在很多情况下,说一个服务好,一个服务坏,实际上是在吐槽服务团队之外暴露的界面质量。无论哪种语言,抽象的封装接口都由一个函数名、几个参数和几个返回值组成。总之,参数不应该被封装……我们在内部尝试接口_Catch不会抛出异常,所有信息都将以错误代码的形式返回。就php而言,建议进行异常处理。...

SpringBoot工程通过Maven引入自定义Jar包

A工程为:common工程打成jar包:common-0.0.1-SNAPSHOT.jar注意:A工程打包时要使用maven的插件进行打包,不然会打成SpringBoot的Jar包,无法使用。--字符集编码--˃打包时跳过测试配置1.8˂!...

国产操作系统——银河麒麟V10 SP1使用小结

几天前,我看了国内操作系统Galaxy Kirin有了新更新的新闻,于是我开始了一个新系统=============================================个人评价:这个系统是一个国产操作系统。尽管使用了大量的Ubuntu和Windows设计,使用了Linux内核,但这是国产操作系统从无到有的开始,其意义和价值远远大于其使用价值。总之...