首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

手把手教你搭建 SSM 框架實現登錄功能:從數據庫設計到完整項目結構

     編輯:Java 綜合教學

前言:為什麼要從 Demo 入手學 SSM?

對於 Java EE 初學者,SSM 框架的龐大配置(Jar 包依賴、XML 配置、注解用法)往往令人望而卻步。最有效的學習路徑是:先跑通一個完整 Demo,再逐層拆解源碼,最後從架構高度重構理解。本文將帶你從零搭建一個基於 SSM 的登錄模塊,涵蓋數據庫、實體、DAO、Service、Controller、JSP 及全套配置文件。

專案整體架構流程

經過源碼分析,完整調用鏈路如下:

Database → Entity → Mapper.xml → Mapper.java → DAO → DAOImpl → Service → ServiceImpl → Controller → JSP

分層職責說明

層級職責關鍵技術
Entity映射資料表字段,封裝數據POJO、Getter/Setter
Mapper定義 SQL 映射接口,XML 編寫具體 SQLMyBatis、@Mapper、ResultMap
DAO數據訪問接口,封裝 Mapper 調用@Repository、@Resource 注入 Mapper
Service業務邏輯、事務控制@Service、@Transactional、@Resource 注入 DAO
Controller接收請求、參數綁定、調用 Service、返回視圖@Controller、@RequestMapping、@Scope(prototype)
View頁面渲染JSP、EL 表達式、JSTL

核心代碼實現

1. 數據庫設計

CREATE DATABASE DB_TEST;
USE DB_TEST;
CREATE TABLE T_USER (
  ID INT PRIMARY KEY AUTO_INCREMENT,
  USERNAME VARCHAR(16) NOT NULL,
  PASSWORD VARCHAR(16) NOT NULL
);
INSERT INTO T_USER (USERNAME, PASSWORD) VALUES ('admin', '123');

2. 實體類 User.java

public class User {
    private int id;
    private String username;
    private String password;
    // 省略 Getter/Setter
}

3. Mapper 接口與 XML

// UserMapper.java
public interface UserMapper {
    User getUserByName(String username);
}
<!-- UserMapper.xml -->
<mapper namespace="com.crm.mapper.UserMapper">
  <resultMap type="com.crm.entity.User" id="userMap">
    <id property="id" column="id" />
    <result property="username" column="username" />
    <result property="password" column="password" />
  </resultMap>
  <select id="getUserByName" parameterType="string" resultMap="userMap">
    SELECT * FROM T_USER WHERE username = #{username}
  </select>
</mapper>

4. DAO 層

// UserDao.java
public interface UserDao {
    User findUserByName(String username);
}

// UserDaoImpl.java
@Repository("userDao")
public class UserDaoImpl implements UserDao {
    @Resource(name = "userMapper")
    private UserMapper userMapper;

    @Override
    public User findUserByName(String username) {
        return userMapper.getUserByName(username);
    }
}

5. Service 層

// UserService.java
public interface UserService {
    User checkLogin(String username, String password);
}

// UserServiceImpl.java
@Service("userService")
public class UserServiceImpl implements UserService {
    @Resource
    private UserDao userDao;

    @Override
    public User checkLogin(String username, String password) {
        User user = userDao.findUserByName(username);
        if (user != null && user.getPassword().equals(password)) {
            return user;
        }
        return null;
    }
}

6. Controller 層

@Controller
@Scope("prototype")
@RequestMapping("/user")
public class UserController {
    @Resource
    private UserService userService;

    @RequestMapping(value = "/login", method = RequestMethod.POST)
    public String login(User user, Model model) throws Exception {
        user = userService.checkLogin(user.getUsername(), user.getPassword());
        if (user != null) {
            model.addAttribute(user);
            return "welcome";  // 對應 /WEB-INF/pages/welcome.jsp
        }
        return "fail";
    }
}

7. 登錄頁面 login.jsp

<form action="/ssm/user/login" method="post">
  <input type="text" name="username" placeholder="用戶名"/>
  <input type="password" name="password" placeholder="密碼"/>
  <input type="submit" value="登錄"/>
</form>

核心配置文件詳解

applicationContext.xml(Spring 核心配置)

  • 屬性佔位符:載入 database.properties
  • 數據源:C3P0 連接池,引用屬性佔位符
  • 組件掃描:<context:component-scan base-package="com.crm.*"> 排除 Controller(留給 SpringMVC 掃描)
  • MyBatis 整合:SqlSessionFactoryBean 配置數據源、MyBatis 配置文件、Mapper XML 路徑
  • Mapper 掃描器:MapperScannerConfigurer 批量註冊 Mapper 接口
  • 事務管理器:DataSourceTransactionManager,配合 @Transactional 使用

database.properties

mysql.driver_class=com.mysql.jdbc.Driver
mysql.connection.url=jdbc:mysql://localhost:3306/DB_TEST
mysql.connection.username=root
mysql.connection.password=root

mybatis.xml

<configuration>
  <typeAliases>
    <typeAlias type="com.crm.entity.User" alias="user" />
  </typeAliases>
</configuration>

web.xml

關鍵配置點:

  • ContextLoaderListener 載入 Spring 容器(classpath*:springContext/*Context.xml)
  • DispatcherServlet 載入 SpringMVC 配置(/WEB-INF/springmvc.xml),load-on-startup=1
  • CharacterEncodingFilter 統一 UTF-8 編碼
  • 歡迎頁面設置為 login.jsp

springmvc.xml

  • 掃描 Controller 包:<context:component-scan base-package="com.crm.controller"/>
  • 靜態資源映射:<mvc:resources .../>
  • 視圖解析器:前綴 /WEB-INF/pages/,後綴 .jsp

運行驗證與常見坑

  1. 確保 MySQL 服務啟動,數據庫/表/數據已創建
  2. 檢查 database.properties 中用戶名密碼是否正確
  3. Tomcat 部署時注意項目名稱(示例中為 ssm),登錄表單 action 路徑需匹配
  4. 若報 NoSuchBeanDefinitionException,檢查包掃描路徑與注解是否匹配
  5. JSP 頁面需放在 /WEB-INF/pages/ 目錄下,防止直接訪問

總結與進階建議

通過本 Demo 你已掌握 SSM 基礎搭建全流程。建議後續嘗試:

  • 引入 PageHelper 實現分頁查詢
  • 使用 Log4j2 替換 Log4j,完善日誌體系
  • 嘗試 Spring Boot 重構項目,體驗自動配置魅力
  • 學習 MyBatis-Plus,減少 XML 編寫量

筆耕不輟,碼海無涯。祝你在 Java 之路上越走越遠!

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved