細心的讀者可能已發現“Web應用開發50天”改為了“Web應用開發20天”,之是以這樣調整是因為當時想前20篇隻講解Web基礎知識,中間10篇講解我一直想要封裝的Web架構,後20篇将該應用轉換為Android應用。但由于最近女兒出生,業餘時間都被她占用了,為了盡快把Web基礎講述完就把這部分獨立出來了。
本文主要講解資料表的Hibernate配置,Come on...
1、由于系統首頁内容會涉及到幾張資料表,這裡列出涉及的幾張表
<a href="http://s3.51cto.com/wyfs02/M01/47/54/wKiom1P4gZOw1C2TAAODJyEaQas192.jpg" target="_blank"></a>
2、寫出資料表建立腳本,并在MySQL中執行這些腳本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<code>/*建立資料庫*/</code>
<code>CREATE DATABASE MEDICAL</code>
<code>GO</code>
<code>/*建立級别表*/</code>
<code>CREATE TABLE leveltable(levelId int PRIMARY KEY NOT NULL, levelName VARCHAR(20), scoreLimit int)</code>
<code>ENGINE=InnoDB DEFAULT CHARSET=UTF8</code>
<code>/*插入級别資料*/</code>
<code>INSERT INTO leveltable VALUES(1, '醫士', 100)</code>
<code>INSERT INTO leveltable VALUES(2, '醫生', 300)</code>
<code>INSERT INTO leveltable VALUES(3, '主治醫生', 1000)</code>
<code>INSERT INTO leveltable VALUES(4, '副主任', 2000)</code>
<code>INSERT INTO leveltable VALUES(5, '主任', 4000)</code>
<code>/*建立使用者表*/</code>
<code>CREATE TABLE usertable(userId VARCHAR(20) PRIMARY KEY NOT NULL, userAuth VARCHAR(64), userSign VARCHAR(128),iconPath VARCHAR(128), score int)</code>
<code>/*建立使用者收藏表*/</code>
<code>CREATE TABLE favoritetable(favoriteId int PRIMARY KEY NOT NULL, userId VARCHAR(20), topicId VARCHAR(64), favoriteTime DATETIME)</code>
<code>/*建立使用者關注表*/</code>
<code>CREATE TABLE followtable(followId int PRIMARY KEY NOT NULL, userId VARCHAR(20), followKind int, beFollowId VARCHAR(64), followTime DATETIME)</code>
<code>/*建立使用者話題表*/</code>
<code>CREATE TABLE topictable(topicId VARCHAR(64) PRIMARY KEY NOT NULL, topicTitle VARCHAR(128), userId VARCHAR(20), depId int, prescript TEXT, challengers VARCHAR(512), browseNum int, topicTime DATETIME)</code>
<code>/*建立科室表*/</code>
<code>CREATE TABLE departmenttable(depId int PRIMARY KEY NOT NULL, depName VARCHAR(64))</code>
<code>/*建立科室記錄表*/</code>
<code>INSERT INTO departmenttable VALUES(1, '内科')</code>
<code>INSERT INTO departmenttable VALUES(2, '外科')</code>
<code>INSERT INTO departmenttable VALUES(3, '婦産科')</code>
<code>INSERT INTO departmenttable VALUES(4, '兒科')</code>
<code>INSERT INTO departmenttable VALUES(5, '眼科')</code>
<code>INSERT INTO departmenttable VALUES(6, '口腔科')</code>
<code>INSERT INTO departmenttable VALUES(7, '耳鼻喉科')</code>
<code>INSERT INTO departmenttable VALUES(8, '皮膚科')</code>
<code>INSERT INTO departmenttable VALUES(9, '麻醉科')</code>
<code>INSERT INTO departmenttable VALUES(10, '傳染科')</code>
<code>INSERT INTO departmenttable VALUES(11, '美容科')</code>
<code>/*建立話題評論表*/</code>
<code>CREATE TABLE commentment(commentId VARCHAR(64) PRIMARY KEY NOT NULL, topicId VARCHAR(64), commentInfo TEXT, commentUser VARCHAR(20), commentTime DATETIME)</code>
<code>/*建立消息表*/</code>
<code>CREATE TABLE messagetable(messageId int PRIMARY KEY NOT NULL, userId VARCHAR(20), fromUserId VARCHAR(20), messageInfo VARCHAR(1024), messageTime DATETIME)</code>
3、在D:\medical\src\com\medical\server\dao下編寫與資料表對應的DAO類
(1)使用者表對應的DAO類
<code>package</code> <code>com.medical.server.dao;</code>
<code>public</code> <code>class</code> <code>UserDAO</code>
<code>{</code>
<code> </code><code>/**</code>
<code> </code><code>* 使用者ID</code>
<code> </code><code>*/</code>
<code> </code><code>private</code> <code>String userId = </code><code>null</code><code>;</code>
<code> </code>
<code> </code><code>* 使用者鑒權字元串</code>
<code> </code><code>private</code> <code>String userAuth = </code><code>null</code><code>;</code>
<code> </code><code>* 使用者自我描述</code>
<code> </code><code>private</code> <code>String userSign = </code><code>null</code><code>;</code>
<code> </code><code>* 使用者頭像路徑</code>
<code> </code><code>private</code> <code>String iconPath = </code><code>null</code><code>;</code>
<code> </code><code>* 使用者級别對應的分數</code>
<code> </code><code>private</code> <code>int</code> <code>score = </code><code>0</code><code>;</code>
<code> </code><code>// 省略相應的get&set方法</code>
<code>}</code>
(2)級别表對應的DAO類
<code>public</code> <code>class</code> <code>LevelDAO</code>
<code> </code><code>* 級别ID</code>
<code> </code><code>private</code> <code>int</code> <code>levelId = </code><code>0</code><code>;</code>
<code> </code><code>* 級别名稱</code>
<code> </code><code>private</code> <code>String levelName = </code><code>null</code><code>;</code>
<code> </code><code>* 級别對應分數的極限值</code>
<code> </code><code>private</code> <code>int</code> <code>scoreLimit = </code><code>0</code><code>;</code>
<code> </code><code>// 省略get&set方法</code>
(3)使用者收藏表對應的DAO類
<code>public</code> <code>class</code> <code>FavoriteDAO</code>
<code> </code><code>* 收藏ID</code>
<code> </code><code>private</code> <code>int</code> <code>favoriteId = </code><code>0</code><code>;</code>
<code> </code><code>* 收藏的使用者ID</code>
<code> </code><code>* 收藏的話題ID</code>
<code> </code><code>private</code> <code>String topicId = </code><code>null</code><code>;</code>
<code> </code><code>* 收藏話題的時間</code>
<code> </code><code>private</code> <code>String favoriteTime = </code><code>null</code><code>;</code>
(4)使用者關注表對應的DAO類
<code>public</code> <code>class</code> <code>FollowDAO</code>
<code> </code><code>* 關注ID</code>
<code> </code><code>private</code> <code>int</code> <code>followId = </code><code>0</code><code>;</code>
<code> </code><code>* 關注的使用者ID</code>
<code> </code><code>* 關注類别:0為關注人,1為關注話題</code>
<code> </code><code>private</code> <code>int</code> <code>followKind = </code><code>0</code><code>;</code>
<code> </code><code>* 被關注的人或話題</code>
<code> </code><code>private</code> <code>String beFollowId = </code><code>null</code><code>;</code>
<code> </code><code>* 關注時間</code>
<code> </code><code>private</code> <code>String followTime = </code><code>null</code><code>;</code>
(5)使用者話題表對應的DAO類,把ChallengeDAO類修改為TopicDAO
<code>public</code> <code>class</code> <code>TopicDAO</code>
<code> </code><code>* 話題ID</code>
<code> </code><code>* 話題名稱</code>
<code> </code><code>private</code> <code>String topicTitle = </code><code>null</code><code>;</code>
<code> </code><code>* 話題發表者</code>
<code> </code><code>* 話題所屬科室</code>
<code> </code><code>private</code> <code>int</code> <code>depId = </code><code>0</code><code>;</code>
<code> </code><code>* 話題内容</code>
<code> </code><code>private</code> <code>String prescript = </code><code>null</code><code>;</code>
<code> </code><code>* 被挑戰人</code>
<code> </code><code>private</code> <code>String challengers = </code><code>null</code><code>;</code>
<code> </code><code>* 話題浏覽次數</code>
<code> </code><code>private</code> <code>int</code> <code>browseNum = </code><code>0</code><code>;</code>
<code> </code><code>* 話題釋出時間</code>
<code> </code><code>private</code> <code>String topicTime = </code><code>null</code><code>;</code>
(6)話題科室表對應的DAO類,把DepartDAO類重命名為DepartmentDAO
(7)話題評論表對應的DAO類
<code>public</code> <code>class</code> <code>CommentDAO</code>
<code> </code><code>* 評論ID</code>
<code> </code><code>private</code> <code>int</code> <code>commentId = </code><code>0</code><code>;</code>
<code> </code><code>* 被評論的話題ID</code>
<code> </code><code>* 被評論的話題内容</code>
<code> </code><code>private</code> <code>String commentInfo = </code><code>null</code><code>;</code>
<code> </code><code>* 話題評論人</code>
<code> </code><code>private</code> <code>String commentUser = </code><code>null</code><code>;</code>
<code> </code><code>* 話題評論時間</code>
<code> </code><code>private</code> <code>String commentTime = </code><code>null</code><code>;</code>
(8)使用者消息對應的DAO類
<code>public</code> <code>class</code> <code>MessageDAO</code>
<code> </code><code>* 消息ID</code>
<code> </code><code>private</code> <code>int</code> <code>messageId = </code><code>0</code><code>;</code>
<code> </code><code>* 消息來源人</code>
<code> </code><code>private</code> <code>String fromUserId = </code><code>null</code><code>;</code>
<code> </code><code>* 消息内容</code>
<code> </code><code>private</code> <code>String messageInfo = </code><code>null</code><code>;</code>
<code> </code><code>* 消息時間</code>
<code> </code><code>private</code> <code>String messageTime = </code><code>null</code><code>;</code>
4、在D:\medical\war\etc\mapping下定義與資料表對應的Hibernate配置檔案
(1)使用者表對應的Hibernate配置檔案,修改user.hbm.xml檔案内容
<code><?</code><code>xml</code> <code>version</code><code>=</code><code>"1.0"</code> <code>encoding</code><code>=</code><code>"utf-8"</code><code>?> </code>
<code><!DOCTYPE hibernate-mapping PUBLIC </code>
<code> </code><code>"-//Hibernate/Hibernate Mapping DTD 3.0//EN" </code>
<code> </code><code>"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> </code>
<code> </code>
<code><</code><code>hibernate-mapping</code> <code>package</code><code>=</code><code>"com.medical.server.dao"</code><code>></code>
<code> </code><code><</code><code>class</code> <code>name</code><code>=</code><code>"UserDAO"</code> <code>table</code><code>=</code><code>"usertable"</code><code>></code>
<code> </code><code><</code><code>id</code> <code>name</code><code>=</code><code>"userId"</code> <code>column</code><code>=</code><code>"userId"</code> <code>type</code><code>=</code><code>"string"</code> <code>/></code>
<code> </code><code><</code><code>property</code> <code>name</code><code>=</code><code>"userAuth"</code> <code>column</code><code>=</code><code>"userAuth"</code> <code>/></code>
<code> </code><code><</code><code>property</code> <code>name</code><code>=</code><code>"userSign"</code> <code>column</code><code>=</code><code>"userSign"</code> <code>/></code>
<code> </code><code><</code><code>property</code> <code>name</code><code>=</code><code>"iconPath"</code> <code>column</code><code>=</code><code>"iconPath"</code> <code>/></code>
<code> </code><code><</code><code>property</code> <code>name</code><code>=</code><code>"score"</code> <code>column</code><code>=</code><code>"score"</code> <code>/></code>
<code> </code><code></</code><code>class</code><code>></code>
<code></</code><code>hibernate-mapping</code><code>></code>
(2)級别對應的Hibernate配置檔案:level.hbm.xml
<code> </code><code><</code><code>class</code> <code>name</code><code>=</code><code>"LevelDAO"</code> <code>table</code><code>=</code><code>"leveltable"</code><code>></code>
<code> </code><code><</code><code>id</code> <code>name</code><code>=</code><code>"levelId"</code> <code>column</code><code>=</code><code>"levelId"</code> <code>type</code><code>=</code><code>"int"</code><code>></code>
<code> </code><code><</code><code>generator</code> <code>class</code><code>=</code><code>"increment"</code><code>></</code><code>generator</code><code>></code>
<code> </code><code></</code><code>id</code><code>></code>
<code> </code><code><</code><code>property</code> <code>name</code><code>=</code><code>"levelName"</code> <code>column</code><code>=</code><code>"levelName"</code> <code>/></code>
<code> </code><code><</code><code>property</code> <code>name</code><code>=</code><code>"scoreLimit"</code> <code>column</code><code>=</code><code>"scoreLimit"</code> <code>/></code>
(3)使用者收藏表對應的Hibernate配置檔案:favorite.hbm.xml
<code> </code><code><</code><code>class</code> <code>name</code><code>=</code><code>"FavoriteDAO"</code> <code>table</code><code>=</code><code>"favoritetable"</code><code>></code>
<code> </code><code><</code><code>id</code> <code>name</code><code>=</code><code>"favoriteId"</code> <code>column</code><code>=</code><code>"favoriteId"</code> <code>type</code><code>=</code><code>"int"</code><code>></code>
<code> </code><code><</code><code>property</code> <code>name</code><code>=</code><code>"userId"</code> <code>column</code><code>=</code><code>"userId"</code> <code>/></code>
<code> </code><code><</code><code>property</code> <code>name</code><code>=</code><code>"topicId"</code> <code>column</code><code>=</code><code>"topicId"</code> <code>/></code>
<code> </code><code><</code><code>property</code> <code>name</code><code>=</code><code>"favoriteTime"</code> <code>column</code><code>=</code><code>"favoriteTime"</code> <code>/></code>
(4)使用者關注表對應的Hibernate配置檔案:follow.hbm.xml
<code><?xml version=</code><code>"1.0"</code> <code>encoding=</code><code>"utf-8"</code><code>?> </code>
<code> </code><code>"-//Hibernate/Hibernate Mapping DTD 3.0//EN"</code>
<code> </code><code>"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"</code><code>> </code>
<code><hibernate-mapping </code><code>package</code><code>=</code><code>"com.medical.server.dao"</code><code>></code>
<code> </code><code><</code><code>class</code> <code>name=</code><code>"FollowDAO"</code> <code>table=</code><code>"followtable"</code><code>></code>
<code> </code><code><id name=</code><code>"followId"</code> <code>column=</code><code>"followId"</code> <code>type=</code><code>"int"</code><code>></code>
<code> </code><code><generator </code><code>class</code><code>=</code><code>"increment"</code><code>></generator></code>
<code> </code><code></id></code>
<code> </code><code><property name=</code><code>"userId"</code> <code>column=</code><code>"userId"</code> <code>/></code>
<code> </code><code><property name=</code><code>"followKind"</code> <code>column=</code><code>"followKind"</code> <code>/></code>
<code> </code><code><property name=</code><code>"beFollowId"</code> <code>column=</code><code>"beFollowId"</code> <code>/></code>
<code> </code><code><property name=</code><code>"followTime"</code> <code>column=</code><code>"followTime"</code> <code>/></code>
<code></hibernate-mapping></code>
(5)重命名話題表對應的Hibernate配置檔案challenge.hbm.xml為topic.hbm.xml,同時修改裡面内容
<code> </code><code><</code><code>class</code> <code>name</code><code>=</code><code>"TopicDAO"</code> <code>table</code><code>=</code><code>"topictable"</code><code>></code>
<code> </code><code><</code><code>id</code> <code>name</code><code>=</code><code>"topicId"</code> <code>column</code><code>=</code><code>"topicId"</code> <code>type</code><code>=</code><code>"string"</code><code>></code>
<code> </code><code><</code><code>generator</code> <code>class</code><code>=</code><code>"uuid.hex"</code><code>></</code><code>generator</code><code>></code>
<code> </code><code><</code><code>property</code> <code>name</code><code>=</code><code>"topicTitle"</code> <code>column</code><code>=</code><code>"topicTitle"</code> <code>/></code>
<code> </code><code><</code><code>property</code> <code>name</code><code>=</code><code>"depId"</code> <code>column</code><code>=</code><code>"depId"</code> <code>/></code>
<code> </code><code><</code><code>property</code> <code>name</code><code>=</code><code>"prescript"</code> <code>column</code><code>=</code><code>"prescript"</code> <code>/></code>
<code> </code><code><</code><code>property</code> <code>name</code><code>=</code><code>"challengers"</code> <code>column</code><code>=</code><code>"challengers"</code> <code>/></code>
<code> </code><code><</code><code>property</code> <code>name</code><code>=</code><code>"browseNum"</code> <code>column</code><code>=</code><code>"browseNum"</code> <code>/></code>
<code> </code><code><</code><code>property</code> <code>name</code><code>=</code><code>"topicTime"</code> <code>column</code><code>=</code><code>"topicTime"</code> <code>/></code>
(6)重命名話題科室表對應的Hibernate配置檔案depart.hbm.xml為department.hbm.xml
<code> </code><code><</code><code>class</code> <code>name=</code><code>"DepartmentDAO"</code> <code>table=</code><code>"departmenttable"</code><code>></code>
<code> </code><code><id name=</code><code>"depId"</code> <code>column=</code><code>"depId"</code> <code>type=</code><code>"int"</code><code>></code>
<code> </code><code><property name=</code><code>"depName"</code> <code>column=</code><code>"depName"</code> <code>/></code>
(7)話題評論表對應的Hibernate配置檔案:comment.hbm.xml
<code> </code><code><</code><code>class</code> <code>name</code><code>=</code><code>"CommentDAO"</code> <code>table</code><code>=</code><code>"commentment"</code><code>></code>
<code> </code><code><</code><code>id</code> <code>name</code><code>=</code><code>"commentId"</code> <code>column</code><code>=</code><code>"commentId"</code> <code>type</code><code>=</code><code>"string"</code><code>></code>
<code> </code><code><</code><code>property</code> <code>name</code><code>=</code><code>"commentInfo"</code> <code>column</code><code>=</code><code>"commentInfo"</code> <code>/></code>
<code> </code><code><</code><code>property</code> <code>name</code><code>=</code><code>"commentUser"</code> <code>column</code><code>=</code><code>"commentUser"</code> <code>/></code>
<code> </code><code><</code><code>property</code> <code>name</code><code>=</code><code>"commentTime"</code> <code>column</code><code>=</code><code>"commentTime"</code> <code>/></code>
(8)話題消息表對應的Hibernate配置檔案:message.hbm.xml
<code> </code><code><</code><code>class</code> <code>name</code><code>=</code><code>"MessageDAO"</code> <code>table</code><code>=</code><code>"messagetable"</code><code>></code>
<code> </code><code><</code><code>id</code> <code>name</code><code>=</code><code>"messageId"</code> <code>column</code><code>=</code><code>"messageId"</code> <code>type</code><code>=</code><code>"int"</code><code>></code>
<code> </code><code><</code><code>property</code> <code>name</code><code>=</code><code>"fromUserId"</code> <code>column</code><code>=</code><code>"fromUserId"</code> <code>/></code>
<code> </code><code><</code><code>property</code> <code>name</code><code>=</code><code>"messageInfo"</code> <code>column</code><code>=</code><code>"messageInfo"</code> <code>/></code>
<code> </code><code><</code><code>property</code> <code>name</code><code>=</code><code>"messageTime"</code> <code>column</code><code>=</code><code>"messageTime"</code> <code>/></code>
5、在UserUtil增加updateUserScore()方法,用于更新使用者級别分數
<code>/**</code>
<code> </code><code>* 更新使用者積分</code>
<code> </code><code>*/</code>
<code>public</code> <code>static</code> <code>void</code> <code>updateUserScore(String userName)</code>
<code> </code><code>UserDAO userDao = getUserByName(userName);</code>
<code> </code><code>if</code><code>(userDao != </code><code>null</code><code>)</code>
<code> </code><code>{</code>
<code> </code><code>userDao.setScore(userDao.getScore() + </code><code>5</code><code>);</code>
<code> </code><code>}</code>
<code> </code><code>Session session = FrameDBUtil.openSession();</code>
<code> </code><code>Transaction transaction = session.beginTransaction();</code>
<code> </code><code>session.update(userDao);</code>
<code> </code><code>transaction.commit();</code>
<code> </code><code>FrameDBUtil.closeSession();</code>
6、修改TopicUtil的insertChallenge()方法,增加話題釋出時間
<code> </code><code>* 把挑戰書記錄入庫</code>
<code>public</code> <code>static</code> <code>void</code> <code>insertChallenge(String userId, String title, </code><code>int</code> <code>depId, String prescript, String challengers)</code>
<code> </code><code>TopicDAO topicDao = </code><code>new</code> <code>TopicDAO();</code>
<code> </code><code>topicDao.setChallengers(challengers);</code>
<code> </code><code>topicDao.setDepId(depId);</code>
<code> </code><code>topicDao.setPrescript(prescript);</code>
<code> </code><code>topicDao.setTopicTitle(title);</code>
<code> </code><code>topicDao.setUserId(userId);</code>
<code> </code><code>topicDao.setTopicTime(FrameUtil.getCurrentDate());</code>
<code> </code><code>session.save(topicDao);</code>
【備注】:在FrameUtil中增加了getCurrentDate()方法,讀者可以在附件中檢視
7、修改PublishChallengeAction邏輯,在發表挑戰時對使用者增加積分
<code>// 擷取挑戰藥方内容、挑戰人</code>
<code>String prescript = getParameter(</code><code>"prescript"</code><code>);</code>
<code>String challengers = getParameter(</code><code>"challengers"</code><code>);</code>
<code>// 寫入資料庫</code>
<code>TopicUtil.insertChallenge(loginUser.getUserId(), title, depId, prescript, challengers);</code>
<code>UserUtil.updateUserScore(loginUser.getUserId())</code>
<a href="http://down.51cto.com/data/2364795" target="_blank">附件:http://down.51cto.com/data/2364795</a>
本文轉自qingkechina 51CTO部落格,原文連結:http://blog.51cto.com/qingkechina/1543919,如需轉載請自行聯系原作者