使用 Spring + SpringMVC + Hibernate 搭建简易论坛(二)数据库、dao层、pojo类配置

二、数据库、dao层、pojo类配置

1、数据库配置

本项目的目标是搭建一个简易论坛,基本功能包含注册、登陆、发帖、评论,进阶功能包含收藏和订阅,因此数据库中应当包含如下这些表:

(1)user表(用户表):

<1>userID(用户ID,INT型,设置为主键,不能为空,自动增长)
<2>password(密码,VARCHAR型,不能为空)
<3>username(用户名,VARCHAR型,不能为空)

(2)note表(帖子表):

<1>noteID(帖子ID,INT型,设置为主键,不能为空,自动增长)
<2>noteTitle(帖子标题,VARCHAR型,不能为空)
<3>noteContent(帖子内容,VARCHAR型,不能为空)
<4>time(发帖时间,TIMESTAMP型,不能为空)
<5>userID(发帖用户ID,INT型,不能为空)
<6>FK_note_user(与user表的多对一外键,级联删除,禁止修改)

(3)comment表(评论表):

<1>commentID(评论ID,INT型,设置为主键,不能为空,自动增长)
<2>content(评论内容,VARCHAR型,不能为空)
<3>time(评论时间,TIMESTAMP型,不能为空)
<4>userID(评论用户ID,INT型,不能为空)
<5>noteID(帖子ID,INT型,不能为空)
<6>replyID(所回复的评论ID,INT型)
<7>FK_comment_user(与user表的多对一外键,级联删除,禁止修改)
<8>FK_comment_note(与note表的多对一外键,级联删除,禁止修改)

(4)collection表(收藏表):

<1>collectionID(收藏ID,INT型,设置为主键,不能为空,自动增长)
<2>userID(收藏用户ID,INT型,不能为空)
<3>noteID(收藏帖子ID,INT型,不能为空)
<4>FK_collection_user(与user表的多对一外键,级联删除,禁止修改)
<5>FK_collection_note(与note表的多对一外键,级联删除,禁止修改)

SQL语句:

-- MySQL Workbench Forward Engineering

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';

-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
-- -----------------------------------------------------
-- Schema bbs
-- -----------------------------------------------------

-- -----------------------------------------------------
-- Schema bbs
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `bbs` DEFAULT CHARACTER SET utf8 ;
USE `bbs` ;

-- -----------------------------------------------------
-- Table `bbs`.`user`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `bbs`.`user` (
  `userID` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `password` VARCHAR(10) NOT NULL,
  `username` VARCHAR(50) NOT NULL,
  PRIMARY KEY (`userID`))
ENGINE = InnoDB
AUTO_INCREMENT = 21
DEFAULT CHARACTER SET = utf8;


-- -----------------------------------------------------
-- Table `bbs`.`note`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `bbs`.`note` (
  `noteID` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `userID` INT(10) UNSIGNED NOT NULL,
  `noteTitle` VARCHAR(45) NOT NULL,
  `noteContent` VARCHAR(100) NOT NULL,
  `time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`noteID`),
  INDEX `FK_note_user` (`userID` ASC),
  CONSTRAINT `FK_note_user`
    FOREIGN KEY (`userID`)
    REFERENCES `bbs`.`user` (`userID`)
    ON DELETE CASCADE)
ENGINE = InnoDB
AUTO_INCREMENT = 9
DEFAULT CHARACTER SET = utf8;


-- -----------------------------------------------------
-- Table `bbs`.`collection`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `bbs`.`collection` (
  `userID` INT(10) UNSIGNED NOT NULL,
  `noteID` INT(10) UNSIGNED NOT NULL,
  `collectionID` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`collectionID`),
  INDEX `FK_collection_user_idx` (`userID` ASC),
  INDEX `FK_collection_note_idx` (`noteID` ASC),
  CONSTRAINT `FK_collection_note`
    FOREIGN KEY (`noteID`)
    REFERENCES `bbs`.`note` (`noteID`)
    ON DELETE CASCADE,
  CONSTRAINT `FK_collection_user`
    FOREIGN KEY (`userID`)
    REFERENCES `bbs`.`user` (`userID`)
    ON DELETE CASCADE)
ENGINE = InnoDB
AUTO_INCREMENT = 31
DEFAULT CHARACTER SET = utf8;


-- -----------------------------------------------------
-- Table `bbs`.`comment`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `bbs`.`comment` (
  `commentID` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `userID` INT(10) UNSIGNED NOT NULL,
  `noteID` INT(10) UNSIGNED NOT NULL,
  `content` VARCHAR(100) NOT NULL,
  `time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `replyID` INT(10) NULL DEFAULT NULL,
  PRIMARY KEY (`commentID`),
  INDEX `FK_comment_user_idx` (`userID` ASC),
  INDEX `FK_comment_note_idx` (`noteID` ASC),
  CONSTRAINT `FK_comment_note`
    FOREIGN KEY (`noteID`)
    REFERENCES `bbs`.`note` (`noteID`)
    ON DELETE CASCADE,
  CONSTRAINT `FK_comment_user`
    FOREIGN KEY (`userID`)
    REFERENCES `bbs`.`user` (`userID`)
    ON DELETE CASCADE)
ENGINE = InnoDB
AUTO_INCREMENT = 29
DEFAULT CHARACTER SET = utf8;


-- -----------------------------------------------------
-- Table `bbs`.`subscription`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `bbs`.`subscription` (
  `userID` INT(10) UNSIGNED NOT NULL,
  `subuserID` INT(10) UNSIGNED NOT NULL,
  `subscriptionID` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`subscriptionID`),
  INDEX `FK_subscription_user_idx` (`userID` ASC),
  INDEX `FK_subscription_subuser_idx` (`subuserID` ASC),
  CONSTRAINT `FK_subscription_subuser`
    FOREIGN KEY (`subuserID`)
    REFERENCES `bbs`.`user` (`userID`)
    ON DELETE CASCADE,
  CONSTRAINT `FK_subscription_user`
    FOREIGN KEY (`userID`)
    REFERENCES `bbs`.`user` (`userID`)
    ON DELETE CASCADE)
ENGINE = InnoDB
AUTO_INCREMENT = 13
DEFAULT CHARACTER SET = utf8;


SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

2、dao层、pojo类配置

(1)在DB Browse中选择自己要使用的表,右键选择Hibernate Reverse Engineering

(2)按照下图所示进行配置后点击finish生成dao层、pojo类

(3)在applicationContext.xml中名为seesionfactory的bean中添加mappingResources属性,代码如下:

<property name="mappingResources">
    <list>
        <value>com/sxy/pojo/Comment.hbm.xml</value>
        <value>com/sxy/pojo/Note.hbm.xml</value>
        <value>com/sxy/pojo/User.hbm.xml</value>
        <value>com/sxy/pojo/Collection.hbm.xml</value>
        <value>com/sxy/pojo/Subscription.hbm.xml</value>
    </list>
</property>

(4)在每个表的配置文件(.hbm.xml)中对多对一外键(many-to-one)的属性进行如下配置:

lazy="false" fetch="join"

激活外连接查询并关闭延迟加载

(5)已生成的dao层和pojo类以及.hbm.xml配置文件如下图所示:

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350

推荐阅读更多精彩内容