整合SSH(Spring+Struts+Hibernate)實(shí)例(一)

前言:

JDK:Java 1.7.0

IDE:Eclipse 宾添, Version=Kepler 4.3.0 勺像;

服務(wù)器:Tomcat7.0整以;

數(shù)據(jù)庫(kù):Mysql5.5

這是一個(gè)國(guó)家電力系統(tǒng)的案例滔驾,本來(lái)是要先描述系統(tǒng)設(shè)計(jì)的谒麦,但是這里注重開(kāi)發(fā)實(shí)操過(guò)程俄讹,也就省略了。

這章需要實(shí)現(xiàn)的是:從jsp頁(yè)面接收表單數(shù)據(jù)弄匕,再存到數(shù)據(jù)庫(kù)里面(后面有源碼下載)

一颅悉、java、eclipse迁匠、tomcat剩瓶、mysql的下載安裝搭建

網(wǎng)上都有教程,需要說(shuō)明的是tomcat的安裝城丧,新手最好下載exe安裝包延曙,省心;junit插件自己解決

點(diǎn)此下載Tomcat7.0

Java1.7下載

(需要注冊(cè)賬號(hào))

Eclipse 64位下載

(最新版的)

Mysql5.5精簡(jiǎn)版

二亡哄、新建一個(gè)動(dòng)態(tài)網(wǎng)站項(xiàng)目

起了名字枝缔,然后點(diǎn)擊完成就行了(有興趣可以設(shè)置一下WebContent)

三、數(shù)據(jù)庫(kù)的設(shè)計(jì)

建議使用cmd指令建庫(kù)蚊惯,多熟悉mysql操作愿卸;如果圖方便也可以下載數(shù)據(jù)庫(kù)圖視化工具操作(比如navicat)

1、打開(kāi)cmd截型,輸入mysql -u*(此處*為你的用戶(hù)名) -p*(此處*為數(shù)據(jù)庫(kù)密碼)

登陸成功后

創(chuàng)建數(shù)據(jù)庫(kù)

CREATE DATABASE elec CHARACTER SET utf8 COLLATE utf8_general_ci;

改用elec數(shù)據(jù)庫(kù)

use elec趴荸;

創(chuàng)建表

CREATE TABLE Elec_Text(

textID varchar(50) not null,

textName varchar(50),

textDate datetime,

textRemark varchar(500),

primary key(textID)

);

如圖:

可以使用desc elec_text;查看表結(jié)構(gòu)


四宦焦、引入hibernate

1发钝、導(dǎo)入用到的hibernate 核心Jar包(這里把mysql的連接包也加進(jìn)去了)

點(diǎn)此下載hibernate5.5.5核心jar包

2、在src文件夾根目錄下新建hibernate.cfg.xml文件波闹,該文件在src根目錄下會(huì)被自動(dòng)加載

其中<mapping resource=""/>是映射后面寫(xiě)到的xml文件


五酝豪、新建一個(gè)包,并新建PO持久層對(duì)象精堕,用于映射數(shù)據(jù)表elec_text孵淘,ElecText.Java(類(lèi)名詞開(kāi)頭都大寫(xiě))

package cn.itcast.elec.domain;

import java.util.Date;

/**

* PO持久層對(duì)象,對(duì)應(yīng)數(shù)據(jù)庫(kù)表Elec_Text

*

*/

@SuppressWarnings("serial")

public class ElecText implements java.io.Serializable {

private String textID;

private String textName;

private Date textDate;

private String textRemark;

public String getTextID() {

return textID;

}

public void setTextID(String textID) {

this.textID = textID;

}

public String getTextName() {

return textName;

}

public void setTextName(String textName) {

this.textName = textName;

}

public Date getTextDate() {

return textDate;

}

public void setTextDate(Date textDate) {

this.textDate = textDate;

}

public String getTextRemark() {

return textRemark;

}

public void setTextRemark(String textRemark) {

this.textRemark = textRemark;

}

}

六歹篓、新建上面PO類(lèi)的hibernate映射配置文件瘫证,ElecText.hbm.xml


七、編寫(xiě)junit測(cè)試類(lèi)滋捶,測(cè)試映射痛悯、連接等等是否有誤

1余黎、新建一個(gè)junit包重窟,新建TestHibernate.java文件

public class TestHibernate {

@Test

public void testElecText(){

Configuration config = new Configuration();

config.configure();

//創(chuàng)建sessionFactory對(duì)象

SessionFactory sf = config.buildSessionFactory();

//打開(kāi)session,操作數(shù)據(jù)庫(kù)

Session session = sf.openSession();

//開(kāi)啟事務(wù)

Transaction tr = session.beginTransaction();

//實(shí)例化ElecText對(duì)象惧财,添加數(shù)據(jù)巡扇,執(zhí)行保存操作

ElecText elecText = new ElecText();

elecText.setTextName("測(cè)試Hibernate名稱(chēng)");

elecText.setTextDate(new Date());

elecText.setTextRemark("測(cè)試Hibernate備注");

//保存

session.save(elecText);

//提交事務(wù)

tr.commit();

session.close();

}

}

