天天看點

【鬥醫】【17】Web應用開發20天

    細心的讀者可能已發現“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&amp;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&amp;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>&lt;?</code><code>xml</code> <code>version</code><code>=</code><code>"1.0"</code> <code>encoding</code><code>=</code><code>"utf-8"</code><code>?&gt;  </code>

<code>&lt;!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"&gt;  </code>

<code>  </code> 

<code>&lt;</code><code>hibernate-mapping</code> <code>package</code><code>=</code><code>"com.medical.server.dao"</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>class</code> <code>name</code><code>=</code><code>"UserDAO"</code> <code>table</code><code>=</code><code>"usertable"</code><code>&gt;</code>

<code>        </code><code>&lt;</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>/&gt;</code>

<code>        </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"userAuth"</code> <code>column</code><code>=</code><code>"userAuth"</code> <code>/&gt;</code>

<code>        </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"userSign"</code> <code>column</code><code>=</code><code>"userSign"</code> <code>/&gt;</code>

<code>        </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"iconPath"</code> <code>column</code><code>=</code><code>"iconPath"</code> <code>/&gt;</code>

<code>        </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"score"</code> <code>column</code><code>=</code><code>"score"</code> <code>/&gt;</code>

<code>    </code><code>&lt;/</code><code>class</code><code>&gt;</code>

<code>&lt;/</code><code>hibernate-mapping</code><code>&gt;</code>

(2)級别對應的Hibernate配置檔案:level.hbm.xml

<code>    </code><code>&lt;</code><code>class</code> <code>name</code><code>=</code><code>"LevelDAO"</code> <code>table</code><code>=</code><code>"leveltable"</code><code>&gt;</code>

<code>        </code><code>&lt;</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>&gt;</code>

<code>            </code><code>&lt;</code><code>generator</code> <code>class</code><code>=</code><code>"increment"</code><code>&gt;&lt;/</code><code>generator</code><code>&gt;</code>

<code>        </code><code>&lt;/</code><code>id</code><code>&gt;</code>

<code>        </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"levelName"</code> <code>column</code><code>=</code><code>"levelName"</code> <code>/&gt;</code>

<code>        </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"scoreLimit"</code> <code>column</code><code>=</code><code>"scoreLimit"</code> <code>/&gt;</code>

(3)使用者收藏表對應的Hibernate配置檔案:favorite.hbm.xml

<code>    </code><code>&lt;</code><code>class</code> <code>name</code><code>=</code><code>"FavoriteDAO"</code> <code>table</code><code>=</code><code>"favoritetable"</code><code>&gt;</code>

<code>        </code><code>&lt;</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>&gt;</code>

<code>        </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"userId"</code> <code>column</code><code>=</code><code>"userId"</code> <code>/&gt;</code>

<code>        </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"topicId"</code> <code>column</code><code>=</code><code>"topicId"</code> <code>/&gt;</code>

<code>        </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"favoriteTime"</code> <code>column</code><code>=</code><code>"favoriteTime"</code> <code>/&gt;</code>

(4)使用者關注表對應的Hibernate配置檔案:follow.hbm.xml

<code>&lt;?xml version=</code><code>"1.0"</code> <code>encoding=</code><code>"utf-8"</code><code>?&gt;  </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>&gt;  </code>

<code>&lt;hibernate-mapping </code><code>package</code><code>=</code><code>"com.medical.server.dao"</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>class</code> <code>name=</code><code>"FollowDAO"</code> <code>table=</code><code>"followtable"</code><code>&gt;</code>

<code>        </code><code>&lt;id name=</code><code>"followId"</code> <code>column=</code><code>"followId"</code> <code>type=</code><code>"int"</code><code>&gt;</code>

<code>            </code><code>&lt;generator </code><code>class</code><code>=</code><code>"increment"</code><code>&gt;&lt;/generator&gt;</code>

<code>        </code><code>&lt;/id&gt;</code>

<code>        </code><code>&lt;property name=</code><code>"userId"</code> <code>column=</code><code>"userId"</code> <code>/&gt;</code>

