快速搭建整合一个SSM项目框架(新手专用)?

~SSM整合框架的搭建(重点)

前言

SSM即:Spring,SpringMVC,Mybatis

1.Spring介绍

  • 2002年,首先推出了Spring的雏形, Spring框架以interface21为基础,经过重新设计,并不断丰富其内涵,于2004.3.24发布了1.0正式版
  • Spring Framework创始人,著名作者Rod Johnson
  • Spring理念:是现有的技术更加容易使用,本身是一个大杂烩,整合了现有的技术框架

2.SpringMVC介绍

  • Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。
  • Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。
  • Spring MVC 框架并不知道使用的视图,所以不会强迫您只使用 JSP 技术。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。

3.Mybatis介绍

  • MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。
  • MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
  • MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

做一个SSM项目,步骤如下

1.分析需求

首先知道要做一个什么样的项目,把大概要做的清楚

2.设计数据库

根据需求设计项目中会涉及到的表以及所用到的字段

3.创建一个Maven项目

可以IDEA工具直接创建Maven并选择webapp模板或者创建一个空的Maven项目后右击Add加上webapp

  • 导入依赖(依据自己的情况导入依赖,仅供参考!)
		<!--测试junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <!--MySQL数据库驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.19</version>
        </dependency>
        <!--c3p0连接池-->
        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5.5</version>
        </dependency>


        <!--servlet.jsp-->
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.3</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.1</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.web</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>


        <!--mybatis-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.0</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.1</version>
        </dependency>
        <!--逆向工程-->
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.4.0</version>
        </dependency>


        <!--Spring-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>5.3.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.3.0</version>
        </dependency>

		<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>5.3.0</version>
        </dependency>
  		<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>5.3.0</version>
        </dependency>    
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>5.3.0</version>
        </dependency> 
         <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>5.3.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.3.0</version>
        </dependency>
        
         <!--aop-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>5.3.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>5.3.0</version>
        </dependency>
        
        <!--orm-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>5.3.0</version>
        </dependency>
        
		<!--事务-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>5.3.0</version>
        </dependency>

		 <!--thymeleaf-->
        <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf</artifactId>
            <version>3.0.11.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf-spring5</artifactId>
            <version>3.0.11.RELEASE</version>
        </dependency>

		 <!--jackson-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.11.3</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.11.3</version>
        </dependency>
        <dependency>

            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.11.3</version>
        </dependency>

		<!--fileupload 上传-->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.4</version>
        </dependency>

        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.2</version>
        </dependency>
        
         <!-- ehcache核心jar包 -->
        <dependency>
            <groupId>net.sf.ehcache</groupId>
            <artifactId>ehcache-core</artifactId>
            <version>2.6.11</version>
        </dependency>
        <!-- MyBatis与ehcache整合jar包 -->
        <dependency>
            <groupId>org.mybatis.caches</groupId>
            <artifactId>mybatis-ehcache</artifactId>
            <version>1.2.1</version>
        </dependency>
        
        <!--小辣椒-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.2</version>
        </dependency>


         <!--静态导出问题-->
    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>
  • 编写会用到的包(仅供参考!)
    -
4.编写db.properties,连接数据库
user=root
password=root
#如果使用的是Mysql8.0+,增加一个时区的配置
url=jdbc:mysql://localhost:3306/student?useSSl=true&useUnicode=true&characterEncoding=utf8
driver=com.mysql.jdbc.Driver
5.编写applicationContext.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>

    <!--配置mybatis自带日志-->
    <settings>
        <!--用STDOUT_LOGGING显示sql语句-->
        <setting name="logImpl" value="STDOUT_LOGGING"/>

        <setting name="lazyLoadingEnabled" value="true"/>
        <!-- 每个属性按需要加载 -->
        <setting name="aggressiveLazyLoading" value="false"/>

        <!--开启二级缓存-->
        <setting name="cacheEnabled" value="true"/>
    </settings>

    <typeAliases>
        <!--这里给实体类去别名,方便在mapper配置文件中使用-->
        <package name="com.qianfeng.entity.User"/>
    </typeAliases>

</configuration>
6.编写dao层接口代码
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface UserDao {
    
    

    List<User> getAll();

    User getOne(Integer id);

    int delete(Integer id);

    int update(User user);

    int add(User user);

    int checkUserName(String username);

}

7.编写Mapper.xml(实现接口,CRUD去操作数据库)

~仅供参考!

<?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">


