本文記錄一套標準的 Spring + SpringMVC + MyBatis (SSM) 整合環境搭建過程,實現 Controller-Service-DAO 三層架構,涵蓋數據庫連接池、日誌、JSON 交互、JUnit 測試及前端 AngularJS 簡易對接。
config.properties)| 工具/框架 | 版本 |
|---|---|
| Eclipse | 4.4.1 |
| Maven | 3.2.5 |
| Spring | 4.0.3 |
| MySQL | 5.6 |
| JDK | 1.7 |
| Tomcat | 7 |
| AngularJS | 1.4.0 |
註:前端 AngularJS 僅為驗證後端接口,實際項目前端架構另行設計。
src/main/java 下 XML 與 src/main/resources 所有文件打入 WAR。${spring-version}。<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>
config.properties 屬性文件merService.merServiceImp@Autowired、@Transactional 註解支持MybatisConf.xml 及 Mapper 掃描路徑merDao 包下 Mapper 接口生成實現merModel 自動映射實體類merController<mvc:annotation-driven> 及默認 Servlet 處理靜態資源MappingJacksonHttpMessageConverter 解決 IE 下 AJAX 返回 JSON 觸發下載問題AnnotationMethodHandlerAdapter 整合消息轉換器logs/,按天滾動,保留 30 天包含 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 對應 */ }
// 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>
// 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); }
}
// 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);
}
}
// 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 基礎環境搭建完成,可作為後續業務開發的標準模板。