SSM框架搭建最佳實踐
基於SSM框架開發時總體分為以下5步:
- 創建項目
- 引入POM
- 修改配置
- 編寫業務
- 運行測試
重點應該放在編寫業務上,SSM框架的搭建過程中配置比較繁瑣,將配置模板直接引入到新項目中即可,不用糾結,也無需記憶,只要會根據實際情況對配置做相應修改即可。
1、創建項目
在IDEA中使用Maven的方式創建項目。
1.1 新建Maven項目
新建Maven項目,選擇maven-archetype-webapp類型,注意JDK版本,需要使用JDK17及以上版本,這裏選擇JDK 21版本,填寫組ID等信息後完成創建。
2、引入POM
引入Spring、SpringMVC、MyBatis框架及相關依賴包。
2.1 引入Spring框架相關依賴
Spring框架核心依賴,整個項目的基座,版本統一為:
<spring.version>6.2.11</spring.version>
2.2 引入SpringMVC相關依賴
基於SpringMVC框架開發Web項目時所需要的相關依賴(文件上傳相關依賴根據項目情況引入),對應版本為:<spring.version>6.2.11</spring.version>
<jstl.version>2.0.0</jstl.version>
<taglib.version>1.2.5</taglib.version>
<servlet-api.version>6.0.0</servlet-api.version>
<fileupload.version>1.6.0</fileupload.version>
2.3 引入MyBatis框架相關依賴
核心包括MyBatis框架依賴包、MyBatis-Spring整合包以及MySQL數據庫連接驅動及數據源相關依賴包。對應版本:
<mybatis.version>3.5.19</mybatis.version>
<jboss-vfs.version>3.3.2.Final</jboss-vfs.version>
<mybatis-spring.version>3.0.5</mybatis-spring.version>
<mysql-connector.version>9.3.0</mysql-connector.version>
<druid.version>1.2.24</druid.version>
2.4 引入其他依賴
除了三大框架核心依賴之外,項目運行還需要以下基礎依賴,包括@Resource註解、FastJSON、Log4j2日誌、JUnit測試等相關依賴,對應版本:
<annotation-api.version>2.1.1</annotation-api.version>
<fastjson.version>2.0.52</fastjson.version>
<log4j2.version>2.19.0</log4j2.version>
<junit.version>4.13.2</junit.version>
完整的POM配置文件如下:
XML
pom.xml
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- 組織名稱 -->
<groupId>com.ktjy</groupId>
<!-- 組件名稱(全局唯一) -->
<artifactId>KT-SSM</artifactId>
<!-- 版本號 -->
<version>1.0-SNAPSHOT</version>
<!-- 打包方式 jar:打包為可執行的jar文件,war:打包為可部署的war文件 -->
<packaging>war</packaging>
<!-- 項目名稱 -->
<name>KT-SSM</name>
<!-- 定義項目屬性 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<servlet-api.version>6.0.0</servlet-api.version>
<jstl.version>2.0.0</jstl.version>
<taglib.version>1.2.5</taglib.version>
<spring.version>6.2.11</spring.version>
<mybatis.version>3.5.19</mybatis.version>
<jboss-vfs.version>3.3.2.Final</jboss-vfs.version>
<mybatis-spring.version>3.0.5</mybatis-spring.version>
<mysql-connector.version>9.3.0</mysql-connector.version>
<druid.version>1.2.24</druid.version>
<fileupload.version>1.6.0</fileupload.version>
<annotation-api.version>2.1.1</annotation-api.version>
<fastjson.version>2.0.52</fastjson.version>
<log4j2.version>2.19.0</log4j2.version>
<junit.version>4.13.2</junit.version>
</properties>
<!-- 引入項目依賴 -->
<dependencies>
<!-- 引入Spring框架核心依賴 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- 引入Spring框架AOP依賴 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- 引入Spring框架JDBC依賴 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- 引入Spring框架事務管理依賴 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- 引入Spring框架Web基礎依賴 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- 引入SpringMVC框架依賴 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- 引入Servlet API依賴 -->
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>${servlet-api.version}</version>
</dependency>
<!-- 引入JSTL標準標籤庫依賴 -->
<dependency>
<groupId>jakarta.servlet.jsp.jstl</groupId>
<artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
<version>${jstl.version}</version>
</dependency>
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>jakarta.servlet.jsp.jstl</artifactId>
<version>${jstl.version}</version>
</dependency>
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-impl</artifactId>
<version>${taglib.version}</version>
</dependency>
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-spec</artifactId>
<version>${taglib.version}</version>
</dependency>
<!-- 引入文件上傳相關依賴 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>${fileupload.version}</version>
</dependency>
<!-- 引入MyBatis框架依賴 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!-- 解決MyBatis框架加載別名包實體類時控制枱顯示亂碼問題 -->
<dependency>
<groupId>org.jboss</groupId>
<artifactId>jboss-vfs</artifactId>
<version>${jboss-vfs.version}</version>
</dependency>
<!-- 引入MyBatis-Spring框架整合依賴 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${mybatis-spring.version}</version>
</dependency>
<!-- 引入MySQL數據庫驅動依賴 -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>${mysql-connector.version}</version>
</dependency>
<!-- 引入Druid數據庫連接池依賴 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<!-- 引入@Resource註解支持依賴 -->
<dependency>
<groupId>jakarta.annotation</groupId>
<artifactId>jakarta.annotation-api</artifactId>
<version>${annotation-api.version}</version>
</dependency>
<!-- 引入FastJSON依賴 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<!-- 引入Log4j2日誌框架核心依賴 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j2.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j2-impl</artifactId>
<version>${log4j2.version}</version>
</dependency>
<!-- 引入JUnit測試框架依賴 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<!-- 配置資源目錄 -->
<build>
<finalName>KT-SSM</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
</project>
3、修改配置
在resources目錄下創建mybatis-config.xml、applicationContext.xml、springmvc-servlet.xml以及database.properties、log4j2.xml等配置文件。最後記得在web.xml中配置監聽器及全局DispatcherServlet映射。
3.1 mybatis-config.xml
注意修改:
參考配置文件:
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>
<!-- 全局配置文件 -->
<settings>
<!-- 開啓二級緩存 -->
<setting name="cacheEnabled" value="false" />
<!-- 開啓控制枱日誌 -->
<setting name="logImpl" value="STDOUT_LOGGING" />
<!-- 全自動映射級別 -->
<setting name="autoMappingBehavior" value="FULL" />
</settings>
<!-- 類型別名,配置基礎包,配置之後在Mapper.xml文件中可以使用類名稱首字母小寫方式簡寫 -->
<typeAliases>
<package name="com.ktjy.pojo" />
</typeAliases>
</configuration>
3.2 applicationContext.xml
注意修改:
參考配置文件:
applicationContext.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:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" 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/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- Spring支持掃描指定包,配合註解注入Bean -->
<context:component-scan base-package="com.ktjy.service" />
<!-- 讀取數據庫配置文件 -->
<context:property-placeholder location="classpath:database.properties" />
<!-- 數據源配置,使用DBCP連接池 -->
<!-- <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
<!– ========== 基本連接屬性配置 ========== –>
<!– 數據庫驅動類配置 –>
<property name="driverClassName" value="${jdbc.driver}" />
<!– 數據庫連接URL配置 –>
<property name="url" value="${jdbc.url}" />
<!– 數據庫連接用户名配置 –>
<property name="username" value="${jdbc.username}" />
<!– 數據庫連接密碼配置 –>
<property name="password" value="${jdbc.password}" />
<!– ============= 連接池策略配置 =============== –>
<!– 數據庫連接池在初始化連接時,立刻創建的連接個數 –>
<property name="initialSize" value="${pool.initialSize}" />
<!– 連接池中同時連接的最大連接數 –>
<property name="maxTotal" value="${pool.maxTotal}" />
<!– 連接池中允許的最大空閒連接數,高於該值連接池將銷燬部分空閒連接 –>
<property name="maxIdle" value="${pool.maxIdle}" />
<!– 連接池中可允許的最小空閒連接數,低於該數值的連接池將會創建新的連接 –>
<property name="minIdle" value="${pool.minIdle}" />
<!– 最大等待連接時間,單位為毫秒。默認-1 無限等待 –>
<property name="maxWaitMillis" value="${pool.maxWaitMillis}" />
<!– 在連接池維護過程中,是否檢查連接是否被廢棄。默認值為 false –>
<property name="removeAbandonedOnMaintenance" value="${pool.removeAbandonedOnMaintenance}" />
<!– 當從連接池中獲取連接時,是否檢查連接是否被廢棄。默認值為 false –>
<property name="removeAbandonedOnBorrow" value="${pool.removeAbandonedOnBorrow}" />
<!– 控制連接池在超出配置的時間後回收沒有用的連接 –>
<property name="removeAbandonedTimeout" value="${pool.removeAbandonedTimeout}" />
</bean> -->
<!-- 配置數據源,使用Druid數據庫連接池 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" 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="initialSize" value="${pool.initialSize}" />
<property name="maxActive" value="${pool.maxActive}" />
<property name="minIdle" value="${pool.minIdle}" />
<property name="maxWait" value="${pool.maxWait}" />
</bean>
<!-- 通過JNDI配置DataSource -->
<!-- <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/bdqn_db" />
</bean> -->
<!-- 配置SqlSessionFactoryBean -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 引用數據庫配置<bean id="dataSource"> -->
<property name="dataSource" ref="dataSource" />
<!-- 引入MyBatis配置文件 -->
<property name="configLocation" value="classpath:mybatis-config.xml" />
<!--配置SQL映射文件信息-->
<property name="mapperLocations">
<list>
<value>classpath:mapper/**/*.xml</value>
</list>
</property>
</bean>
<!-- 使用MapperScannerConfig配置DAO -->
<!-- MyBatis-Spring提供的MapperScannerConfigurer將遞歸掃描基準包(包括各層級子包)下所有接口。如果他們在SQL映射文件中定義過,則將它們動態註冊為映射器實現類,即可批量生成映射器的實現類了 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- Mapper接口所在基礎包 -->
<property name="basePackage" value="com.ktjy.mapper" />
<!-- 注意此處需注入sqlSessionFactory的bean名稱 -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>
<!-- 聲明式事務配置 -->
<!-- 首先,定義事務管理器(這裏使用的是JDBC事務管理器,除此之外還有Java原生API事務管理器、JPA事務管理器、Hibernate事務管理器等) -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 注入數據源 -->
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 配置事務屬性,方式一:編寫配置的方式進行事務配置 -->
<!-- 聲明式事務配置,為不同業務方法指定具體的事務規則(transaction-manager屬性的默認值是transactionManager。也就是説,如果事務管理器Bean名稱是transactionManager,則可以不指定該屬性值) -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!-- 根據方法名指定事務的屬性,星號(*)表示通配符 -->
<tx:method name="*" />
<!-- propagation 配置事務傳播行為 -->
<tx:method name="purchase" propagation="REQUIRES_NEW" />
<!-- isolation 配置事務的隔離級別 -->
<tx:method name="update*" isolation="SERIALIZABLE" />
<!-- rollback-for 配置事務遇到異常必須回滾; no-rollback-for 配置事務遇到異常不回滾 -->
<tx:method name="add*" rollback-for="java.io.IOException" no-rollback-for="com.bdqn.common.SendEMailException" />
<!-- read-only 配置事務只讀屬性 -->
<tx:method name="find*" read-only="true" />
<!-- timeout 配置事務的超時屬性 -->
<tx:method name="get*" timeout="3" />
</tx:attributes>
</tx:advice>
<!-- 定義切面,把事務切入點和事務屬性關聯起來 -->
<aop:config>
<!-- 定義切入點 expression="execution(* com.bdqn.service..*.*(..))" 第一個[*]表示任意返回值類型;[com.bdqn.service..]代表匹配com.bdqn.service包及其子包;[*.*(..)]代表匹配包中所有類的所有方法 -->
<aop:pointcut id="serviceTX" expression="execution(* com.ktjy.service..*.*(..))" />
<!-- 將切入點和事務屬性關聯起來 -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceTX" />
</aop:config>
</beans>
3.3 springmvc-servlet.xml
注意修改:
參考配置文件:
springmvc-servlet.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:mvc="http://www.springframework.org/schema/mvc"
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/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">
<!--開啓註解驅動-->
<mvc:annotation-driven />
<!--註解掃碼的基礎包-->
<context:component-scan base-package="com.ktjy.controller" />
<!--定義控制器,通過/hello路徑訪問HelloController-->
<!-- <bean name="/hello" class="com.bdqn.controller.HelloController" /> -->
<!--視圖映射器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- prefix表示前綴,suffix表示後綴,最終視圖路徑為:前綴 + 視圖名稱 + 後綴。例如:/WEB-INF/hello.jsp -->
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
<!--靜態資源配置,例如:訪問 http://localhost:8080/ssm/statics/css/style.css 被映射到文件 webapp/statics/css/style.css -->
<!-- <mvc:resources mapping="/statics/**" location="/statics/" /> -->
<!--配置文件上傳解析器-->
<!-- <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="5000000" />
<property name="defaultEncoding" value="UTF-8" />
</bean> -->
<!-- 自定義攔截器配置,某些頁面登錄後才能訪問 -->
<!-- <mvc:interceptors>
<mvc:interceptor>
<!– 攔截的路徑 –>
<mvc:mapping path="/user/**" />
<!– 允許的路徑 –>
<mvc:exclude-mapping path="/user/login" />
<!– 自定義攔截器 –>
<bean class="com.bdqn.common.SysInterceptor" />
</mvc:interceptor>
</mvc:interceptors> -->
<!--全局異常處理-->
<!-- <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<!–如果發生RuntimeException異常,則跳轉到error視圖(前綴+"error"+後綴)–>
<prop key="java.lang.RuntimeException">error</prop>
</props>
</property>
</bean> -->
</beans>
3.4 database.properties
注意修改:
參考配置文件:
database.properties
# 數據庫連接基礎配置
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/ktsms_db?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
jdbc.username=root
jdbc.password=lilibo
# 數據連接池相關配置(Druid)
pool.initialSize=20
pool.maxActive=100
pool.minIdle=45
pool.maxWait=60000
# 數據連接池相關配置(DBCP)
#pool.maxTotal=100
#pool.initialSize=20
#pool.minIdle=45
#pool.maxIdle=50
#pool.maxWaitMillis=60000
#pool.removeAbandonedOnMaintenance=true
#pool.removeAbandonedOnBorrow=true
#pool.removeAbandonedTimeout=180
3.5 log4j2.xml
根據實際需要修改日誌級別,參考配置文件:
log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
<Appenders>
<!-- 控制枱輸出配置 -->
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout charset="GBK" pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %msg%n" />
</Console>
<!-- 日誌文件輸出配置 -->
<File name="File" filename="logs/catalina.log">
<PatternLayout charset="UTF-8" pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %logger{36} - %msg%n" />
</File>
</Appenders>
<Loggers>
<!-- 根日誌配置,設置默認級別為 INFO(日誌級別:TRACE < DEBUG < INFO < WARN < ERROR) -->
<root level="INFO">
<appender-ref ref="Console" />
<appender-ref ref="File" />
</root>
</Loggers>
</Configuration>
3.6 web.xml
參考配置文件:
web.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">
<!-- 配置歡迎頁面 -->
<welcome-file-list>
<welcome-file>/index.jsp</welcome-file>
</welcome-file-list>
<!-- Spring上下文配置 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 指定Spring上下文配置文件的位置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- SpringMVC配置 -->
<servlet>
<servlet-name>SpringMVC</servlet-name>
<!-- Spring核心Servlet:總分發器DispatcherServlet -->
<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>
<!-- 配置DispatcherServlet加載時的優先級,數字越小,優先級越高 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<!-- 映射所有請求到DispatcherServlet -->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
配置完畢後,項目結構和配置文件列表如圖所示:
4、編寫業務
通過數據庫工具創建數據源,自動生成實體類。基於實體類編寫數據訪問層MyBatis接口及映射文件,業務邏輯層接口及實現類,最後編寫控制器實現整體流程控制和分發。
4.1 創建數據庫連接
為了能利用數據庫工具基於數據庫錶快速創建實體類等模式代碼,首先需要創建數據庫連接。
4.2 創建實體類
選擇對應的表,右鍵,依次選擇工具->腳本化擴展程序->Generate POJO-GetSet.groovy在pojo目錄中生成實體類。
4.3 編寫MyBatis接口
創建MyBatis接口,按實體類+Mapper規範命名,根據業務需求在接口中定義方法。
SysUserMapper.java
package com.ktjy.mapper;
import com.ktjy.pojo.SysUser;
import java.util.List;
/**
* SysUserMapper 系統用户Mapper接口
*
* @author LILIBO
* @since 2025-12-03
*/
public interface SysUserMapper {
/**
* 查詢所有用户
*/
List<SysUser> selectAll();
}
4.4 編寫Mapper映射文件
在resources/mapper目錄中創建MyBatis接口對應的Mapper映射文件,注意namespace屬性與接口全路徑一致。
在IDEA中,MyBatis接口中定義的方法報紅不用慌,鼠標點到方法定義處,按Alt + Enter->選擇Generate statement生成該接口方法對應的Mapper映射。
在生成的<select></select>等標籤中編寫相應SQL語句。因為配置了別名包,resultType可以將全路徑的實體類名稱簡寫為別名(小駝峯命名法類名稱)。
SysUserMapper.xml
<?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="com.ktjy.mapper.SysUserMapper">
<!-- 查詢所有用户 -->
<select id="selectAll" resultType="sysUser">
select *
from sys_user
</select>
</mapper>
4.5 編寫Service層接口
創建Service層接口,按實體類+Service規範命名,根據業務需求在接口中定義方法。
SysUserService.java
package com.ktjy.service;
import com.ktjy.pojo.SysUser;
import java.util.List;
/**
* SysUserService 系統用户服務接口
*
* @author LILIBO
* @since 2025-12-03
*/
public interface SysUserService {
/**
* 查詢所有用户
*/
List<SysUser> findAll();
}
4.6 編寫Service層實現類
SysUserServiceImpl.java
package com.ktjy.service.impl;
import com.ktjy.mapper.SysUserMapper;
import com.ktjy.pojo.SysUser;
import com.ktjy.service.SysUserService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* SysUserServiceImpl 系統用户服務實現類
*
* @author LILIBO
* @since 2025-12-03
*/
@Service
public class SysUserServiceImpl implements SysUserService {
/**
* 注入系統用户Mapper接口實例
*/
@Resource
private SysUserMapper sysUserMapper;
/**
* 查詢所有用户
*/
@Override
public List<SysUser> findAll() {
// 調用Mapper接口方法查詢所有用户
return sysUserMapper.selectAll();
}
}
4.7 編寫Controller層控制器
SysUserController.java
package com.ktjy.controller;
import com.ktjy.pojo.SysUser;
import com.ktjy.service.SysUserService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.List;
/**
* SysUserController 系統用户控制器
*
* @author LILIBO
* @since 2025-12-03
*/
@Controller
@RequestMapping("/sysUser")
public class SysUserController {
/**
* 注入系統用户服務接口實例
*/
@Resource
private SysUserService sysUserService;
/**
* 查詢所有用户
*/
@GetMapping("/findAll")
public String findAll(Model model) {
// 調用系統用户服務接口方法查詢所有用户
List<SysUser> sysUserList = sysUserService.findAll();
// 將查詢到的用户列表添加到模型中
model.addAttribute("sysUserList", sysUserList);
// 返回邏輯視圖名稱(使用SpringMVC視圖解析器配置中的 前綴 + 視圖名稱 + 後綴 進行定位)
return "user";
}
}
其中findAll()方法返回值"user"為視圖名稱,根據springmvc-servlet.xml配置,需要在webapp/WEB-INF/jsp/目錄下創建user.jsp頁面作為控制器的視圖返回瀏覽器。
4.8 編寫JSP頁面
在webapp/WEB-INF/jsp/目錄下創建user.jsp頁面。
編寫頁面代碼。
WEB-INF/jsp/user.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>用户管理</title>
</head>
<body>
<h1>用户列表</h1>
<table border="1">
<tr>
<th>賬號</th>
<th>真實姓名</th>
<th>性別</th>
<th>出生日期</th>
<th>手機號碼</th>
<th>用户地址</th>
</tr>
<!-- 遍歷用户列表,將每個用户的信息顯示在表格中 -->
<c:forEach items="${sysUserList}" var="sysUser">
<tr>
<td>${sysUser.account}</td>
<td>${sysUser.realName}</td>
<td>${sysUser.sex == 1 ? '男' : '女'}</td>
<td>${sysUser.birthday}</td>
<td>${sysUser.phone}</td>
<td>${sysUser.address}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
5、運行測試
注意:Spring6.0需要使用Tomcat10作為Web容器進行部署運行。