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

SpringMVC 整合 MyBatis 完整實戰指南:從逆向工程到分層架構配置

     編輯:Java 相關知識

專案背景與技術棧

MyBatis 為 Apache 開源項目 iBatis 遷移至 Google Code 後改名而來。本文示範 SpringMVC + MyBatis 整合全流程,包含逆向工程生成基礎代碼、分層配置、Controller 實現等。

1. MyBatis Generator 逆向工程配置

透過 generatorConfig.xml 指定資料庫連線、目標套件、資料表等,自動生成 POJO、Mapper XML、Mapper Interface:

<generatorConfiguration>
  <context id="testTables" targetRuntime="MyBatis3">
    <jdbcConnection driverClass="com.mysql.jdbc.Driver"
        connectionURL="jdbc:mysql://localhost:3307/mybatis"
        userId="root" password="jalja"/>
    <javaModelGenerator targetPackage="com.jalja.springmvc_mybatis.model.pojo"
        targetProject=".\src">
        <property name="enableSubPackages" value="false"/>
        <property name="trimStrings" value="true"/>
    </javaModelGenerator>
    <sqlMapGenerator targetPackage="com.jalja.springmvc_mybatis.mapper"
        targetProject=".\src"/>
    <javaClientGenerator type="XMLMAPPER"
        targetPackage="com.jalja.springmvc_mybatis.mapper"
        targetProject=".\src"/>
    <table tableName="items"/>
    <table tableName="orders"/>
    <table tableName="orderdetail"/>
    <table tableName="user"/>
  </context>
</generatorConfiguration>

2. 專案結構與核心配置檔

web.xml - 核心部署描述符

  • 配置 ContextLoaderListener 載入 Spring 容器
  • 配置 DispatcherServlet 作為前端控制器,映射 *.do
  • 配置編碼過濾器、Log4j、Session 超時等

applicationContext-mybatis.xml - MyBatis 核心配置

  • settings:開啟延遲載入、二級快取
  • typeAliases:掃描 POJO、VO 套件自動註冊別名
  • 整合 Spring 後 mappers 可省略,改由 MapperScannerConfigurer 掃描

applicationContext-dao.xml - 資料層配置

  • 資料源 BasicDataSource(DBCP 連線池)
  • SqlSessionFactoryBean 整合 MyBatis
  • MapperScannerConfigurer 掃描 Mapper 介面生成代理
  • 宣告式事務管理:DataSourceTransactionManager + AOP 切點

applicationContext-service.xml - 服務層配置

註冊 Service 實現 Bean,如 ItemsServiceImpl。

springmvc.xml - SpringMVC 配置

  • <mvc:annotation-driven/> 啟用註解驅動
  • <context:component-scan> 掃描 Controller
  • 自訂參數轉換器、全域異常處理、檔案上傳、攔截器、視圖解析器

3. Controller 實戰範例

@Controller
@RequestMapping("/items")
public class ItemsController {
    @Autowired ItemsService itemsService;

    @RequestMapping("/findItemsList")
    public String findItemsList(Model model) throws Exception {
        List<ItemsCustom> itemsList = itemsService.findItemsList(null);
        model.addAttribute("itemsList", itemsList);
        return "itemsList";
    }

    @RequestMapping("/editItems")
    public String editItems(Model model, @RequestParam(value="id", required=true) Integer itemsId) throws Exception {
        ItemsCustom itemsCustom = itemsService.findItemsById(itemsId);
        if (itemsCustom == null) throw new CustomException("商品不存在");
        model.addAttribute("itemsCustom", itemsCustom);
        return "editItems";
    }

    @RequestMapping("/updateItems")
    public String editItemsSubmit(Integer id, ItemsCustom itemsCustom, MultipartFile itemsPic) throws Exception {
        // 檔案上傳處理、UUID 重命名、儲存路徑、更新資料庫
        return "redirect:findItemsList.do";
    }

    @RequestMapping("/jsonRequest")
    @ResponseBody public ItemsCustom jsonRequest(@RequestBody ItemsCustom itemsCustom) { ... }

    @RequestMapping("/restFulRequest/{id}")
    @ResponseBody public ItemsCustom restFulRequest(@PathVariable("id") Integer id) { ... }
}

關鍵技術點總結

  1. 逆向工程:快速生成基礎 CRUD 代碼,減少重複勞動。
  2. 分層解耦:DAO、Service、Controller 職責清晰,配置檔模組化。
  3. 事務管理:AOP + 註解式事務,精確控制傳播行為。
  4. RESTful & JSON:@PathVariable、@RequestBody、@ResponseBody 打造現代化 API。
  5. 檔案上傳:CommonsMultipartResolver + UUID 防重名。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved