Maven+SSM框架(Spring+SpringMVC+MyBatis) - Hello World(轉發)
[JSP]Maven+SSM框架(Spring+SpringMVC+MyBatis) - Hello World
來源:http://blog.csdn.net/zhshulin/article/details/37956105?utm_source=tuicool&utm_medium=referral(以下博文對原博文有改動和補充)
博文裏紅底白字的,為註意修改的地方,在這裏先聲明
源碼:Maven&SSM框架 - Hello World
開發環境:
Eclipse Java EE IDE for Web Developers. Version: Mars.2 Release (4.5.2)
apache-tomcat-8.0.33
jdk1.8.0_77
MySQL 5.0.11-dev(官網下載需要賬號登錄,故不提供,請自行百度)
1、基本概念
1.1、Spring
Spring是一個開源框架,Spring是於2003 年興起的一個輕量級的Java 開發框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中闡述的部分理念和原型衍生而來。它是為了解決企業應用開發的復雜性而創建的。Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅限於服務器端的開發。從簡單性、可測試性和松耦合的角度而言,任何Java應用都可以從Spring中受益。 簡單來說,Spring是一個輕量級的控制反轉(IoC)和面向切面(AOP)的容器框架。
1.2、SpringMVC
Spring MVC屬於SpringFrameWork的後續產品,已經融合在Spring Web Flow裏面。Spring MVC 分離了控制器、模型對象、分派器以及處理程序對象的角色,這種分離讓它們更容易進行定制。
1.3、MyBatis
MyBatis 本是apache的一個開源項目iBatis, 2010年這個項目由apache software foundation 遷移到了google code,並且改名為MyBatis 。MyBatis是一個基於Java的持久層框架。iBATIS提供的持久層框架包括SQL Maps和Data Access Objects(DAO)MyBatis 消除了幾乎所有的JDBC代碼和參數的手工設置以及結果集的檢索。MyBatis 使用簡單的 XML或註解用於配置和原始映射,將接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java對象)映射成數據庫中的記錄。
2、開發環境搭建
參看博文:MyEclipse+Tomcat+MAVEN+SVN項目完整環境搭建(作者:shu_lin)
3、Maven Web項目創建
參看博文:使用maven創建web項目(作者:shu_lin)(博文最後一步可以不用設置,Maven->Update Project...會自動設置)
補充:(可跳過)
新建的Maven,Java Resources只有resource
可以添加Server Library自動生成
右擊項目->Properties->Java Build Path->Add Library...->Server Library
4、SSM整合
下面主要介紹三大框架的整合,至於環境的搭建以及項目的創建,參看上面的博文。這次整合我分了2個配置文件,分別是spring-mybatis.xml,包含spring和mybatis的配置文件,還有個是spring-mvc的配置文件,此外有2個資源文件:jdbc.propertis和log4j.properties。
使用框架都是較新的版本:
Spring 4.0.2 RELEASE(PS:無需手動下載,Maven會自動下)
Spring MVC 4.0.2 RELEASE(PS:無需手動下載,Maven會自動下)
MyBatis 3.2.6(下載:https://github.com/mybatis/mybatis-3/releases)
完整目錄結構如下:
4.1、Maven引入需要的JAR包
為了方便後面說的時候不需要引入JAR包,我這裏直接給出所有需要的JAR包,這都是基本的JAR包,每個包的是幹什麽的都有註釋,就不再多說了。
pom.xml
4.2、Spring與MyBatis的整合
所有需要的JAR包都引入以後,首先進行Spring與MyBatis的整合,然後再進行JUnit測試,先看一個項目結構圖:
4.2.1、建立JDBC屬性文件
jdbc.properties(文件編碼修改為utf-8)
按 Ctrl+C 復制代碼 按 Ctrl+C 復制代碼
4.2.2、Log4j的配置(跳過此步也沒影響)
為了方便調試,一般都會使用日誌來輸出信息,Log4j是Apache的一個開放源代碼項目,通過使用Log4j,我們可以控制日誌信息輸送的目的地是控制臺、文件、GUI組件,甚至是套接口服務器、NT的事件記錄器、UNIX Syslog守護進程等;我們也可以控制每一條日誌的輸出格式;通過定義每一條日誌信息的級別,我們能夠更加細致地控制日誌的生成過程。
Log4j的配置很簡單,而且也是通用的,下面給出一個基本的配置,換到其他項目中也無需做多大的調整,如果想做調整或者想了解Log4j的各種配置,參看我轉載的一篇博文,很詳細:Log4j配置詳解 (作者:shu_lin)
log4j.properties(文件編碼修改為utf-8)
4.2.3、建立spring-mybatis.xml配置文件
這個文件就是用來完成spring和mybatis的整合的。這裏面也沒多少行配置,主要的就是自動掃描,自動註入,配置數據庫。註釋也很詳細,大家看看就明白了。
spring-mybatis.xml
4.2.4、JUnit測試
經過以上步驟(log4j不配也沒影響),我們已經完成了Spring和mybatis的整合,這樣我們就可以編寫一段測試代碼來試試是否成功了。
4.2.4.1、創建測試用表
既然我們需要測試,那麽我們就需要建立在數據庫中建立一個測試表,這個表建的很簡單,SQL語句為:
MySQL
# # Structure for table "user_t" # DROP TABLE IF EXISTS `user_t`; CREATE TABLE `user_t` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_name` varchar(40) NOT NULL, `password` varchar(255) NOT NULL, `age` int(4) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; # # Data for table "user_t" # INSERT INTO `user_t` VALUES (1,‘測試‘,‘123456‘,24);
4.2.4.2、利用MyBatis Generator自動創建代碼
隨便找個位置建文件夾(路徑最好都是英文),然後在裏面建個src文件夾,下載下面那兩個包,將generatorConfig.xml拷進去,最後打開cmd,進到文件夾,執行下面的命令,代碼就會生成到src文件夾裏
mysql-connector-java.jar
mybatis-generator-core.jar
generatorConfig.xml
按 Ctrl+C 復制代碼 按 Ctrl+C 復制代碼
cmd命令
java -jar mybatis-generator-core-1.3.2.jar -configfile generatorConfig.xml -overwrite
可做成.bat文件備用,放在目錄運行即可
cmd命令
set current_path="%cd%" java -jar mybatis-generator-core-1.3.2.jar -configfile generatorConfig.xml -overwrite pause exit
參考博文:SSM框架——使用MyBatis Generator自動創建代碼(作者:shu_lin)
這個可根據表自動創建實體類、MyBatis映射文件以及DAO接口,完成後將文件復制到工程中。如圖:
IUserService.java
package com.ssm.service; import com.ssm.pojo.User; public interface IUserService { public User getUserById(int userId); }
UserService.java
package com.ssm.service.impl; import javax.annotation.Resource; import org.springframework.stereotype.Service; import com.ssm.dao.UserMapper; import com.ssm.pojo.User; import com.ssm.service.IUserService; @Service("userService") public class UserService implements IUserService { @Resource private UserMapper userDao; public User getUserById(int userId) { return this.userDao.selectByPrimaryKey(userId); } }
4.2.4.4、建立測試類
測試類在src/test/java中建立,下面測試類中註釋掉的部分是不使用Spring時,一般情況下的一種測試方法;如果使用了Spring那麽就可以使用註解的方式來引入配置文件和類,然後再將service接口對象註入,就可以進行測試了。如果測試成功,表示Spring和Mybatis已經整合成功了。輸出信息使用的是Log4j打印到控制臺。
TestMyBatis.java
package com.ssm.testmybatis; import javax.annotation.Resource; import org.apache.log4j.Logger; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.alibaba.fastjson.JSON; import com.ssm.pojo.User; import com.ssm.service.IUserService; @RunWith(SpringJUnit4ClassRunner.class) // 表示繼承了SpringJUnit4ClassRunner類 @ContextConfiguration(locations = { "classpath:spring-mybatis.xml" }) public class TestMyBatis { private static Logger logger = Logger.getLogger(TestMyBatis.class); // private ApplicationContext ac = null; @Resource private IUserService userService = null; // @Before // public void before() { // ac = new ClassPathXmlApplicationContext("applicationContext.xml"); // userService = (IUserService) ac.getBean("userService"); // } @Test public void test() { User user = userService.getUserById(1); // System.out.println(user.getUserName()); // logger.info("值:"+user.getUserName()); logger.info(JSON.toJSONString(user)); } }
測試:
先clean項目(可跳過),再Maven->Update Project...(重點),就是為了更新項目設置,(右擊項目->Run As->JUnit Test)
至此,完成Spring和mybatis這兩大框架的整合,下面在繼續進行SpringMVC的整合。
如測試失敗請參考網友方法,一般clean項目和右擊項目->Maven->Update Project...更新一下項目設置都可以解決:
4.3、整合SpringMVC
上面已經完成了2大框架的整合,SpringMVC的配置文件單獨放,然後在web.xml中配置整合。
4.3.1、配置spring-mvc.xml
配置裏面的註釋也很詳細,在此就不說了,主要是自動掃描控制器,視圖模式,註解的啟動這三個。
spring-mvc.xml
按 Ctrl+C 復制代碼 按 Ctrl+C 復制代碼
4.3.2、配置web.xml文件
這裏面對spring-mybatis.xml的引入以及配置的spring-mvc的Servlet就是為了完成SSM整合,之前2框架整合不需要在此處進行任何配置。配置一樣有詳細註釋,不多解釋了。
web.xml
按 Ctrl+C 復制代碼 按 Ctrl+C 復制代碼
4.3.3、測試
至此已經完成了SSM三大框架的整合了,接下來測試一下,如果成功了,那麽恭喜你,如果失敗了,繼續調試吧,作為程序員就是不停的與BUG做鬥爭!
4.3.3.1、新建jsp頁面
User.jsp 此頁面僅輸出一下用戶名,完成一個完整的簡單流程。
User.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>測試</title> </head> <body>${user.userName} </body> </html>
4.3.3.2、建立UserController類
UserController.java
package com.ssm.controller; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import com.ssm.pojo.User; import com.ssm.service.IUserService; @Controller @RequestMapping("/user") public class UserController { @Resource private IUserService userService; @RequestMapping("/showUser") public String toIndex(HttpServletRequest request, Model model) { int userId = Integer.parseInt(request.getParameter("id")); User user = this.userService.getUserById(userId); model.addAttribute("user", user); return "User"; } }
4.3.3.3、部署項目
再次測試(右擊項目->Run As->Run On Serser),輸入地址:http://localhost:8080/app/user/showUser?id=1
如果成功請不要開心得太早,Maven->Update Project...或將項目拷到其他機上後會立馬出現404!shu_lin與其他博主都沒有為此作出任何後續說明,為此寫出此博文作出補充。
補充:
無論是shu_lin的SSM框架——詳細整合教程(Spring+SpringMVC+MyBatis)還是其他人的博文,都沒有寫明Maven->Update Project...後會導致項目不能運行,會出現關於Spring包的ClassNotFoundException錯誤這個問題,
(對於我這個新手(Java零基礎新手,Eclipse也不熟悉)頭大了。。。花了近一個月來學這個Hello World。就是卡在這個問題上。)
疑問開始,找Maven
帶著這個疑問?就第一時間找到Maven,可是奇怪了,都包含了?!為什麽還是找不到類?
從百度裏找了多個答案後,終於找到問題所在,就是編譯時沒有復制依賴包到WEB-INF/lib裏,編譯時也沒有生成lib文件夾
臨時方法:(PS:感覺方法不太對,放棄了)
百度裏有個方法就是教你修改.classpath,手動添加/WEB-INF/lib
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"> <attributes> <attribute name="maven.pomderived" value="true"/> <attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/> </attributes> </classpathentry>
臨時方法:
右擊項目->Properties->Deployment Assembly->Add->Java Build Path Entries->Maven Dependencies->Finish完成添加,再點擊OK關閉
再次測試(右擊項目->Run As->Run On Serser),輸入地址:http://localhost:8080/app/user/showUser?id=1,運行OK!
完美解決方法:
可是畢竟是臨時方法,Maven->Update Project...後還是會導致項目不能運行,因為配置被Maven還原了!!!不行,這還是沒有解決,還需要再找,幾番周折終於找到了!
打開cmd,定位到項目目錄下,執行下面命令
cmd命令(根據Java Build Path的列表得知,只要不改動包,就不需要再次運行此命令)
mvn eclipse:eclipse -Dwtpversion=2.0
可做成.bat文件備用,放在項目根目錄運行即可
cmd命令
set current_path="%cd%" mvn eclipse:eclipse -Dwtpversion=2.0 pause exit
執行命令以後,clean項目和Maven->Update Project...後,Deployment Assembly和Java Build Path都有變化
再次測試(右擊項目->Run As->Run On Serser),輸入地址:http://localhost:8080/app/user/showUser?id=1,運行OK!完美!
再看看WEB-INF裏,終於自動生成lib文件夾
Maven+SSM框架(Spring+SpringMVC+MyBatis) - Hello World(轉發)