<!--名字命名空间--><!--如果使用的是mapper接口的形式, 则namespace 写的就是接口的全类名-->
<mapper namespace="com.qianfeng.dao.UserDao">

    <select id="getAll" resultType="User">

        select * from user

    </select>

    <select id="getOne" resultType="User" databaseId="Integer">

        select * from user where id=#{id}

    </select>

    <delete id="delete" parameterType="integer">

        delete from user where id=#{id}

    </delete>

    <insert id="add" parameterType="User">

        insert into user
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="name!=null and name!=&quot;&quot;">
                name,
            </if>
            <if test="username!=null">
                username,
            </if>
            <if test="password!=null">
                password,
            </if>
            <if test="age &gt;=0 and age&lt;=150">
                age,
            </if>
            <if test="gender!=null">
                gender,
            </if>
            <if test="birth!=null">
                birth
            </if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="name!=null and name != &quot;&quot;">
                #{name,jdbcType=VARCHAR},
            </if>
            <if test="username!=null">
                #{username,jdbcType=VARCHAR},
            </if>
            <if test="password!=null">
                #{password,jdbcType=VARCHAR},
            </if>
            <if test="age &gt;=0 and age &lt;=150">
                #{age,jdbcType=INTEGER},
            </if>
            <if test="gender!=null">
                #{gender,jdbcType=VARCHAR},
            </if>
            <if test="birth!=null">
                #{birth,jdbcType=DATE}
            </if>
        </trim>


    </insert>

    <update id="update" parameterType="User">

        update user
        <set>
            <if test="name!=null and name!=&quot;&quot;">
                name = #{name,jdbcType=VARCHAR},
            </if>
            <if test="age &gt;=0 and age &lt;=150">
                age = #{age,jdbcType=INTEGER},
            </if>
            <if test="gender!=null">
                gender = #{gender,jdbcType=VARCHAR},
            </if>
            <if test="birth!=null">
                birth = #{birth,jdbcType=DATE}
            </if>
        </set>
        where id=#{id,jdbcType=INTEGER}

    </update>


    <select id="checkUserName" parameterType="string" resultType="int">

        select count(*) from user where username=#{username};

    </select>


    <!--联合唯一去重-->
    <select id="removeCoincidence" resultType="Boolean">

         alter ignore table radar_region_coincidence add unique index(parent_radar_id,radar_id);
        SELECT COUNT(1) as '查询数量' from user GROUP BY parent_radar_id,radar_id;

    </select>

</mapper>
8.编写 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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">


    <!--扫包-->
    <context:component-scan base-package="com.qianfeng.dao"/>

    <!--1.关联数据库配置文件 property-placeholder 文件占位-->
    <context:property-placeholder location="classpath:db.properties"/>

    <!--2.数据库连接池
    dbcp:半自动化操作,不能自动化连接
    c3p0:自动化操作(自动化的加载配置文件,并且可以自动设置到对象中!)
    druid(德鲁伊):hikari:
    -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="username" value="${user}"/>
        <property name="password" value="${password}"/>
        <property name="url" value="${url}"/>
        <property name="driverClassName" value="${driver}"/>


        <!-- 连接池其他属性 -->
        <!--第一次连接初始化-->
        <property name="initialSize" value="100" />
        <!--最大连接池数量-->
        <property name="maxActive" value="1000" />
        <!--最大等待时间,单位毫秒-->
        <property name="maxWait" value="60000" />
        <!--连接保持空闲而不被驱逐的最长时间-->
        <property name="minEvictableIdleTimeMillis" value="300000" />
        <!--连接池中的minIdle数量以内的连接,空闲时间超过minEvictableIdleTimeMillis,则会执行keepAlive操作-->
        <property name="keepAlive" value="true"/>
        <!--有两个含义:
1) Destroy线程会检测连接的间隔时间,如果连接空闲时间大于等于minEvictableIdleTimeMillis则关闭物理连接 2) testWhileIdle的判断依据,详细看testWhileIdle属性的说明-->
        <property name="timeBetweenEvictionRunsMillis" value="-1" />
        <!--最小连接池数量-->
        <property name="minIdle" value="20" />
        <!--要求程序从池中get到连接后, N 秒后必须close,否则druid 会强制回收该连接,不管该连接中是活动还是空闲, 以防止进程不会进行close而霸占连接。-->
        <property name="removeAbandoned" value="true"/>
        <!--设置druid 强制回收连接的时限,当程序从池中get到连接开始算起,超过此值后,druid将强制回收该连接,单位秒。-->
        <property name="removeAbandonedTimeout" value="180"/>
        <!--当druid强制回收连接后,是否将stack trace 记录到日志中-->
        <property name="logAbandoned" value="true" />
        <!--建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。-->
        <property name="testWhileIdle" value="true" />
        <!--用来检测连接是否有效的sql,要求是一个查询语句,常用select 'x'。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用。-->
        <property name="validationQuery" value="SELECT 'x'" />
        <!--申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。-->
        <property name="testOnBorrow" value="false" />
        <!--归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。-->
        <property name="testOnReturn" value="false" />
        <!--是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。-->
        <property name="poolPreparedStatements" value="true"/>
        <!--要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100-->
        <property name="maxPoolPreparedStatementPerConnectionSize" value="20"/>
        <!--属性类型是字符串,通过别名的方式配置扩展插件,常用的插件有:
        监控统计用的filter:stat
        日志用的filter:log4j
        防御sql注入的filter:wall-->
        <property name="filters" value="stat,wall,slf4j"/>
        <!--连接属性。比如设置一些连接池统计方面的配置。-->
        <property name="connectionProperties" value="druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000" />
    </bean>


    <!--3.配置mybatis  sqlsessionfactory  -->

    <!--SqlSessionFactoryBean来替代SqlSessionFactoryBuilder来创建SqlSession;利用mybatis映射文件**.xml来配置-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

        <!-- SqlSessionFactoryBean有一个必须属性dataSource-->
        <property name="dataSource" ref="dataSource"/>

        <!--扫描pojo包,给包下所有pojo对象起别名-->
        <property name="typeAliasesPackage" value="com.qianfeng.entity"/>

        <!-- 当mybatis的xml文件和mapper接口不在相同包下时,需要用mapperLocations属性指定xml文件的路径。*是个通配符,代表所有的文件,**代表所有目录下 -->
        <property name="mapperLocations" value="classpath:mappers/*.xml"/>

        <!--(用来指定mybatis的xml配置文件路径),绑定mybatis-config.xml文件-->
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
    </bean>

    <!--4.在springmvc与mybatis整合时,需要对每一个mapper定义对应的一个MapperFactoryBean,
    可以使用MapperScannerConfigurer自动扫描mapper,然后自动为我们注册对应的MapperFactoryBean对象。-->
    <!--动态实现dao接口可以注入到Spring容器中-->
    <bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">

        <property name="sqlSessionFactoryBeanName" value="sqlSession"/>

        <!--basePackage表示需要扫描的包,annotationClass表示需要扫描该包下有该的注解的类。-->
        <property name="basePackage" value="com.qianfeng.dao"/>

    </bean>