2扭仁、右鍵--》debug看是否有問(wèn)題(有問(wèn)題的話(huà)自己解決吧。厅翔。)

八乖坠、引入spring

1、spring核心jar包的下載

點(diǎn)擊下載spring4.3.6

2刀闷、在src根目錄下新建beans.xml(之所以在根目錄下是因?yàn)榧虞d的時(shí)候直接寫(xiě)文件名就行熊泵,方便)


其中3是為hibernate注入sessionFactory工廠(chǎng),第四步是創(chuàng)建事務(wù)管理器甸昏,有這個(gè)管理器顽分,spring會(huì)自動(dòng)提交、回滾等等事務(wù)

九施蜜、新建cn.itcast.elec.dao包卒蘸,再新建一個(gè)公共DAO接口ICommonDao.java,規(guī)范數(shù)據(jù)訪(fǎng)問(wèn)類(lèi)

package cn.itcast.elec.dao;

public interface ICommonDao{

public void save(T entity);

}

十翻默、新建一個(gè)impl包缸沃,實(shí)現(xiàn)上面的接口CommonDaoImpl.java


該類(lèi)繼承了HibernateDaoSuppport類(lèi),里面提供了增刪改查的方法修械,@Resource(name="sessionFactory")的意思是將bean.xml配置中id為sessionFactory的bean(里面內(nèi)部已經(jīng)生存了sessionFactory類(lèi))注入給setSessionFactoryDi方法

十一趾牧、在原來(lái)的dao包下,新建一個(gè)elecTextDao.java祠肥,用于規(guī)范elecText的訪(fǎng)問(wèn)

package cn.itcast.elec.dao;

import cn.itcast.elec.domain.ElecText;

public interface IElecTextDao extends ICommonDao{

public final static String SERVICE_NAME = "cn.itcast.elec.dao.impl.ElecTextDaoImpl";

}

十二武氓、在原來(lái)的impl包下,新建一個(gè)ElecTextDaoImpl仇箱,用來(lái)實(shí)現(xiàn)elecTextDao接口

package cn.itcast.elec.dao.impl;

import org.springframework.stereotype.Repository;

import cn.itcast.elec.dao.IElecTextDao;import cn.itcast.elec.domain.ElecText;

@Repository(IElecTextDao.SERVICE_NAME)

public class ElecTextDaoImpl extends CommonDaoImplimplements IElecTextDao {

}

其中@Repository(IElecTextDao.SERVICE_NAME)是將名為IElecTextDao.SERVICE_NAME的類(lèi)注入到spring容器當(dāng)中

十三县恕、新建一個(gè)service接口包,并在其下面新建一個(gè)service接口剂桥,規(guī)范業(yè)務(wù)


十四忠烛、新建一個(gè)service實(shí)現(xiàn)包,并新建一個(gè)實(shí)現(xiàn)類(lèi)

十五权逗、struts的引用

1美尸、struts2 jar包引入

點(diǎn)此下載struts2 jar包

2、寫(xiě)一個(gè)所有Action都要繼承的類(lèi)斟薇,這個(gè)類(lèi)主要是為了獲取到HttpServletRequest和HttpServletResponse對(duì)象师坎,而這兩個(gè)對(duì)象用于客服端和服務(wù)端的信息傳遞。


其實(shí)堪滨,如果不繼承ServletRequest和ServletResponse也可以胯陋,不過(guò)要通過(guò)ServletActionContext或者ActionContext來(lái)獲取,更重要的是,這兩種不是IOC模式遏乔,需要自己注入义矛,多了一些步驟

3、接下來(lái)就是要繼承這個(gè)BaseAction類(lèi)了盟萨,但是在此之前還需要寫(xiě)一個(gè)從Spring IOC容器加載Bean的類(lèi)凉翻,因?yàn)檫@個(gè)加載是公共代碼,而且也很費(fèi)時(shí)間捻激,所以把這部分代碼抽出來(lái)制轰,作為一個(gè)服務(wù)類(lèi),加載一次就好胞谭。

首先艇挨,建一個(gè)ApplicationContext的JavaBean


再利用加載了bean配置的類(lèi),進(jìn)行bean的加載


之所以把把加載配置文件和加載bean分開(kāi)兩個(gè)類(lèi)是因?yàn)檫€可以利用配置文件干一些其他的事情

4韭赘、這個(gè)時(shí)候回想一下我們所要實(shí)現(xiàn)的業(yè)務(wù)缩滨,沒(méi)錯(cuò)就是要將jsp的表單數(shù)據(jù)存到數(shù)據(jù)庫(kù)里面,這里就需要一個(gè)載體承擔(dān)jsp頁(yè)面和action之間的信息傳遞泉瞻÷雎回想一下上面的PO類(lèi),負(fù)責(zé)完成java和數(shù)據(jù)庫(kù)的映射袖牙。其實(shí)我們也可以用那個(gè)PO類(lèi)完成這里的信息傳遞侧巨,但是這樣做不好。因?yàn)閿?shù)據(jù)庫(kù)的數(shù)據(jù)不完全會(huì)是頁(yè)面所反饋或者用到的鞭达,造成資源浪費(fèi)等司忱。所以好的做法是再寫(xiě)一個(gè)Model類(lèi),用于擔(dān)當(dāng)起表現(xiàn)的作用


