IDEA 使用 Maven 基本的 SSM 框架搭建,所需jar包,配置文件,以及一些坑的总结

一,框架版本与结构

框架和 jar 包版本和工程文件的结构,如下表下图,供大家参考

名称版本
Spring5.0.2.RELEASE
mybatis-spring1.3.0
mybatis3.4.5
jackson2.9.5
tomcat7-maven-plugin7
JDK1.8
oracle11G

文件结构如图,分别是逐渐展开的层级关系,事无巨细,我尽量吧
在这里插入图片描述

二,pom文件

1),jar 包
2),tomcat 插件
3),工程访问端口

配置该 pom 的时候,发现一个坑,就是配置完之后,运行 tomcat 插件挂载不上项目,其实很简单,
tomcat 没有把工程当成一个 war 来运行。具体如何配置 tomcat 插件,可以参照下面方法。
还有一点就是 spring5 要用 Jackson 2.9.x 版本,返回 json 格式

IDEA 使用 tomcat 插件不加载 Maven 项目,IDEA 添加 tomcat 插件详解

<?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>grow</groupId>
    <artifactId>ssm</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <spring.version>5.0.2.RELEASE</spring.version>
        <logback.version>1.2.2</logback.version>
        <mybatis.version>3.4.5</mybatis.version>
    </properties>


    <dependencies>
        <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>test</scope>
        </dependency>
        <!--数据源所需-->
        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.2.0.1.0</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>
        <!-- SSM 框架整合 logback start -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>${logback.version}</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>${logback.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.25</version>
        </dependency>
        <dependency>
            <groupId>org.logback-extensions</groupId>
            <artifactId>logback-ext-spring</artifactId>
            <version>0.1.4</version>
        </dependency>
        <!-- logback 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>

        <!-- spring5要用Jackson2.9.x ,页面可以返回 json 格式-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.5</version>
            <!--排除重复依赖,没有重复引入的可以忽略-->
            <exclusions>
                <exclusion>
                    <artifactId>jackson-annotations</artifactId>
                    <groupId>com.fasterxml.jackson.core</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.9.5</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.9.5</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <path>/</path>
                    <port>8080</port>
                    <!--<ignorePackaging>true</ignorePackaging>-->
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

三,web.xml

1),设置欢迎页面
2),前端控制器,中文乱码解决
3),加载 spring 配置文件
4),加载 springMvc 配置文件
5),加载 logback 配置文件(可选)

配置 web.xml 发现一个坑,必须放在 WEB-INF 文件夹下,否则不能成功运行。

【SSM整合logback】不生成日志文件,按日期生成文件夹,控制日志大小,详细配置

<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">
    <display-name>electric-factory</display-name>

    <!--设置欢迎页-->
    <welcome-file-list>
        <!--<welcome-file>login.jsp</welcome-file>-->
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

    <!-- 配置监听器,监听request域对象的创建和销毁的 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <listener>
        <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
    </listener>

    <!--设置spring配置文件的路径-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring/applicationContext.xml</param-value>
    </context-param>

    <!--配置前端控制器-->
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring/springmvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <!--解决中文乱码的过滤器-->
    <filter>
        <filter-name>characterEncodingFilter</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>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <context-param>
        <param-name>logbackConfigLocation</param-name>
        <param-value>classpath:config/logback.xml</param-value>
    </context-param>
    <listener>
        <listener-class>ch.qos.logback.ext.spring.web.LogbackConfigListener</listener-class>
    </listener>

</web-app>

四,springMVC 的配置 springmvc.xml

1),视图解析器
2),注解扫描 controller
3),过滤静态资源
4),注解支持

视图解析器配置好之后,在 controller 层可以直接 return jsp文件名,
比如 return “second”; 就表示会返回 second.jsp 页面

<?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.ssm.controller"/>

    <!--配置的视图解析器对象-->
    <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>-->
        <property name="prefix" value="/jsp/"/><!--要读取的文件夹路径-->
        <property name="suffix" value=".jsp"/>
    </bean>

    <!--过滤静态资源-->
    <mvc:resources location="/css" mapping="/css/**"/>
    <mvc:resources location="/images/" mapping="/images/**"/>
    <mvc:resources location="/js/" mapping="/js/**"/>

    <!--开启SpringMVC注解的支持-->
    <mvc:annotation-driven/>
</beans>

五,spring 的配置 applicationContext.xml

1),注解扫描 service 和 dao
2),加载 jdbc 配置文件
3),配置数据源连接池
4),transactionManager 事务管理器
5),sqlSessionFactory,mybatis 配置加载位置
6),sqlSessionFactory,mybatis 的 mapper xml 位置
7),mybatis 的 dao 接口位置
8),注解事物支持

此处有个坑,就是用注解事物,需要开启注解支持 <tx:annotation-driven/>

