SSM プロジェクト フレームワークをすばやく構築して統合します (初心者のみ)?

~SSM統合フレームワークの構築(ポイント)

序文

SSM 略称:Spring、SpringMVC、Mybatis

1.スプリングのご紹介

  • 2002 年に Spring のプロトタイプが初めて発表されました。Spring フレームワークは、interface21 に基づいていました。再設計とその意味合いの継続的な強化を経て、正式バージョン 1.0 が 2004 年 3 月 24 日にリリースされました。
  • ロッド・ジョンソン、Spring Framework の創設者であり有名な著者
  • Spring のコンセプト: 既存のテクノロジーを使いやすくする、既存のテクノロジーのフレームワークを統合したごった煮です。

2.SpringMVCの概要

  • Spring MVC は SpringFrameWork の後継製品であり、Spring Web Flow に統合されています。
  • Spring フレームワークは、Web アプリケーションを構築するためのフル機能の MVC モジュールを提供します。
  • Spring MVC フレームワークは使用されるビューを認識しないため、JSP テクノロジーのみの使用を強制しません。Spring MVC では、コントローラー、モデル オブジェクト、ディスパッチャー、ハンドラー オブジェクトの役割が分離され、カスタマイズが容易になります。

3.Mybatisの紹介

  • MyBatis は、カスタマイズされた SQL、ストアド プロシージャ、および高度なマッピングをサポートする優れた永続層フレームワークです。
  • MyBatis は、ほとんどすべての JDBC コード、パラメータの手動設定、および結果セットの取得を回避します。
  • MyBatis は、単純な XML またはアノテーションを構成に使用し、ネイティブ マップを使用してインターフェイスと Java POJO (Plain Old Java Object、通常の Java オブジェクト) をデータベース内のレコードにマップできます。

做一个SSM项目,步骤如下

1. ニーズを分析する

まずは自分がどんなプロジェクトをやりたいのかを知り、何をしたいのかを明確にする

2. 設計データベース

要件に応じてプロジェクトで使用するテーブルとフィールドを設計します。

3.Maven プロジェクトを作成する

IDEA ツールを使用して Maven を直接作成し、Web アプリ テンプレートを選択するか、空の Maven プロジェクトを作成し、右クリックして [追加] をクリックして Web アプリを追加することができます。

  • 依存関係をインポートします (参照のみとして、独自の状況に応じて依存関係をインポートします)。
		<!--测试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