Hibernate專題
struts2-hibernate-mysql開發案例與源碼
源碼下載
本案例展示使用Struts2,Hibernate和MySQL數據庫開發一個個人音樂管理器Web應用程序。,可將您的音樂收藏添加到數據庫中。功能有:顯示一個添加記錄的表單和所有的音樂收藏的列表。每行的記錄可通過點擊“刪除”鏈接刪除。Struts2靈活的J2EE框架之一,數據庫是MySQL,使用Hibernate作為ORM工具。
工具:
Eclipse Indigo Java EE IDE for Web開發者
Struts 2
Hibernate 3
Hibernate Tools Eclipse Plugin Version 3.5.1
mysql JDBC jar (mysql-connector-java-5.1.23)
Tomcat 7
Step 1: 準備數據庫
使用phpMyAdmin?作為MySQL數據庫管理:
創建數據庫music_manager?,加入下面SQL創建表?albumtbl:
CREATE TABLE IF NOT EXISTS `albumtbl` (
`music_id` INT(4) NOT NULL AUTO_INCREMENT,
`album_title` VARCHAR(255) NOT NULL,
`album_genre` VARCHAR(255) NOT NULL,
`album_artists` text NOT NULL,
`no_of_tracks` INT(2) NOT NULL,
PRIMARY KEY (`music_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
INSERT INTO `albumtbl` (`music_id`, `album_title`, `album_genre`, `album_artists`, `no_of_tracks`) VALUES
(1, 'Trouble-Akon', 'Hip Hop', 'Akon', 11),
(3, 'Savage Island', 'Contemporary R&B', 'Savage, Ganxstardd, Soulja Boy, David Dallas, Sean P, Pitbull', 16),
(4, 'Kiss (Carly Rae Jepsen album)', 'Pop', 'Carly Rae Jepsen, Justin Bieber, Owl City', 12),
(5, 'Taylor Swift (album)', 'Pop', 'Taylor Swift', 15);
Step 2: 在Eclipse創建項目
‘businessobjects’ 包含了映射數據庫表的POJO java beans
在 ‘dao’包下包含數據訪問層的Java類,操作數據表
‘hbm’ 包含 *.hbm 用于 hibernate xml 到 數據表的字段映射
‘utils’包包含工具類
‘actions’ 是 Struts 2 action 類
‘delegates’ 扮演前端和Hibernate后端的橋梁。
‘forms’ 包是Struts 2可選,包含界面的表單對象
Step 3: 拷貝 jar文件到lib目錄
從Tomcat安裝目錄拷貝servlet-api.jar 到項目lib目錄。
Step 4: 增加Struts 2支持
在web.xml加入:
03
04
index.jsp
05
06
07
08
struts2
09
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
10
11
12
struts2
13
*.action
14
15
創建struts.xml內容:
/p>
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
index.jsp
class="com.tctalk.apps.mmgr.web.actions.MusicManagerAction" method="getAllAlbumList" >
/WEB-INF/web/jsps/musicmgr.jsp
class ="com.tctalk.apps.mmgr.web.actions.MusicManagerAction" method="addAlbumToCollection" >
listAlbum
listAlbum
class ="com.tctalk.apps.mmgr.web.actions.MusicManagerAction" method="delAlbumFromCollection" >
listAlbum
Step 5: 增加 Hibernate 支持
增加Eclipse的Hibernate插件:
創建hibernate.cfg.xml
/p>
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/music_manager
root
org.hibernate.dialect.MySQLDialect
創建一個AlbumBO.java類,可由Hibernatw插件輸出:
// Generated by Hibernate Tools 3.4.0.CR1
/**
* AlbumtblBO generated by hbm2java
*/
public class AlbumtblBO implements java.io.Serializable {
private static final long serialVersionUID = -1445059679188116334L;
private int musicId;
private String albumTitle;
private String albumGenre;
private String albumArtists;
private int noOfTracks;
public AlbumtblBO() {
}
public AlbumtblBO(int musicId, String albumTitle, String albumGenre,
String albumArtists, int noOfTracks) {
this.musicId = musicId;
this.albumTitle = albumTitle;
this.albumGenre = albumGenre;
this.albumArtists = albumArtists;
this.noOfTracks = noOfTracks;
}
Albumtbl.hbm.xml是AlbumBO和數據表Album的映射文件:
/p>
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
創建HibernateUtils.java 專門用于Hibernate的操作:
package com.tctalk.apps.mmgr.utils;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtils {
private static SessionFactory hbmSessionFactory;
static {
try {
Configuration cfg = new Configuration()
.configure(MusicMgrConstant._HIBERNATE_CONFIG_LOCATION);
hbmSessionFactory = cfg.buildSessionFactory();
} catch (RuntimeException ex) {
System.out.println("********* Error occurred while reading config file *********");
ex.printStackTrace();
}
}
/**
* getSession creates hibernate Session & returns it
*/
public static Session getSession() {
return hbmSessionFactory.openSession();
}
/**
* closeSession closes the session, if it exists
*/
public static void closeSession(Session inSession) {
if (inSession != null) {
inSession.close();
}
}
}
創建MusicManagerDao.java and MusicManagerDaoImpl.java?,代碼可見源碼下載包。
Step 6:創建UI界面
Musicmngr.jsp:
pageEncoding="ISO-8859-1"%>
TechcubeTalk.com - Let's build apps from scratch series - Personal Music Manager Application:: TechcubeTalk.com - Personal Music Manager ::
Step 7: 增加 action類
MusicManagerAction.java
package com.tctalk.apps.mmgr.web.actions;
import java.util.List;
import com.tctalk.apps.mmgr.db.businessobjects.AlbumtblBO;
import com.tctalk.apps.mmgr.web.delegates.MusicManagerDelegate;
import com.tctalk.apps.mmgr.web.forms.MusicManagerForm;
public class MusicManagerAction extends MusicManagerForm {
private static final long serialVersionUID = 9168149105719285096L;
private MusicManagerDelegate musicMgrDelegate = new MusicManagerDelegate();
public String getAllAlbumList(){
List albumList = musicMgrDelegate.getAllMusicAlbums();
String returnString = ERROR;
if(albumList != null) {
setAlbumList(albumList);
returnString = SUCCESS;
}
return returnString;
}
public String addAlbumToCollection(){
String returnString = ERROR;
AlbumtblBO album = getAlbum();
if(musicMgrDelegate.addAlbumToCollection(album)){
returnString = SUCCESS;
}
return returnString;
}
public String delAlbumFromCollection(){
String returnString = ERROR;
int albumId = getMusicId();
if(musicMgrDelegate.delAlbumFromCollection(albumId)) {
returnString = SUCCESS;
}
return returnString;
}
}
MusicManagerForm.java:
package com.tctalk.apps.mmgr.web.forms;
import java.util.List;
import com.opensymphony.xwork2.ActionSupport;
import com.tctalk.apps.mmgr.db.businessobjects.AlbumtblBO;
public class MusicManagerForm extends ActionSupport {
private static final long serialVersionUID = 706337856877546963L;
private List albumList ?? ?? = null;
private AlbumtblBO album? ?? ?? ?? ?? = null;
private int musicId;
public AlbumtblBO getAlbum() {
return album;
}
public void setAlbum(AlbumtblBO album) {
this.album = album;
}
public List getAlbumList() {
return albumList;
}
public void setAlbumList(List albumList) {
this.albumList = albumList;
}
public int getMusicId() {
return musicId;
}
public void setMusicId(int musicId) {
this.musicId = musicId;
}
}
Step 8: 增加委托類
MusicManagerDelegate.java
public class MusicManagerDelegate {
MusicManagerDao mmgrDao = (MusicManagerDao) new MusicManagerDaoImpl();
public List getAllMusicAlbums() {
return mmgrDao.getAllMusicAlbumsFromCollection();
}
public boolean addAlbumToCollection(AlbumtblBO albumobj) {
return mmgrDao.addAlbum(albumobj);
}
public boolean delAlbumFromCollection(int albumId) {
return mmgrDao.delAlbum(albumId);
}
}
Step 9: 最后
在Eclipse點按項目,右鍵中選擇?Export as war 文件,將項目輸出一個WAR文件。也可以使用Gradle建立一個Java 項目,然后輸出War文件。
將war文件拷貝到tomcat/webapps目錄下,在瀏覽器訪問http://localhost:8080/PersonalMusicManagerApp
.