zoukankan      html  css  js  c++  java
  • 论坛模块_设计及映射本模块的所有实体

    论坛模块_设计本模块的所有实体

    实体有几个,有什么关系,属性:主键、关联关系属性、一般属性、特殊属性(解决某个问题而设计【排序】),最后在看一遍设计的属性能满足这个页面和那个页面吗

    主题数和文章数在Forum实体中新增topicCount和articleCount两个属性发帖删帖对应加1减一,把它当做普通的属性显示就没有效率性能的问题了,因为查询的操作远远多于发删帖,查询的数据很多

    最后发表的主题也在Forum中设计lastTopic属性,只要发新主题了把这个属性改一下

    主题的标题、内容时间、作者。发表时间、主题类型、从父类继承来了

    回复数量、不用关联对象的集合去查,存一个普通的字段replyCount  int型,没发表一次回复加1

    最后回复lastReply的人和时间

    主题列表的顺序?新的在前面

    FROM

      Topic t

    ORDER BY

      if(t.lastReply == null){

        t.postTime

      }else{

        t.lastReply.postTime

      }

    DESC

    ===========================================

    在Topic中新增字段lastUpdateTime  Date类型

    FROM

      Topic t

    ORDER BY

      t.lastUpdateTime DESC

    回复标题、回复内容时间、作者、楼层

    回复楼层?

    回帖的楼层是不能改变的

    因为在发帖时经常会有“对某楼说”的情况,所以回帖的楼层不能改变,否则就会出现一些问题。

    删除回帖的策略与楼层显示的策略

    方式一:

    删除策略:直接删除回复,显示时不显示已删除的回复。

    楼层显示策略:需要记住楼层,可以在Reply实体中增加一个floor属性。

    方式二:

    删除策略:不直接删除回复,而是做一个已删除的标记,显示时还有此楼,不过把内容显示为“此帖已被管理员删除”。

    楼层显示策略:在显示回复列表时实时的计算出楼层。方式为:

    不分页:${status.count}楼

    分页  :${(currentPage - 1) * pageSize + status.count} 楼

    ===========================================

    映射时注意:

    1,content应是text类型。

    2,有一对一的关联关系。(基于主键【id引用id】、基于外键【唯一性约束】)

    3,单向关联。

    4,继承。

    论坛模块_设计及映射实体

    Article.java

    /**
     * 文章
     * @author yejin
     */
    public class Article {
        private Long id;
        private String title;// 标题
        private String content;// 内容
        private Date postTime;// 发表时间
        private User author;// 作者
        private String ipAddr;// 发表文章时所用的IP地址
        public Long getId() {
            return id;
        }
        public void setId(Long id) {
            this.id = id;
        }
        public String getTitle() {
            return title;
        }
        public void setTitle(String title) {
            this.title = title;
        }
        public String getContent() {
            return content;
        }
        public void setContent(String content) {
            this.content = content;
        }
        public Date getPostTime() {
            return postTime;
        }
        public void setPostTime(Date postTime) {
            this.postTime = postTime;
        }
        public User getAuthor() {
            return author;
        }
        public void setAuthor(User author) {
            this.author = author;
        }
        public String getIpAddr() {
            return ipAddr;
        }
        public void setIpAddr(String ipAddr) {
            this.ipAddr = ipAddr;
        }
    }

    Forum.java

    /**
     * 版块
     * @author yejin
     */
    public class Forum {
        private Long id;
        private String name;
        private String Description;
        private int position;    //排序用的位置号
        
        private Set<Topic> topics = new HashSet<Topic>();
        private int topicCount;    //主题数量
        private int articleCount;    //文章数量(主题+回复)
        private Topic lastTopic;    //最后发表的主题
        
        public Set<Topic> getTopics() {
            return topics;
        }
        public void setTopics(Set<Topic> topics) {
            this.topics = topics;
        }
        public int getTopicCount() {
            return topicCount;
        }
        public void setTopicCount(int topicCount) {
            this.topicCount = topicCount;
        }
        public int getArticleCount() {
            return articleCount;
        }
        public void setArticleCount(int articleCount) {
            this.articleCount = articleCount;
        }
        public Topic getLastTopic() {
            return lastTopic;
        }
        public void setLastTopic(Topic lastTopic) {
            this.lastTopic = lastTopic;
        }
        public Long getId() {
            return id;
        }
        public void setId(Long id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getDescription() {
            return Description;
        }
        public void setDescription(String description) {
            Description = description;
        }
        public int getPosition() {
            return position;
        }
        public void setPosition(int position) {
            this.position = position;
        }
    }

    Reply.java

    /**
     * 回复
     * @author yejin
     */
    public class Reply extends Article{
        private Topic topic;// 所属的主题
    
        public Topic getTopic() {
            return topic;
        }
    
        public void setTopic(Topic topic) {
            this.topic = topic;
        }
    }

    Topic.java

    /**
     * 主题
     * @author yejin
     */
    public class Topic extends Article{
        private Forum forum;// 所属版块
        private Set<Reply> replies = new HashSet<Reply>();
        private int type;// 类型
        private int replyCount;// 回复数量
        private Reply lastReply;// 最后回复
        private Date lastUpdateTime;// 最后更新时间(主题发表时间或最后回复的时间)
        
        public Forum getForum() {
            return forum;
        }
        public void setForum(Forum forum) {
            this.forum = forum;
        }
        public Set<Reply> getReplies() {
            return replies;
        }
        public void setReplies(Set<Reply> replies) {
            this.replies = replies;
        }
        public int getType() {
            return type;
        }
        public void setType(int type) {
            this.type = type;
        }
        public int getReplyCount() {
            return replyCount;
        }
        public void setReplyCount(int replyCount) {
            this.replyCount = replyCount;
        }
        public Reply getLastReply() {
            return lastReply;
        }
        public void setLastReply(Reply lastReply) {
            this.lastReply = lastReply;
        }
        public Date getLastUpdateTime() {
            return lastUpdateTime;
        }
        public void setLastUpdateTime(Date lastUpdateTime) {
            this.lastUpdateTime = lastUpdateTime;
        }    
    }

    映射实体

    Forum.hbm.xml

    <hibernate-mapping package="cn.itcast.oa.domain">
        <class name="Forum" table="itcast_forum">
            <id name="id">
                <generator class="native" />
            </id>
            <property name="name"></property>
            <property name="description"></property>
            <property name="position"></property>
            <property name="topicCount"></property>
            <property name="articleCount"></property>
            
            <!-- topics属性,本类与Topic的 一对多-->
            <set name="topics" >
                <key column="forumId"></key>
                <one-to-many class="Topic"/>
            </set>
            
            <!-- lastTopic属性,本类与Topic的一对一,采用基于外键的一对一映射方式,本方有外键 -->
            <many-to-one name="lastTopic" class="Topic" column="lastTopicId" unique="true"></many-to-one>
            
        </class>
    </hibernate-mapping>

    Topic.hbm.xml

    <hibernate-mapping package="cn.itcast.oa.domain">
        <class name="Topic" table="itcast_topic">
            <id name="id">
                <generator class="native" />
            </id>
            <property name="title"></property>
            <property name="content" type="text" length="65536"></property>
            <property name="postTime" type="timestamp"></property>
            <property name="ipAddr"></property>    
            
            <property name="type"></property>
            <property name="replyCount"></property>
            <property name="lastUpdateTime" type="timestamp"></property>
            
            <!-- author属性,本类与User的多对一 -->    
            <many-to-one name="author" class="User" column="authorId"></many-to-one>
            
            <!-- forum属性 ,本类与Forum的多对一-->
            <many-to-one name="forum" class="Forum" column="forumId"></many-to-one>        
            
            
            <!-- replies属性,本类与Reply一对多 -->
            <set name="replies" >
                <key column="topicId"></key>
                <one-to-many class="Reply"/>
            </set>
            
            <!-- lastReply属性,本类与Reply一对一
                采用基于外键的一对一映射,本方有外键
             -->
             <many-to-one name="lastReply" class="Reply" column="lastReplyId" unique="true"></many-to-one>
            
        </class>
    </hibernate-mapping>

    Reply.hbm.xml

    <hibernate-mapping package="cn.itcast.oa.domain">
        <class name="Reply" table="itcast_reply">
            <id name="id">
                <generator class="native" />
            </id>
            <property name="title"></property>
            <property name="content" type="text" length="65536"></property>
            <property name="postTime" type="timestamp"></property>
            <property name="ipAddr"></property>    
            
            <!-- author属性,本类与User的多对一 -->    
            <many-to-one name="author" class="User" column="authorId"></many-to-one>
            
            
            <!-- topic属性,本类与Topic的多对一 -->
            <many-to-one name="topic" class="Topic" column="topicId"></many-to-one>
            
        </class>
    </hibernate-mapping>

    把映射文件加到hibernate.cfg.xml

    运行测试类testSessionFactory()方法,创建表,查看表结构外键是否正确

    public class SpringTest {
        //得到容器对象,创建容器对象
        private ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        
        @Test
        public void testBean() throws Exception {
            TestAction testAction = (TestAction) ac.getBean("testAction");
            System.out.println(testAction);
        }
        //测试SessionFactory
        @Test
        public void testSessionFactory() throws Exception {
            SessionFactory sessionFactory = (SessionFactory)ac.getBean("sessionFactory");
            System.out.println(sessionFactory);
        } 
        //测试事务
        @Test
        public void testTransaction() throws Exception {
            TestService testService = (TestService) ac.getBean("testService");
            testService.saveTwoUser();
        }
    }
  • 相关阅读:
    2008年8月1日21世纪首次日全食奇观
    7.3午饭记
    简单漂亮的导航栏效果
    浮动居中float:center
    图片垂直居中的CSS技巧
    谷歌Chrome浏览器发布
    满江红.中秋寄远
    寄中秋月下独酌
    春江花月夜
    开始锻炼身体
  • 原文地址:https://www.cnblogs.com/justdoitba/p/7821025.html
Copyright © 2011-2022 走看看