<code>        </code><code>&lt;property name=</code><code>"followKind"</code> <code>column=</code><code>"followKind"</code> <code>/&gt;</code>

<code>        </code><code>&lt;property name=</code><code>"beFollowId"</code> <code>column=</code><code>"beFollowId"</code> <code>/&gt;</code>

<code>        </code><code>&lt;property name=</code><code>"followTime"</code> <code>column=</code><code>"followTime"</code> <code>/&gt;</code>

<code>&lt;/hibernate-mapping&gt;</code>

(5)重命名話題表對應的Hibernate配置檔案challenge.hbm.xml為topic.hbm.xml,同時修改裡面内容

<code>    </code><code>&lt;</code><code>class</code> <code>name</code><code>=</code><code>"TopicDAO"</code> <code>table</code><code>=</code><code>"topictable"</code><code>&gt;</code>

<code>        </code><code>&lt;</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>&gt;</code>

<code>            </code><code>&lt;</code><code>generator</code> <code>class</code><code>=</code><code>"uuid.hex"</code><code>&gt;&lt;/</code><code>generator</code><code>&gt;</code>

<code>        </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"topicTitle"</code> <code>column</code><code>=</code><code>"topicTitle"</code> <code>/&gt;</code>

<code>        </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"depId"</code> <code>column</code><code>=</code><code>"depId"</code> <code>/&gt;</code>

<code>        </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"prescript"</code> <code>column</code><code>=</code><code>"prescript"</code> <code>/&gt;</code>

<code>        </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"challengers"</code> <code>column</code><code>=</code><code>"challengers"</code> <code>/&gt;</code>

<code>        </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"browseNum"</code> <code>column</code><code>=</code><code>"browseNum"</code> <code>/&gt;</code>

<code>        </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"topicTime"</code> <code>column</code><code>=</code><code>"topicTime"</code> <code>/&gt;</code>

(6)重命名話題科室表對應的Hibernate配置檔案depart.hbm.xml為department.hbm.xml

<code>    </code><code>&lt;</code><code>class</code> <code>name=</code><code>"DepartmentDAO"</code> <code>table=</code><code>"departmenttable"</code><code>&gt;</code>

<code>        </code><code>&lt;id name=</code><code>"depId"</code> <code>column=</code><code>"depId"</code> <code>type=</code><code>"int"</code><code>&gt;</code>

<code>        </code><code>&lt;property name=</code><code>"depName"</code> <code>column=</code><code>"depName"</code> <code>/&gt;</code>

(7)話題評論表對應的Hibernate配置檔案:comment.hbm.xml

<code>    </code><code>&lt;</code><code>class</code> <code>name</code><code>=</code><code>"CommentDAO"</code> <code>table</code><code>=</code><code>"commentment"</code><code>&gt;</code>

<code>        </code><code>&lt;</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>&gt;</code>

<code>        </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"commentInfo"</code> <code>column</code><code>=</code><code>"commentInfo"</code> <code>/&gt;</code>

<code>        </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"commentUser"</code> <code>column</code><code>=</code><code>"commentUser"</code> <code>/&gt;</code>

<code>        </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"commentTime"</code> <code>column</code><code>=</code><code>"commentTime"</code> <code>/&gt;</code>

(8)話題消息表對應的Hibernate配置檔案:message.hbm.xml

<code>    </code><code>&lt;</code><code>class</code> <code>name</code><code>=</code><code>"MessageDAO"</code> <code>table</code><code>=</code><code>"messagetable"</code><code>&gt;</code>

<code>        </code><code>&lt;</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>&gt;</code>

<code>        </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"fromUserId"</code> <code>column</code><code>=</code><code>"fromUserId"</code> <code>/&gt;</code>

<code>        </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"messageInfo"</code> <code>column</code><code>=</code><code>"messageInfo"</code> <code>/&gt;</code>

<code>        </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"messageTime"</code> <code>column</code><code>=</code><code>"messageTime"</code> <code>/&gt;</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,如需轉載請自行聯系原作者