</beans>
9.编写 service.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: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 https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/util https://www.springframework.org/schema/util/spring-util.xsd
http://www.springframework.org/schema/config ">


    <!--1.扫service下的包-->
    <context:component-scan base-package="com.qianfeng.service"/>

    <!--2.spring  提供的  datasource  平台事务管理器(用做切面切点)--><!--配置声明式事务  -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
       <!--注入数据源-->
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <!--3.结合aop实现事务的植入-->
    <!--配置事务通知-->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="add" 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>
    

    <!--开启事务注解-->
    <tx:annotation-driven transaction-manager="transactionManager"/>
</beans>
10.编写WEB-INF下的 web.xml 配置文件
<!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>
    <display-name>Archetype Created Web Application</display-name>


    <!--声明应用范围(整个WEB项目)内的上下文初始化参数。-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-*.xml</param-value>
    </context-param>


    <!--字符编码过滤器-->
    <filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <!-- init-param 的param-name 就是参数名  param-value就是参数值, 支持多个参数-->
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
    </filter>


    <!--Restful过滤器  使得支持GET、POST、PUT与DELETE请求-->
    <filter>
        <filter-name>HiddenHttpMethodFilter</filter-name>
        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <filter-mapping>
        <filter-name>HiddenHttpMethodFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>


    <!--监听器-->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>


    <!--DispatcherServlet 前端控制器-->
    <servlet>
        <servlet-name>DispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-web.xml</param-value>
        </init-param>
    </servlet>

    <!--<url-pattern>:指定相对于Servlet的URL的路径。该路径相对于web应用程序上下文的根路径。
    <servlet-mapping>将URL模式映射到某个Servlet,即该Servlet处理的URL。-->

    <!--servlet的映射路径,-->
    <servlet-mapping>
        <servlet-name>DispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <!--设置session的失效时间,以分钟为单位-->
    <session-config>
        <session-timeout>15</session-timeout>
    </session-config>

</web-app>
11.编写mvc.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:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.alibaba.com/schema/stat http://www.alibaba.com/schema/stat.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">


    <!--1.扫包-->
    <context:component-scan base-package="com.qianfeng.controller"/>


    <!--2.注解驱动:annotation-driven配置帮助我们挖成上述两个实例的注入,代替之前的适配器和映射器的开启的配置-->
    <mvc:annotation-driven/>

    
    <!--3.处理静态资源过滤-->
    <mvc:default-servlet-handler/>


    <!--4.MVC模板中添加    thymeleaf模板解析器-->
    <bean id="templateResolver" class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
        <property name="characterEncoding" value="utf-8"/>
        <property name="templateMode" value="HTML"/>
        <!--不使用缓存-->
        <property name="cacheable" value="false"/>
        <property name="suffix" value=".html"/>
        <property name="prefix" value="/"/>
    </bean>

    <!--5.模板引擎配置-->
    <bean id="templateEngine" class="org.thymeleaf.spring5.SpringTemplateEngine">
        <property name="templateResolver" ref="templateResolver"/>

    </bean>

    <!--6.配置视图处理器-->
    <bean class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
        <property name="characterEncoding" value="utf-8"/>
        <property name="templateEngine" ref="templateEngine"/>
    </bean>

</beans>

目前SSM框架已经搭建好,开始编写业务逻辑代码了


~希望可以帮助到您,解决问题

~~~感谢您的光临~~~

猜你喜欢

转载自blog.csdn.net/m0_50762431/article/details/117528051