JavaWeb學習入門之——圖書館管理系統開發(Hibernate學習1)

来源:http://www.cnblogs.com/shuaiweb/archive/2017/06/12/6995034.html
-Advertisement-
Play Games

最近看了看JavaWeb的書籍,才感覺到大二時候學的JavaWeb才僅僅只是個入門。最尷尬的當初還沒咋學一直在看.NET,現在看起來JavaWeb,各種框架各種頭疼啊。看了幾個例子之後覺得,還是自己動手做個項目試試。邊做邊學才能學的快一點。做的時候用博客園記錄下過程,省得以後忘。之所以選圖書館管理系 ...


最近看了看JavaWeb的書籍,才感覺到大二時候學的JavaWeb才僅僅只是個入門。最尷尬的當初還沒咋學一直在看.NET,現在看起來JavaWeb,各種框架各種頭疼啊。看了幾個例子之後覺得,還是自己動手做個項目試試。邊做邊學才能學的快一點。做的時候用博客園記錄下過程,省得以後忘。之所以選圖書館管理系統呢,是因為做過幾個課程設計。對它的需求還是比較瞭解一點。現在通用的框架模式都是MVC,我在學的時候想先從Model層開始學。於是就先選Hibernate開始。

一、資料庫

     先簡單設計幾張表,圖書表,讀者,管理員,借閱記錄表。以下是建表的語句

 1 /*
 2 Navicat MySQL Data Transfer
 3 
 4 Source Server         : root
 5 Source Server Version : 50513
 6 Source Host           : localhost:3306
 7 Source Database       : db_librarysystem
 8 
 9 Target Server Type    : MYSQL
10 Target Server Version : 50513
11 File Encoding         : 65001
12 
13 Date: 2017-06-11 13:00:32
14 */
15 
16 SET FOREIGN_KEY_CHECKS=0;
17 
18 -- ----------------------------
19 -- Table structure for tb_administrator
20 -- ----------------------------
21 DROP TABLE IF EXISTS `tb_administrator`;
22 CREATE TABLE `tb_administrator` (
23   `adminid` int(11) NOT NULL,
24   `name` varchar(20) NOT NULL COMMENT '管理員登錄名',
25   `pwd` varchar(15) NOT NULL COMMENT '密碼',
26   `createdate` varchar(50) NOT NULL COMMENT '管理員創建時間',
27   PRIMARY KEY (`adminid`)
28 ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
29 
30 -- ----------------------------
31 -- Records of tb_administrator
32 -- ----------------------------
33 
34 -- ----------------------------
35 -- Table structure for tb_book
36 -- ----------------------------
37 DROP TABLE IF EXISTS `tb_book`;
38 CREATE TABLE `tb_book` (
39   `bid` int(11) NOT NULL COMMENT '圖書編號',
40   `name` varchar(50) NOT NULL COMMENT '書名',
41   `ISBN` varchar(20) NOT NULL,
42   `author` varchar(20) NOT NULL COMMENT '圖書作者',
43   `Publisher` varchar(50) NOT NULL COMMENT '圖書出版社',
44   `BType` varchar(20) NOT NULL COMMENT '圖書類型',
45   `BPrice` decimal(10,0) NOT NULL COMMENT '圖書價格',
46   `BCount` int(11) NOT NULL COMMENT '圖書總數',
47   `Bstate` varchar(20) NOT NULL COMMENT '圖書狀態(在架,已外借,丟失)',
48   PRIMARY KEY (`bid`)
49 ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
50 
51 -- ----------------------------
52 -- Records of tb_book
53 -- ----------------------------
54 
55 -- ----------------------------
56 -- Table structure for tb_borrow
57 -- ----------------------------
58 DROP TABLE IF EXISTS `tb_borrow`;
59 CREATE TABLE `tb_borrow` (
60   `borrowid` int(11) NOT NULL,
61   `rid` int(11) NOT NULL,
62   `bid` int(11) NOT NULL,
63   `BorrwTime` varchar(50) NOT NULL COMMENT '借書時間',
64   `ReturnTime` varchar(50) DEFAULT NULL COMMENT '還書時間',
65   `ISReturn` varchar(5) NOT NULL COMMENT '是否歸還',
66   `NoReturn` varchar(5) DEFAULT NULL COMMENT '歸還異常',
67   PRIMARY KEY (`borrowid`),
68   KEY `borrow_bid` (`bid`),
69   KEY `borrow_rid` (`rid`),
70   CONSTRAINT `borrow_bid` FOREIGN KEY (`bid`) REFERENCES `tb_book` (`bid`) ON DELETE CASCADE ON UPDATE CASCADE,
71   CONSTRAINT `borrow_rid` FOREIGN KEY (`rid`) REFERENCES `tb_reader` (`rid`) ON DELETE CASCADE ON UPDATE CASCADE
72 ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
73 
74 -- ----------------------------
75 -- Records of tb_borrow
76 -- ----------------------------
77 
78 -- ----------------------------
79 -- Table structure for tb_reader
80 -- ----------------------------
81 DROP TABLE IF EXISTS `tb_reader`;
82 CREATE TABLE `tb_reader` (
83   `rid` int(11) NOT NULL AUTO_INCREMENT COMMENT '讀者編號',
84   `name` varchar(20) NOT NULL DEFAULT '' COMMENT '讀者姓名',
85   `sex` varchar(2) NOT NULL DEFAULT '' COMMENT '性別',
86   `idcard` varchar(11) NOT NULL DEFAULT '' COMMENT '證件號',
87   `rmoney` double NOT NULL DEFAULT '0' COMMENT '欠費金額',
88   `rstate` varchar(10) NOT NULL DEFAULT '' COMMENT '讀者狀態',
89   `rcount` int(11) NOT NULL DEFAULT '3' COMMENT '可借閱數',
90   `pwd` varchar(15) NOT NULL DEFAULT '123456' COMMENT '登陸密碼',
91   PRIMARY KEY (`rid`)
92 ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
93 
94 -- ----------------------------
95 -- Records of tb_reader
96 -- ----------------------------
資料庫建表語句

 

二、搭建Hibernate環境

     1.先用MyEclipse建立一個名為LibrarySystem的Web項目。然後讓項目的字元編碼設置為UTF-8(這一步我老是忘,結果後面出現中文亂碼了才想起來)。

        

 

        2.引入Hibernate所需要的包

               

       3.引入Hibernate配置文件(放到src目錄下)

 1 <?xml version='1.0' encoding='UTF-8'?>
 2 <!DOCTYPE hibernate-configuration PUBLIC
 3           "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 4           "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
 5 <!-- Generated by MyEclipse Hibernate Tools.                   -->
 6 <hibernate-configuration>
 7 
 8     <session-factory>
 9         <!-- 方言 -->
10         <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
11         <!-- 資料庫連接 -->
12         <property name="connection.url">jdbc:mysql://localhost:3306/db_LibrarySystem</property>
13         <!-- 資料庫連接用戶名 -->
14         <property name="connection.username">root</property>
15         <!-- 資料庫連接密碼 -->
16         <property name="connection.password">sasasa</property>
17         <!-- 資料庫驅動 -->
18         <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
19         <!-- 列印SQL語句 -->
20         <property name="show_sql">true</property>
21         <!-- 自動建表 -->
22         <property name="hbm2ddl.auto">update</property>
23         <!-- 映射文件 -->
24         <mapping resource="com/lby/entity/Reader.hbm.xml" />
25         <mapping resource="com/lby/entity/Borrow.hbm.xml" />
26         <mapping resource="com/lby/entity/Administrator.hbm.xml" />
27         <mapping resource="com/lby/entity/Book.hbm.xml" />
28     </session-factory>
29 
30 </hibernate-configuration>
hibernate.cfg.xml

       4.建立項目的包結構

         

三、創建實體類

      說起創建實體類,剛開始我還不知MyEclipse有自動生成Get,Set方法的快捷方式。我開始還一個一個大,後來感覺累了去網上搜一下才發現真有。以前不知道真是悲催。

      自動生成Get,Set方法,在代碼界面上右擊彈出菜單里選source->Generate Getters and Setters

      

      選中要生成的變數,點擊OK就生成了。

     

 1 package com.lby.entity;
 2 
 3 /**
 4  * @author Administrator
 5  *
 6  */
 7 public class AdministratorInfo {
 8     private Integer adminid;//管理員編號
 9     private String name;//管理員姓名
10     private String pwd;//登錄密碼
11     private String createdate;//創建時間
12     public Integer getAdminid() {
13         return adminid;
14     }
15     public void setAdminid(Integer adminid) {
16         this.adminid = adminid;
17     }
18     public String getName() {
19         return name;
20     }
21     public void setName(String name) {
22         this.name = name;
23     }
24     public String getPwd() {
25         return pwd;
26     }
27     public void setPwd(String pwd) {
28         this.pwd = pwd;
29     }
30     public String getCreatedate() {
31         return createdate;
32     }
33     public void setCreatedate(String createdate) {
34         this.createdate = createdate;
35     }
36     
37 }
AdministratorInfo
 1 package com.lby.entity;
 2 
 3 public class BookInfo {
 4     private Integer bid;//圖書編號
 5     private String  name;//書名
 6     private String  isbn;//索書號
 7     private String  author;//作者
 8     private String  publisher;//出版社
 9     private String  btype;//圖書類型
10     private Double  bprice;//圖書價格
11     private Integer bcount;//圖書數量
12     private String  bstate;//圖書狀態
13     public Integer getBid() {
14         return bid;
15     }
16     public void setBid(Integer bid) {
17         this.bid = bid;
18     }
19     public String getName() {
20         return name;
21     }
22     public void setName(String name) {
23         this.name = name;
24     }
25     public String getIsbn() {
26         return isbn;
27     }
28     public void setIsbn(String isbn) {
29         this.isbn = isbn;
30     }
31     public String getAuthor() {
32         return author;
33     }
34     public void setAuthor(String author) {
35         this.author = author;
36     }
37     public String getPublisher() {
38         return publisher;
39     }
40     public void setPublisher(String publisher) {
41         this.publisher = publisher;
42     }
43     public String getBtype() {
44         return btype;
45     }
46     public void setBtype(String btype) {
47         this.btype = btype;
48     }
49     public Double getBprice() {
50         return bprice;
51     }
52     public void setBprice(Double bprice) {
53         this.bprice = bprice;
54     }
55     public Integer getBcount() {
56         return bcount;
57     }
58     public void setBcount(Integer bcount) {
59         this.bcount = bcount;
60     }
61     public String getBstate() {
62         return bstate;
63     }
64     public void setBstate(String bstate) {
65         this.bstate = bstate;
66     }
67     
68 }
BookInfo
 1 package com.lby.entity;
 2 
 3 public class BorrowInfo {
 4     private Integer borrowid;//借閱編號
 5     private Integer rid;//讀者編號
 6     private Integer bid;//圖書編號
 7     private String borrwTime;//借書時間
 8     private String returnTime;//還書時間
 9     private String isreturn;//是否歸還
10     private String noReturn;//歸還異常
11     public Integer getBorrowid() {
12         return borrowid;
13     }
14     public void setBorrowid(Integer borrowid) {
15         this.borrowid = borrowid;
16     }
17     public Integer getRid() {
18         return rid;
19     }
20     public void setRid(Integer rid) {
21         this.rid = rid;
22     }
23     public Integer getBid() {
24         return bid;
25     }
26     public void setBid(Integer bid) {
27         this.bid = bid;
28     }
29     public String getBorrwTime() {
30         return borrwTime;
31     }
32     public void setBorrwTime(String borrwTime) {
33         this.borrwTime = borrwTime;
34     }
35     public String getReturnTime() {
36         return returnTime;
37     }
38     public void setReturnTime(String returnTime) {
39         this.returnTime = returnTime;
40     }
41     public String getIsreturn() {
42         return isreturn;
43     }
44     public void setIsreturn(String isreturn) {
45         this.isreturn = isreturn;
46     }
47     public String getNoReturn() {
48         return noReturn;
49     }
50     public void setNoReturn(String noReturn) {
51         this.noReturn = noReturn;
52     }
53     
54 }
BorrowInfo
 1 package com.lby.entity;
 2 
 3 public class ReaderInfo {
 4     private Integer rid;//讀者編號
 5     private String name;//讀者姓名
 6     private String sex;//性別
 7     private String idcard;//證件號
 8     private Double rmoney;//欠費金額
 9     private String rstate;//讀者狀態
10     private String rcount;//可借閱數
11     private String pwd;//登錄密碼
12     
13     public Integer getRid() {
14         return rid;
15     }
16     public void setRid(Integer rid) {
17         this.rid = rid;
18     }
19     public String getName() {
20         return name;
21     }
22     public void setName(String name) {
23         this.name = name;
24     }
25     public String getSex()
26     {
27         return sex;
28     }
29     public void setSex(String sex)
30     {
31         this.sex=sex;
32     }
33     public String getIdcard()
34     {
35         return idcard;
36     }
37     public void setIdcard(String idcard)
38     {
39         this.idcard=idcard;
40     }
41     public Double getRmoney()
42     {
43         return rmoney;
44     }
45     public void setRmoney(Double rmoney)
46     {
47         this.rmoney=rmoney;
48     }
49     public String getRstate()
50     {
51         return rstate;
52     }
53     public void setRstate(String rstate)
54     {
55         this.rstate =rstate;
56     }
57     public String getRcount()
58     {
59         return rcount;
60     }
61     public void setRcount(String rcount)
62     {
63         this.rcount =rcount;
64     }
65     public String getPwd()
66     {
67         return pwd;
68     }
69     public void setPwd(String pwd)
70     {
71         this.pwd=pwd;
72     }
73 }
ReaderInfo

     今天先寫這麼多,由於是剛學。不敢保證這樣做就一定正確,大家僅作參考就行了。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • [TOC] 詞性標註器 之後的很多工作都需要標註完的辭彙。nltk自帶英文標註器 標註語料庫 表示已經標註的標識符: 讀取已經標註的語料庫 nltk語料庫ue肚臍提供了統一介面,可以不必理會不同的文件格式。格式: 。參數可以指定categories和fields 名詞、動詞、形容詞等 這裡以名詞為例 ...
  • MyBatis緩存 我們知道,頻繁的資料庫操作是非常耗費性能的(主要是因為對於DB而言,數據是持久化在磁碟中的,因此查詢操作需要通過IO,IO操作速度相比記憶體操作速度慢了好幾個量級),尤其是對於一些相同的查詢語句,完全可以把查詢結果存儲起來,下次查詢同樣的內容的時候直接從記憶體中獲取數據即可,這樣在某 ...
  • 第一節 Python文件類型 源代碼 Python源代碼的文件以“py”為擴展名,由Python程式解釋,不需要編譯 位元組代碼 Python源文件經編譯後生成的擴展名為“pyc”的文件 編譯方法 優化代碼 經過優化的源文件,擴展名為“.pyo” 以上三種均可直接運行 第二節 Python變數 變數的 ...
  • 繼承定義一個類B時,發現已有類A與要定義的類B相似,並且類B屬於類A的一種時,可以將類B定義為類A的子類。 當多個類有著共性內容,可以將共性內容向上抽取,抽取到一個新的類中,這個新類和多個類形成一個關係叫做繼承。 子類繼承父類後,自動擁有父類所有可繼承的屬性和功能。 註意事項 java只支持單繼承, ...
  • 基本語法 shell的if語法和C語言等高級語言非常相似,唯一需要註意的地方就是shell的if語句對空格方面的要求比較嚴格(其實shell對所有語法的空格使用都比較嚴格),如果在需要空格的地方沒有打上空格,都會報錯。如if [ $1x == "ip"x ];then echo "abc";fi中少 ...
  • 今天上午找資料,發現了mongodb,閑來無事就研究了下,本人用的是phpstudy集成包添加mongodb擴展。 1.添加mongo、mongodb擴展 phpstudy集成環境一般用的是32位php,去官網下載32位的mongo、mongodb擴展 mongo:http://pecl.php.n ...
  • 期末複習比較忙過段時間來專門寫scrapy框架使用,今天介紹如何用python生成詞雲,雖然網上有很多詞雲生成工具,不過自己用python來寫是不是更有成就感。 今天要生成的是勵志歌曲的詞雲,百度文庫裡面找了20來首,如《倔強》,海闊天空是,什麼的大家熟悉的。 所要用到的python庫有 jieba ...
  • 鍵盤錄入(Java): 1.導包 格式 import java.util.Scanner; 位置 在class上面 2.創建鍵盤錄入對象 格式 Scanner sc = new Scanner(System.in); 3.通過對象獲取數據 格式 int x = sc.nextInt(); impor ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...