5畴蹭、再在action包下坦仍,寫(xiě)一個(gè)存儲(chǔ)從jsp頁(yè)面?zhèn)鬟^(guò)來(lái)的action


其中實(shí)現(xiàn)ModelDriven的好處,大家自行百度

6叨襟、在web.xml(WebContent/WEB-INF目錄下)配置struts相關(guān)攔截器


7繁扎、配置完攔截器后,改攔截器會(huì)自動(dòng)加載src根目錄下的命名為struts.xml的文件


最后的jsp糊闽,就是一個(gè)表單的提交梳玫,大家可以自己寫(xiě),也可以看代碼

點(diǎn)擊下載源代碼(提取碼為oimt)

可能需要將WebContent改為WebRoot右犹,如果運(yùn)行提示resources 不可用提澎,那么可以對(duì)著項(xiàng)目右鍵-->Properties-->Project Facets。取消再勾選Dynamic Web Module念链,點(diǎn)擊”Apply“應(yīng)用盼忌,然后下面會(huì)出現(xiàn)一個(gè)“Further Configuration Avaliable...",再點(diǎn)進(jìn)去莉炉,修改WebContent為WebRoot


終于寫(xiě)完了,感覺(jué)要吐血了碴犬。问潭。(有什么錯(cuò)誤的地方虑啤,還希望大家指出并指正)

PS:轉(zhuǎn)載分享請(qǐng)標(biāo)明出處带族,謝謝

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末或粮,一起剝皮案震驚了整個(gè)濱河市屈溉,隨后出現(xiàn)的幾起案子榜掌,更是在濱河造成了極大的恐慌檐春,老刑警劉巖况芒,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件唠椭,死亡現(xiàn)場(chǎng)離奇詭異跳纳,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)贪嫂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)寺庄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人力崇,你說(shuō)我怎么就攤上這事斗塘。” “怎么了亮靴?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵馍盟,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我茧吊,道長(zhǎng)贞岭,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任搓侄,我火速辦了婚禮瞄桨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘讶踪。我一直安慰自己讲婚,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布俊柔。 她就那樣靜靜地躺著筹麸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪雏婶。 梳的紋絲不亂的頭發(fā)上物赶,一...
    開(kāi)封第一講書(shū)人閱讀 52,736評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音留晚,去河邊找鬼酵紫。 笑死告嘲,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的奖地。 我是一名探鬼主播橄唬,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼参歹!你這毒婦竟也來(lái)了仰楚?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤犬庇,失蹤者是張志新(化名)和其女友劉穎僧界,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體臭挽,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡捂襟,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了欢峰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片葬荷。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖纽帖,靈堂內(nèi)的尸體忽然破棺而出闯狱,到底是詐尸還是另有隱情,我是刑警寧澤抛计,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布哄孤,位于F島的核電站,受9級(jí)特大地震影響吹截,放射性物質(zhì)發(fā)生泄漏瘦陈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一波俄、第九天 我趴在偏房一處隱蔽的房頂上張望晨逝。 院中可真熱鬧,春花似錦懦铺、人聲如沸捉貌。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)趁窃。三九已至,卻和暖如春急前,著一層夾襖步出監(jiān)牢的瞬間醒陆,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工裆针, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留刨摩,地道東北人寺晌。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像澡刹,于是被迫代替她去往敵國(guó)和親呻征。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361

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

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法罢浇,類(lèi)相關(guān)的語(yǔ)法陆赋,內(nèi)部類(lèi)的語(yǔ)法,繼承相關(guān)的語(yǔ)法己莺,異常的語(yǔ)法,線(xiàn)程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,665評(píng)論 18 399
  • 目錄 1. Hibernate框架的概述 1.1 Hibernate簡(jiǎn)介 1.2 為什么要學(xué)習(xí)Hibernate ...
    深海魚(yú)Q閱讀 1,024評(píng)論 0 14
  • 本文包括: 1戈轿、CRM 項(xiàng)目的整體介紹 2凌受、Hibernate 框架概述 3、Hibernate 快速入門(mén) 4思杯、H...
    廖少少閱讀 3,476評(píng)論 9 66
  • 一> 程序中事務(wù)控制 環(huán)境準(zhǔn)備 : 用戶(hù)訪(fǎng)問(wèn)—》Action --》 Service---》Dao 一個(gè)業(yè)務(wù)的成...
    奮斗的老王閱讀 1,137評(píng)論 0 51
  • 看著電腦胜蛉,看著上面放的視頻,腦袋里想著自己要怎么才能把它們做出來(lái)色乾。如此誊册,手底下也會(huì)記一些相關(guān)的注意點(diǎn),更會(huì)用筆勾勒...
    我的回憶錄閱讀 116評(píng)論 0 0