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

Spring 3.x 企業應用開發實戰 Day-1:用戶登錄完整示例

     編輯:Java 綜合教學

Spring 3.x 企業應用開發實戰 Day-1:用戶登錄完整示例

本文記錄依照《Spring 3.x 企業應用開發實戰》一書,從零搭建一個基於 Spring + Spring MVC + JDBC Template 的用戶登錄模塊,涵蓋分層架構、數據庫設計、DAO/Service/Web 層代碼、配置文件及單元測試。

1. 專案分層架構

  • dao:持久層,操作數據庫。
  • domain:領域模型,數據表映射實體類。
  • service:業務層,組織事務與邏輯。
  • web:展現層,Spring MVC 控制器。

2. 數據庫設計

MySQL 5.x,兩張表:

  • user:存儲用戶基本信息(id、user_name、password、credits、last_ip、last_time)。
  • user_log:記錄登錄日誌(user_id、ip、log_time)。

3. DAO 層實現

使用 JdbcTemplate 簡化 JDBC 操作,配合 @Repository、@Autowired 註解。

@Repository
public class UserDao {
    @Autowired private JdbcTemplate jdbcTemplate;

    public int getMatchCount(String username, String password) {
        String sql = "SELECT COUNT(*) FROM user WHERE user_name=? AND password=?";
        return jdbcTemplate.queryForInt(sql, username, password);
    }

    public User findUserByUserName(final String username) {
        String sql = "SELECT id, user_name, credits FROM user WHERE user_name=?";
        final User user = new User();
        jdbcTemplate.query(sql, new Object[]{username}, new RowCallbackHandler() {
            public void processRow(ResultSet rs) throws SQLException {
                user.setId(rs.getInt("id"));
                user.setUserName(rs.getString("user_name"));
                user.setCredits(rs.getInt("credits"));
            }
        });
        return user;
    }

    public void updateLoginInfo(User user) {
        String sql = "UPDATE user SET credits=?, last_ip=?, last_time=? WHERE id=?";
        jdbcTemplate.update(sql, user.getCredits(), user.getLastIp(), user.getLastTime(), user.getId());
    }
}

LoginLogDao 同理,僅實現 insertLoginLog 插入日誌。

4. Service 業務層

標註 @Service,注入 DAO,編排登錄、查詢、積分更新與日誌記錄邏輯,配合聲明式事務。

@Service
public class UserService {
    @Autowired private UserDao userDao;
    @Autowired private LoginLogDao loginLogDao;

    public boolean userLogin(String username, String password) {
        return userDao.getMatchCount(username, password) > 0;
    }

    public User findUserByUserName(String username) {
        return userDao.findUserByUserName(username);
    }

    public void successLoginLog(User user) {
        if (user != null) {
            user.setCredits(user.getCredits() + 5);
            UserLog log = new UserLog();
            log.setUserId(user.getId());
            log.setIp(user.getLastIp());
            log.setLogTime(user.getLastTime());
            userDao.updateLoginInfo(user);
            loginLogDao.insertLoginLog(log);
        }
    }
}

5. Spring 核心配置

applicationContext.xml 包含:

  • 組件掃描:<context:component-scan base-package="com.zwy.dao,com.zwy.service"/>
  • DBCP 數據源 + JdbcTemplate Bean。
  • 事務管理器 DataSourceTransactionManager + AOP 切面 execution(* com.zwy.service..*(..)) 實現聲明式事務。

6. JUnit 4 單元測試

使用 SpringJUnit4ClassRunner 載入容器,注入 UserService 驗證登錄、查詢、積分更新流程。

7. Web 層

LoginController 處理 /index.html 與 /loginCheck.html,表單數據自動綁定到 LoginCommand,登錄成功存入 Session、跳轉主頁,失敗返回錯誤信息。

8. web.xml 與 Spring MVC 配置

  • ContextLoaderListener 啟動根容器。
  • DispatcherServlet 處理 *.html 請求,配置 InternalResourceViewResolver 指向 /WEB-INF/jsp/*.jsp。

完整代碼結構清晰,展示了 Spring 3.x 經典「三層架構 + JDBC Template + 聲明式事務 + Spring MVC」的最佳實踐,適合初學者快速上手企業級開發模式。

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