前言:
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插件自己解決
(需要注冊(cè)賬號(hào))
(最新版的)
二亡哄、新建一個(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包的下載
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包引入
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)明出處带族,謝謝