菜鳥搭建web服務(wù)筆記3

回顧

上一篇筆者用Spring MVC框架改造了web服務(wù)阅懦,在這一篇中將通過集成MyBatis框架使用MySQL存儲數(shù)據(jù),同時利用servlet原生的方法實現(xiàn)處理圖片上傳的功能掠河。

環(huán)境

  • Spring MVC:5.1.5
  • MyBatis:3.5.0
  • MySQL:8.0.13
  • Tomcat:9.0.16
  • Maven:3.6.0
  • Git:2.20
  • 操作系統(tǒng):windows10

集成MyBatis

  • pom.xml添加依賴的jar包,包括mybatis和mysql-connector-java
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.0</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.13</version>
</dependency>
  • resources目錄下新建MyBatis配置文件mybatis-config.xml,具體參考官方文檔奏甫,同時修改數(shù)據(jù)庫配置
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/yourdbname"/>

注意driver用的是com.mysql.cj.jdbc.Driver尖飞,而不是com.mysql.jdbc.Driver症副,后者已經(jīng)過時了。

  • 創(chuàng)建映射文件UserMapper.xml政基,同樣參考上面這個網(wǎng)址
  • 自行創(chuàng)建數(shù)據(jù)庫和表結(jié)構(gòu)
  • 考慮到MyBatis中兩個最重要的類SqlSessionFactorySqlSession有不同的scope贞铣,設(shè)計上將SqlSessionFactory對象存在靜態(tài)變量中,在程序初始化階段創(chuàng)建沮明;而SqlSession對象因為是method或者session scope辕坝,這里筆者將它與一個request請求綁定,在每次處理一個新的請求時調(diào)用openSession方法獲得荐健。

運行測試

  • 第一次運行時提示時區(qū)不正確
com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value '?D1ú±ê×?ê±??' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.

在配置的url中增加參數(shù)serverTimezone=UTC即可

<property name="url" value="jdbc:mysql://localhost:3306/yourdbname?serverTimezone=UTC"/>
  • 通過MyBatis插入的數(shù)據(jù)并未真正插入到mysql中
    筆者在openSession時忘了將autoCommit設(shè)置為true酱畅,同時代碼中也沒有手動調(diào)用commit方法琳袄,因此數(shù)據(jù)并未真正插入。解決方法為調(diào)用openSession(true)即可纺酸。

servlet原生方式處理文件

  • 大致思路是調(diào)用HttpServletRequestgetParts方法獲得Part對象的集合窖逗。每個Part對象對應(yīng)一個上傳的文件,通過調(diào)用它的getInputStream方法可以獲得輸入流餐蔬,然后按照正常的字節(jié)流方法處理即可碎紊。
public void upload(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
    req.setCharacterEncoding("utf-8");
    Collection<Part> parts = req.getParts();
    for (Part part : parts) {
        InputStream in = part.getInputStream();
        // your code here
    }
}
  • 運行時會提示由于沒有提供multi-part配置,無法處理parts用含。根據(jù)servlet規(guī)約矮慕,有兩種方式可以解決這個問題。一是給servlet增加@MultipartConfig注解啄骇,由于這里用的是現(xiàn)成的DispatcherServlet痴鳄,因此這個方法并不可行;二是在部署描述符中為servlet配置<multipart-config></multipart-config>

總結(jié)

  • Spring項目手動集成MyBatis主要通過SqlSessionFactorySqlSession實現(xiàn)
  • 瀏覽器上傳的文件可以通過HttpServletRequestgetParts方法獲得
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末缸夹,一起剝皮案震驚了整個濱河市痪寻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌虽惭,老刑警劉巖橡类,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異芽唇,居然都是意外死亡顾画,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門匆笤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來研侣,“玉大人,你說我怎么就攤上這事炮捧∈睿” “怎么了?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵咆课,是天一觀的道長末誓。 經(jīng)常有香客問我,道長书蚪,這世上最難降的妖魔是什么喇澡? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮善炫,結(jié)果婚禮上撩幽,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好窜醉,可當(dāng)我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布宪萄。 她就那樣靜靜地躺著,像睡著了一般榨惰。 火紅的嫁衣襯著肌膚如雪拜英。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天琅催,我揣著相機與錄音居凶,去河邊找鬼。 笑死藤抡,一個胖子當(dāng)著我的面吹牛侠碧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播缠黍,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼弄兜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了瓷式?” 一聲冷哼從身側(cè)響起替饿,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎贸典,沒想到半個月后视卢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡廊驼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年据过,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片妒挎。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡蝶俱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出饥漫,到底是詐尸還是另有隱情,我是刑警寧澤罗标,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布庸队,位于F島的核電站,受9級特大地震影響闯割,放射性物質(zhì)發(fā)生泄漏彻消。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一宙拉、第九天 我趴在偏房一處隱蔽的房頂上張望宾尚。 院中可真熱鬧,春花似錦、人聲如沸煌贴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽牛郑。三九已至怠肋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間淹朋,已是汗流浹背笙各。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留础芍,地道東北人杈抢。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像仑性,于是被迫代替她去往敵國和親惶楼。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容