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

Spring + SpringMVC + MyBatis 框架整合:從零搭建企業級項目基礎環境

     編輯:Java 綜合教學

項目搭建目標與技術棧

本文記錄一套標準的 Spring + SpringMVC + MyBatis (SSM) 整合環境搭建過程,實現 Controller-Service-DAO 三層架構,涵蓋數據庫連接池、日誌、JSON 交互、JUnit 測試及前端 AngularJS 簡易對接。

核心需求

  • 標準三層架構:Controller / Service / DAO
  • MyBatis Mapper XML 實現數據庫交互
  • 配置文件集中管理 (config.properties)
  • 日誌系統 (Logback)
  • Druid 數據庫連接池
  • 註解驅動開發
  • JSON 前後端數據交互
  • JUnit 單元測試支持

基礎環境版本

工具/框架版本
Eclipse4.4.1
Maven3.2.5
Spring4.0.3
MySQL5.6
JDK1.7
Tomcat7
AngularJS1.4.0

註:前端 AngularJS 僅為驗證後端接口,實際項目前端架構另行設計。

項目目錄結構

後端目錄結構 前端目錄結構

Maven 依賴與構建配置

核心 pom.xml 亮點

  • 編譯器插件:鎖定 JDK 1.7,防止 Maven 更新重置 JRE 版本。
  • 資源文件打包:確保 src/main/java 下 XML 與 src/main/resources 所有文件打入 WAR。
  • 屬性管理:統一 Spring 版本 ${spring-version}。

關鍵依賴分組

  • Spring 全家桶:core, context, webmvc, orm, test, beans, context-support 等。
  • MyBatis 整合:mybatis, mybatis-spring。
  • 連接池:Alibaba Druid 1.0.2。
  • 數據庫驅動:mysql-connector-java 5.1.34。
  • JSON 處理:Jackson 1.9.7 + Fastjson 1.1.26。
  • 日誌:Logback 1.0.9 + SLF4J。
  • 工具庫:Commons Lang3, Commons IO, CGLIB, AspectJ Weaver。

Web 核心配置文件

web.xml - 入口與過濾器

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath:spring.xml</param-value>
</context-param>

<filter>
  <filter-name>encodingFilter</filter-name>
  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  <init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param>
</filter>
<filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>

<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>
<listener><listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class></listener>

<servlet>
  <servlet-name>dispatcher</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-mvc.xml</param-value></init-param>
  <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping><servlet-name>dispatcher</servlet-name><url-pattern>/</url-pattern></servlet-mapping>

spring.xml - 核心容器配置

  • 載入 config.properties 屬性文件
  • 掃描 Service 實現包 merService.merServiceImp
  • 啟用 @Autowired、@Transactional 註解支持

spring-MybatisConfig.xml - 數據層整合

  • 配置 DruidDataSource,所有參數從屬性文件讀取
  • SqlSessionFactoryBean 整合 MyBatis 核心配置 MybatisConf.xml 及 Mapper 掃描路徑
  • SqlSessionTemplate 設為 prototype 作用域
  • MapperScannerConfigurer 自動掃描 merDao 包下 Mapper 接口生成實現

MybatisConf.xml - MyBatis 核心設置

  • 開啟緩存、生成鍵、REUSE 執行器、延遲加載
  • 語句超時 55 秒
  • 別名包 merModel 自動映射實體類

spring-mvc.xml - MVC 層配置

  • 掃描 Controller 包 merController
  • 啟用 <mvc:annotation-driven> 及默認 Servlet 處理靜態資源
  • 配置 MappingJacksonHttpMessageConverter 解決 IE 下 AJAX 返回 JSON 觸發下載問題
  • 註冊 AnnotationMethodHandlerAdapter 整合消息轉換器

logback.xml - 日誌輸出策略

  • 日誌目錄 logs/,按天滾動,保留 30 天
  • 格式:時間 [線程] 級別 Logger - 消息
  • 分級別配置:應用 INFO、MyBatis DEBUG、DAO 專用 Appender

config.properties - 統一參數管理

包含 JDBC 連接信息、C3P0/Druid 連接池完整參數,實現環境差異化配置。

業務代碼示例:用戶新增功能

領域模型

// merModel.UserModel - 實體類
public class UserModel implements Serializable {
    private int id;
    private String account, userName, password, mobile, email;
    // getter/setter/toString 省略
}

前端命令對象

// merCommand.UserCommand - 接收前端參數
public class UserCommand { /* 字段與 UserModel 對應 */ }

DAO 層

// merDao.UserDao
public interface UserDao {
    void save(UserModel userModel);
}
<!-- merDao/mapper/UserDaoMapper.xml -->
<mapper namespace="merDao.UserDao">
  <resultMap id="userResult" type="UserModel">...</resultMap>
  <sql id="userColumns">id,account,userName,password,mobile,email</sql>
  <insert id="save" parameterType="UserModel">
    insert into user(<include refid="userColumns"/>) 
    values(#{id},#{account},#{userName},#{password},#{mobile},#{email})
  </insert>
</mapper>

Service 層

// merService.UserService
public interface UserService { void add(UserModel userModel); }
// merService.merServiceImp.UserServiceImp
@Service("UserService")
public class UserServiceImp implements UserService {
    private static final Logger logger = LoggerFactory.getLogger(UserServiceImp.class);
    private UserDao userDao;
    @Resource(name="userDao") public void setUserDao(UserDao userDao) { this.userDao = userDao; }
    @Override public void add(UserModel userModel) { userDao.save(userModel); }
}

Controller 層

// merController.UserController
@RestController
public class UserController {
    @Autowired private UserService userService;
    @RequestMapping(value="addUser", method=RequestMethod.POST)
    public void addUser(@RequestBody UserCommand userCommand) {
        UserModel userModel = new UserModel();
        BeanUtils.copyProperties(userCommand, userModel);
        userService.add(userModel);
    }
}

前端 AngularJS 對接

路由與控制器

// app.js
var app = angular.module('merchantApp', ['ui.router']);
app.config(function($stateProvider, $urlRouterProvider) {
    $urlRouterProvider.otherwise('/addUser');
    $stateProvider.state('addUser', {
        url: '/addUser',
        views: { 'view': { templateUrl: 'views/addUser.html', controller: 'addUserCtr' } }
    });
});
// addUserCtr.js
angular.module('merchantApp').controller('addUserCtr', ['$scope','$http', function($scope,$http){
    $scope.addUser = function(user) {
        $http.post('./addUser', user, {headers: 'Content-Type:application/json'}).success(function(){});
    };
}]);

視圖與樣式

addUser.html 使用 ng-model 綁定表單字段,ng-click 觸發提交。CSS 實現居中卡片式佈局。

驗證結果

瀏覽器訪問界面 數據庫寫入記錄

點擊「註冊」後數據庫成功寫入用戶記錄,標誌著 SSM 基礎環境搭建完成,可作為後續業務開發的標準模板。

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