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

SSM 框架首次迭代實戰:考試系統查詢模塊完整代碼實現

     編輯:Java 綜合教學

SSM 框架首次迭代實戰:考試系統查詢模塊完整代碼實現

課程專案《考試系統》首次迭代,使用 SSM (Spring MVC + Spring + MyBatis) 搭建基礎架構,實現戰隊比拼查詢功能。記錄完整代碼結構,作為從「會配置」到「能交付」的里程碑。

專案結構總覽

ball (Web 應用)
├── src
│   ├── controller/ChaxunController.java
│   ├── dao/ChaxunDao.java
│   ├── domain/User.java
│   ├── service/ChaxunService.java
│   └── service/impl/ChaxunServiceImpl.java
├── config
│   ├── mybatis/
│   │   ├── mapper/ChaxunDao.xml
│   │   └── config.xml
│   └── spring/
│       ├── applicationContext.xml
│       └── spring-mvc.xml
├── jdbc.properties
└── WebContent
    ├── WEB-INF
    │   ├── jsp/chaxun.jsp, jieguo.jsp
    │   └── web.xml
    └── index.jsp (默認)

核心代碼逐層解析

1. 實體類 (domain/User.java)

public class User {
    private int id;
    private String vs;         // 對陣組合
    private String defen;      // 比分
    private String huoshengfang; // 獲勝方
    // Getter/Setter/toString 省略
}

2. DAO 介面 (dao/ChaxunDao.java)

public interface ChaxunDao {
    User getVs(User user);      // 根據對陣查詢
    User getDefen(User user);   // 根據比分查詢
}

3. MyBatis 映射 (config/mybatis/mapper/ChaxunDao.xml)

<mapper namespace="dao.ChaxunDao">
  <select id="getVs" parameterType="User" resultType="User">
    SELECT * FROM ball WHERE vs = #{vs}
  </select>
  <select id="getDefen" parameterType="User" resultType="User">
    SELECT * FROM ball WHERE defen = #{defen}
  </select>
</mapper>

4. Service 介面與實現

// Service 介面
public interface ChaxunService {
    User getVs(User user);
    User getDefen(User user);
}

// 實現類
@Service
public class ChaxunServiceImpl implements ChaxunService {
    @Autowired private ChaxunDao chaxunDao;
    
    public User getVs(User user) { return chaxunDao.getVs(user); }
    public User getDefen(User user) { return chaxunDao.getDefen(user); }
}

5. Controller (controller/ChaxunController.java)

@Controller
@RequestMapping("/chaxun")
public class ChaxunController {
    @Autowired private ChaxunService chaxunService;

    @RequestMapping("/chaxun")
    public String chaxun() { return "chaxun"; } // 轉發至查詢頁

    @RequestMapping("/jieguo")
    public ModelAndView jieguo(User user) {
        User user2 = chaxunService.getVs(user);
        ModelAndView mv = new ModelAndView("jieguo");
        mv.addObject("aa", user2);
        return mv;
    }
}

6. Spring 核心配置 (config/spring/applicationContext.xml)

<context:component-scan base-package="service"/>
<context:property-placeholder location="classpath:jdbc.properties"/>

<!-- DBCP 連接池 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
  p:url="${jdbc.url}" p:username="${jdbc.username}" p:password="${jdbc.password}"
  p:driverClassName="${jdbc.driver}" p:maxActive="30" p:maxIdle="10" />

<!-- MyBatis SqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"
  p:dataSource-ref="dataSource"
  p:configLocation="classpath:mybatis/config.xml"
  p:mapperLocations="classpath:mybatis/mapper/**/*.xml"/>

<!-- Mapper 掃描器:自動創建 DAO 實現 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"
  p:basePackage="dao"/>

<!-- 事務管理 -->
<tx:advice id="txAdvice" transaction-manager="txManager">
  <tx:attributes>
    <tx:method name="save*" propagation="REQUIRED"/>
  </tx:attributes>
</tx:advice>
<aop:config>
  <aop:pointcut expression="execution(* hnzj.*.service.**.*(..))" id="serviceMethods"/>
  <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethods"/>
</aop:config>

7. Spring MVC 配置 (config/spring/spring-mvc.xml)

<mvc:annotation-driven/>
<context:component-scan base-package="controller"/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
  p:prefix="/WEB-INF/jsp/" p:suffix=".jsp"/>

8. 視圖頁面

chaxun.jsp:下拉選單選擇對陣組合,POST 提交至 /chaxun/jieguo

jieguo.jsp:EL 表達式顯示 ${aa.vs}、${aa.defen}、${aa.huoshengfang}

9. web.xml 核心配置

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath:spring/applicationContext.xml</param-value>
</context-param>
<listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<filter> <!-- 編碼過濾器 --> ... </filter>
<servlet>
  <servlet-name>ball</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring/spring-mvc.xml</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
  <servlet-name>ball</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>

訪問驗證

啟動 Tomcat,訪問:https://localhost:8080/ball/chaxun/chaxun

  1. 進入查詢頁,選擇對陣 (如「龍隊vs虎隊」)
  2. 點擊查詢,顯示比分與獲勝方
  3. 點擊返回,可重新查詢

心得與反思

  • 麻雀雖小,五臟俱全: 從請求入口到數據庫,完整走通 SSM 鏈路
  • 配置即代碼: XML 配置量大,後續可嘗試 Spring Boot 零配置
  • 團隊協作關鍵: 組長、導師、同學的及時解答讓我跨過了「需求不清→設計混亂→代碼報錯」的坑
  • 註釋習慣待養成: 代碼缺乏註釋,後續維護困難,需強制規範

這是起點,下一個迭代見。

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