<?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,controller不需要Spring框架去处理-->
    <context:component-scan base-package="com.ssm.*.impl" >
        <!--配置哪些注解不扫描-->
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
    </context:component-scan>

    <context:property-placeholder location="classpath:config/jdbc.properties"/>


    <!--配置数据库连接池-->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
          destroy-method="close">
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
        <property name="defaultAutoCommit" value="false"/>
        <property name="initialSize" value="50"/>
        <property name="maxActive" value="100"/>
        <property name="minIdle" value="25"/>
        <property name="maxIdle" value="30"/>
        <property name="maxWait" value="3000"/>
        <property name="removeAbandoned" value="true"/>
        <property name="removeAbandonedTimeout" value="180"/>
        <property name="testWhileIdle" value="true"/>
        <property name="testOnBorrow" value="false"/>
        <property name="testOnReturn" value="false"/>
        <property name="validationQuery" value="select count(1) from dual"/>
        <!--<property name="validationQuery" value="select 1 from sysibm.sysdummy1"/>-->
        <property name="timeBetweenEvictionRunsMillis" value="30000"/>
        <property name="numTestsPerEvictionRun" value="100"/>
    </bean>

    <!-- 配置transactionManager事务管理器 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    <!-- 配置事物通知属性,注释掉,根据需要添加 -->
    <!--<tx:advice id="txAdvice" transaction-manager="transactionManager">-->
        <!--&lt;!&ndash; 定义事物传播特性 &ndash;&gt;-->
        <!--<tx:attributes>-->
            <!--<tx:method name="insert" propagation="REQUIRED"/>-->
            <!--<tx:method name="update*" propagation="REQUIRED" />-->
            <!--<tx:method name="edit*" propagation="REQUIRED" />-->
            <!--<tx:method name="save*" propagation="REQUIRED" />-->
            <!--<tx:method name="add*" propagation="REQUIRED" />-->
            <!--<tx:method name="new*" propagation="REQUIRED" />-->
            <!--<tx:method name="set*" propagation="REQUIRED" />-->
            <!--<tx:method name="remove*" propagation="REQUIRED" />-->
            <!--<tx:method name="delete*" propagation="REQUIRED" />-->
            <!--<tx:method name="change*" propagation="REQUIRED" />-->
            <!--<tx:method name="check*" propagation="REQUIRED" />-->
            <!--<tx:method name="get*" propagation="REQUIRED" read-only="true" />-->
            <!--<tx:method name="find*" propagation="REQUIRED" read-only="true" />-->
            <!--<tx:method name="load*" propagation="REQUIRED" read-only="true" />-->
            <!--<tx:method name="*" propagation="REQUIRED" read-only="true" />-->
        <!--</tx:attributes>-->
    <!--</tx:advice>-->

    <!-- 配置事物切面,已注释掉,根据需要添加 -->
    <!--<aop:config>-->
        <!--<aop:pointcut expression="execution(* com.java.service.*.*(..))" id="serviceOperation"/>-->
        <!--<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceOperation"/>-->
    <!--</aop:config>-->

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

    <!--配置dao接口接口所在包-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.ssm.dao"></property>
    </bean>

    <!--注解事物需要开启注解支持-->
    <tx:annotation-driven/>
</beans>

六,mybatis 的配置 mybatis-config.xml

1),扫描实体类的位置
2),使用别名

因 spring 的配置已经加入 mybatis 的 SqlSessionFactory 和 mapper 的 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>

    <!-- 使用别名 -->
    <typeAliases>
        <package name="com.ssm.pojo" />
    </typeAliases>

</configuration>

七,mapper xml

1),dao interface 的位置

此处有几个坑,
1> mybatis 1.2.0 及以上版本必须自己注入 sqlSessionFactory
2> namespace 是 dao 接口的全路径,不是 实体类 的
3> dao 接口方法名 需要与 mapper xml 中的 id 相同

<?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 是 dao interface 的全路径-->
<mapper namespace="com.ssm.dao.UserDao">

    <!--配置别名就可以用实体类名的小写作为 type ,不用写全路径了,没有配置别名如下-->
    <!--<resultMap id="userList" type="com.ssm.pojo.User"> -->
    <resultMap id="userList" type="user">
        <id property="userId" column="USER_ID" />
        <result property="userCreateDate" column="USER_CREATE_DATE"/>
        <result property="userName" column="USER_NAME"/>
        <result property="userPassword" column="USER_PASSWORD"/>
        <result property="mail" column="MAIL"/>
    </resultMap>

    <!--id 的 值需要与 dao interface 中的方法名对应-->
    <select id="findUserById" parameterType="String" resultType="user">
        select * from ssm_user where user_id = #{userId}
    </select>

    <select id="findAllUser" resultMap="userList">
        select * from ssm_user
    </select>

    <delete id="deleteById" parameterType="String">
        delete from ssm_user where user_id = #{userId}
    </delete>

    <insert id="addUser" parameterType="user">
        INSERT INTO ssm_user (USER_ID,USER_CREATE_DATE,USER_NAME,USER_PASSWORD,MAIL) VALUES (
        #{userId},#{userCreateDate},#{userName},#{userPassword},#{mail})
    </insert>
</mapper>

八,下载地址

github地址:
https://github.com/ilyuc/ssm.git

CSDN资源:
原工程文件已经上传 CSDN 资源,点此链接下载
(完)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值