zoukankan      html  css  js  c++  java
  • JavaWeb_(Hibernate框架)Hibernate论坛项目中多对多案例

      基于SSH论坛小型项目  传送门

      用户和发帖进行举例

      多对多关系:多个用户可以回复多个帖子

      因此引入了一张回复表,用来保存用户id和帖子id

       

    CREATE TABLE `hforum`.`answer` (
      `id` VARCHAR(50) NOT NULL,
      `userid` VARCHAR(50) NULL DEFAULT NULL,
      `pasteid` VARCHAR(50) NULL DEFAULT NULL,
      `content` VARCHAR(255) NULL,
      PRIMARY KEY (`id`));
    Gary.sql

      数据库中帖子数据(测试时候是没有的~)

      

       用户在login.jsp中进行登陆,登陆成功后跳转index.jsp,访问add.jsp后,用户可以发起新帖,用户发帖后,再访问detail.jsp,可以对发布的帖子进行回复。(注意:发布帖子时有一个pasteid,要保证回复帖子时回复该pasteid)

       用户回帖后,数据库中answer表存放的数据

      

     

        <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@taglib uri="/struts-tags" prefix="s" %>
    <!DOCTYPE html>
    <html>
    
    <head>
    <meta charset="UTF-8">
    
    <link rel="stylesheet" href="css/head.css" />
    <link rel="stylesheet" type="text/css" href="css/login.css" />
    </head>
    
    <body>
        <div class="dvhead">
            <div class="dvlogo">
                <a href="index.html">你问我答</a>
            </div>
            <div class="dvsearch">10秒钟注册账号,找到你的同学</div>
            <div class="dvreg">
                已有账号,立即&nbsp;<a href="login.html">登录</a>
            </div>
        </div>
        <section class="sec">
            <form action="${pageContext.request.contextPath }/UserAction_login"
                method="post">
                <div class="register-box">
                    <label for="username" class="username_label"> 用 户 名 <input
                        maxlength="20" name="username" type="text" placeholder="您的用户名和登录名" />
                    </label>
                    <div class="tips"></div>
                </div>
                <div class="register-box">
                    <label for="username" class="other_label"> 密 码 <input
                        maxlength="20" type="password" name="password"
                        placeholder="建议至少使用两种字符组合" />
                    </label>
                    <div class="tips" style="color: red"><s:property value="error"/> </div>
                </div>
    
    
    
                <div class="arguement">
                    <input type="checkbox" id="xieyi" /> 阅读并同意 <a
                        href="javascript:void(0)">《你问我答用户注册协议》</a> <a href="register.html">没有账号,立即注册</a>
                    <div class="tips"></div>
                </div>
                <div class="submit_btn">
                    <button type="submit" id="submit_btn">立 即 登录</button>
                </div>
            </form>
        </section>
        <script src="js/index.js" type="text/javascript" charset="utf-8"></script>
    </body>
    login.jsp
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
        <link rel="stylesheet" type="text/css" href="css/index.css">
    </head>
    <div class="dvhead">
        <div class="dvlogo"><a href="index.html">你问我答</a></div>
        <div class="dvsearch">10秒钟注册账号,找到你的同学</div>
        <div class="dvreg">
            已有账号,立即&nbsp;<a href="login.html">登录</a>
        </div>
    </div>
    <div class="dvContent">
        <div class="dvquesleft">
    
            <div class="dvqstitle">
                <image class="imgbean" src="images/bean.jpg">
                <span class="qsTitle">问答</span>
                <span class="back"><ab  href="">《《返回上一页</a></span>
            </div>
            <div class="dvtabhead">
                <div class="tabheads tabcurrent">全部问题</div>
                <div class="tabheads">我的问题</div>
                <div class="tabheads">关注问题</div>
                <div class="tabheads">问题标签</div>
            </div>
            <div class="tabContent">
                <div class="dvtags">
                    <a class="curenttag">待解决</a><span class="line"></span><a>高分</a><span
                        class="line"></span><a>新回答</a><span class="line"></span><a>已解决</a>
                </div>
                <div class="tab">
                    <div class="dvques">
                        <div class="quesCount">
                            <div class="count">8</div>
                            <div class="ques">回答数</div>
                        </div>
                        <div class="quesContent">
                            <div class="quesTitle">
                                500
                                <image src="images/bean.jpg" class="bean"> <span
                                    class="spanques">Excel开发的问题</span>
                            </div>
                            <div class="qContent">以前都是OWC控件在程序中做Excel做操作以前都是OWC控件在程序中做Excel做操作,主要包裹以前裹做Excel做操作,主要包裹以前都是OWC控件在程序中做Excel做操作,主要包裹主要包裹以前都是主要包中做Excel做操作,主要包裹,主要包裹...</div>
                            <div class="tags">
                                <span class="tag">excel</span><span class="tag">程序</span>
                            </div>
                            <div class="quesUser">
                                <image src="images/0.gif" class="imguser" />
                                <div class="userName">
                                    张大值
                                    <div class="liulan">浏览(9) 30分钟前</div>
                                </div>
    
                            </div>
                        </div>
                    </div>
                    <div class="dvques">
                        <div class="quesCount">
                            <div class="count">8</div>
                            <div class="ques">回答数</div>
                        </div>
                        <div class="quesContent">
                            <div class="quesTitle">
                                500
                                <image src="images/bean.jpg" class="bean"> <span
                                    class="spanques">Excel开发的问题</span>
                            </div>
                            <div class="qContent">以前都是OWC控件在程序中做Excel做操作,以前都是OWC控件在程序中做Excel做操作主要包裹以前裹做Excel做操作,主要包裹以前都是OWC控件在程序中做Excel做操作,主要包裹主要包裹以前都是主要包中做Excel做操作,主要包裹,主要包裹...</div>
                            <div class="tags">
                                <span class="tag">excel</span><span class="tag">程序</span>
                            </div>
                            <div class="quesUser">
                                <image src="images/0.gif" class="imguser" />
                                <div class="userName">
                                    张大值
                                    <div class="liulan">浏览(9) 30分钟前</div>
                                </div>
    
                            </div>
                        </div>
                    </div>
                    <div class="dvques">
                        <div class="quesCount">
                            <div class="count">8</div>
                            <div class="ques">回答数</div>
                        </div>
                        <div class="quesContent">
                            <div class="quesTitle">
                                500
                                <image src="images/bean.jpg" class="bean"> <span
                                    class="spanques">Excel开发的问题</span>
                            </div>
                            <div class="qContent">以前都是OWC控件在程序中做Excel做操作,以前都是OWC控件在程序中做Excel做操作主要包裹以前裹做Excel做操作,主要包裹以前都是OWC控件在程序中做Excel做操作,主要包裹主要包裹以前都是主要包中做Excel做操作,主要包裹,主要包裹...</div>
                            <div class="tags">
                                <span class="tag">excel</span><span class="tag">程序</span>
                            </div>
                            <div class="quesUser">
                                <image src="images/0.gif" class="imguser" />
                                <div class="userName">
                                    张大值
                                    <div class="liulan">浏览(9) 30分钟前</div>
                                </div>
    
                            </div>
                        </div>
                    </div>
                    <div class="dvques">
                        <div class="quesCount">
                            <div class="count">8</div>
                            <div class="ques">回答数</div>
                        </div>
                        <div class="quesContent">
                            <div class="quesTitle">
                                500
                                <image src="images/bean.jpg" class="bean"> <span
                                    class="spanques">Excel开发的问题</span>
                            </div>
                            <div class="qContent">以前都是OWC控件在程序中做Excel做操作,以前都是OWC控件在程序中做Excel做操作主要包裹以前裹做Excel做操作,主要包裹以前都是OWC控件在程序中做Excel做操作,主要包裹主要包裹以前都是主要包中做Excel做操作,主要包裹,主要包裹...</div>
                            <div class="tags">
                                <span class="tag">excel</span><span class="tag">程序</span>
                            </div>
                            <div class="quesUser">
                                <image src="images/0.gif" class="imguser" />
                                <div class="userName">
                                    张大值
                                    <div class="liulan">浏览(9) 30分钟前</div>
                                </div>
    
                            </div>
                        </div>
                    </div>
                    <div class="dvques">
                        <div class="quesCount">
                            <div class="count">8</div>
                            <div class="ques">回答数</div>
                        </div>
                        <div class="quesContent">
                            <div class="quesTitle">
                                500
                                <image src="images/bean.jpg" class="bean"> <span
                                    class="spanques">Excel开发的问题</span>
                            </div>
                            <div class="qContent">以前都是OWC控件在程序中做Excel做操作,主要包裹以前裹做Excel做操作,主要包裹以前都是OWC控件在程序中做Excel做操作,主要包裹主要包裹以前都是主要包中做Excel做操作,主要包裹,主要包裹...</div>
                            <div class="tags">
                                <span class="tag">excel</span><span class="tag">程序</span>
                            </div>
                            <div class="quesUser">
                                <image src="images/0.gif" class="imguser" />
                                <div class="userName">
                                    张大值
                                    <div class="liulan">浏览(9) 30分钟前</div>
                                </div>
    
                            </div>
                        </div>
                    </div>
    
                </div>
                <div class="tab hidden">2</div>
                <div class="tab hidden">3</div>
                <div class="tab hidden">4</div>
            </div>
        </div>
        <div class="dvquesright">
            <div>
                <buton class="btnques" onclick="location.href='add.jsp'">提个问题</buton>
            </div>
            <div class="dvorder">
                <div class="orderTitle">专家排行榜</div>
                <div class="users">
                    <image class="userface" src="images/0.gif" />
                    <div class="dvuser">
                        <div class="userTitle">陈有龙</div>
                        <div class="userdeital">大牛6级 豆:14006</div>
                    </div>
                </div>
                <div class="users">
                    <image class="userface" src="images/1.gif" />
                    <div class="dvuser">
                        <div class="userTitle">陈有龙</div>
                        <div class="userdeital">大牛6级 豆:14006</div>
                    </div>
                </div>
                <div class="users">
                    <image class="userface" src="images/2.gif" />
                    <div class="dvuser">
                        <div class="userTitle">陈有龙</div>
                        <div class="userdeital">大牛6级 豆:14006</div>
                    </div>
                </div>
                <div class="users">
                    <image class="userface" src="images/3.gif" />
                    <div class="dvuser">
                        <div class="userTitle">陈有龙</div>
                        <div class="userdeital">大牛6级 豆:14006</div>
                    </div>
                </div>
                <div class="users">
                    <image class="userface" src="images/4.gif" />
                    <div class="dvuser">
                        <div class="userTitle">陈有龙</div>
                        <div class="userdeital">大牛6级 豆:14006</div>
                    </div>
                </div>
                <div class="users">
                    <image class="userface" src="images/5.gif" />
                    <div class="dvuser">
                        <div class="userTitle">陈有龙</div>
                        <div class="userdeital">大牛6级 豆:14006</div>
                    </div>
                </div>
                <div class="users">
                    <image class="userface" src="images/6.gif" />
                    <div class="dvuser">
                        <div class="userTitle">陈有龙</div>
                        <div class="userdeital">大牛6级 豆:14006</div>
                    </div>
                </div>
    
    
            </div>
    
        </div>
    
    </div>
    <script type="text/javascript" src="js/jquery-1.7.2.min.js"></script>
    <script type="text/javascript">
        $(function()
        {
    
            $(".tabheads").click(function()
            {
                $(".tabheads").removeClass("tabcurrent").eq($(this).index()).addClass("tabcurrent");
                $(".tab").hide().eq($(this).index()).show();
            });
        });
    </script>
    <body>
    </body>
    </html>
    index.jsp
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>问题详情</title>
    <meta name="viewport"
        content="width=device-width, initial-scale=1, maximum-scale=1">
    <meta name="keywords" content="fly,layui,前端社区">
    <meta name="description" content="">
    <link rel="stylesheet" href="res/layui/css/layui.css">
    <link rel="stylesheet" href="res/css/global.css">
    <script src="res/layui/layui.js"></script>
    <script src="js/jquery.js"></script>
    <style type="text/css" rel="stylesheet">
    form {
        margin: 0;
    }
    
    .editor {
        margin-top: 5px;
        margin-bottom: 5px;
    }
    </style>
    
    </head>
    <body>
        <iframe src="head.html" scrolling="no" width="100%" height="65px"></iframe>
        <div class="main layui-clear">
            <div class="wrap">
                <div class="content detail">
                    <div class="fly-panel detail-box">
                        <h1>帖子标题</h1>
                        <div class="fly-tip fly-detail-hint" data-id="">
                            <span class="fly-tip-stick">置顶帖</span><span class="jie-admin">
                                <a href="">点击置顶</a>
                            </span> <span class="layui-btn layui-btn-mini jie-admin"> <a
                                href="">取消置顶</a>
                            </span> <span class="jie-admin" type="del" style="margin-left: 20px;">
                                <a>删除该帖</a>
                            </span> </span>
                            <div class="fly-list-hint">
                                <i class="iconfont" title="回答">&#xe60c;</i> 2
                            </div>
                        </div>
                        <div class="detail-about">
                            <a class="jie-user" href=""> <img src="res/images/uer.jpg"
                                alt="头像"> <cite> 压缩 <em>2017-05-01发布</em>
                            </cite>
                            </a>
                            <div class="detail-hits" data-id="{{rows.id}}">
                                <span class="layui-btn layui-btn-mini jie-admin"><a
                                    href="#">已完帖,无法编辑</a> </span> <span
                                    class="layui-btn layui-btn-mini jie-admin" type="collect"
                                    data-type="add"> <a id="collectPost">收藏</a>
                                </span> <span
                                    class="layui-btn layui-btn-mini jie-admin  layui-btn-danger"
                                    type="collect" data-type="add"> <a>取消收藏</a>
                                </span>
    
                            </div>
                        </div>
                        <div class="detail-body photos" style="margin-bottom: 20px;">
                            <p>帖子内容</p>
                        </div>
                    </div>
                    <div class="fly-panel detail-box" style="padding-top: 0;">
                        <a name="comment"></a>
                        <ul class="jieda photos" id="jieda">
                            <li data-id="12" class="jieda-daan"><a
                                name="item-121212121212"></a>
                                <div class="detail-about detail-about-reply">
                                    <a class="jie-user" href=""> <img src="res/images/uer.jpg"
                                        alt=""> <cite> <i>纸飞机</i> <!-- <em>(楼主)</em>
                      <em style="color:#5FB878">(管理员)</em> -->
                                    </cite>
                                    </a>
                                    <div class="detail-hits">
                                        <span>3分钟前</span>
                                    </div>
                                    <i class="iconfont icon-caina" title="最佳答案"></i>
                                </div>
                                <div class="detail-body jieda-body">
                                    <p>么么哒</p>
                                </div>
                                <div class="jieda-reply">
                                    <span class="jieda-zan zanok" type="zan"><i
                                        class="iconfont icon-zan"></i><em>12</em> </span>
                                    <!-- <div class="jieda-admin">
                    <span type="del">删除</span>
                    <span class="jieda-accept" type="accept">采纳</span>
                  </div> -->
                                </div></li>
                            <li data-id="13"><a name="item-121212121212"></a>
                                <div class="detail-about detail-about-reply">
                                    <a class="jie-user" href=""> <img src="res/images/uer.jpg"
                                        alt=""> <cite> <i>香菇</i> <em
                                            style="color: #FF9E3F">活雷锋</em>
                                    </cite>
                                    </a>
                                    <div class="detail-hits">
                                        <span>刚刚</span>
                                    </div>
                                </div>
                                <div class="detail-body jieda-body">
                                    <p>蓝瘦</p>
                                </div>
                                <div class="jieda-reply">
                                    <span class="jieda-zan" type="zan"><i
                                        class="iconfont icon-zan"></i><em>0</em> </span>
                                    <div class="jieda-admin">
                                        <span type="del"><a href="#"
                                            class="layui-btn layui-btn-danger layui-btn-small">删除</a></span> <span
                                            class="jieda-accept" type="accept"> <a href="#"
                                            class="layui-btn  layui-btn-small">采纳</a></span>
                                    </div>
                                </div></li>
    
                            <!-- <li class="fly-none">没有任何回答</li> -->
                        </ul>
                        <span id="toName">@ 压缩(楼主)</span>
                        <div class="layui-form layui-form-pane">
                            <form action="${pageContext.request.contextPath}/AnswerAction_addAnswer">
                                <input type="hidden" name="pasteid" value="8a8486706eb0ad4d016eb0ae20b70000"/>
                                
                                <div class="layui-form-item layui-form-text">
                                    <div class="layui-input-block">
                                        <div class="editor">
                                            <textarea id="content" name="content"
                                        style=" 690px; height: 450px; visibility: hidden;"></textarea>
                                        </div>
                                    </div>
                                </div>
                                
                                <div>
                                    <button class="layui-btn" lay-filter="*" lay-submit>提交回答</button>
                                </div>
                            </form>
                        </div>
                    </div>
                </div>
            </div>
    
            <div class="edge">
                <dl class="fly-panel fly-list-one">
                    <dt class="fly-panel-title">最近热帖</dt>
                    <dd>
                        <a href="">使用 layui 秒搭后台大布局(基本结构)</a> <span><i
                            class="iconfont">&#xe60b;</i> 6087</span>
                    </dd>
                    <dd>
                        <a href="">Java实现LayIM后端的核心代码</a> <span><i class="iconfont">&#xe60b;</i>
                            767</span>
                    </dd>
                    <dd>
                        <a href="">使用 layui 秒搭后台大布局(基本结构)</a> <span><i
                            class="iconfont">&#xe60b;</i> 6087</span>
                    </dd>
                    <dd>
                        <a href="">Java实现LayIM后端的核心代码</a> <span><i class="iconfont">&#xe60b;</i>
                            767</span>
                    </dd>
                    <dd>
                        <a href="">使用 layui 秒搭后台大布局(基本结构)</a> <span><i
                            class="iconfont">&#xe60b;</i> 6087</span>
                    </dd>
                    <dd>
                        <a href="">Java实现LayIM后端的核心代码</a> <span><i class="iconfont">&#xe60b;</i>
                            767</span>
                    </dd>
                    <dd>
                        <a href="">使用 layui 秒搭后台大布局(基本结构)</a> <span><i
                            class="iconfont">&#xe60b;</i> 6087</span>
                    </dd>
                    <dd>
                        <a href="">Java实现LayIM后端的核心代码</a> <span><i class="iconfont">&#xe60b;</i>
                            767</span>
                    </dd>
                </dl>
    
                <dl class="fly-panel fly-list-one">
                    <dt class="fly-panel-title">近期热议</dt>
                    <dd>
                        <a href="">使用 layui 秒搭后台大布局之基本结构</a> <span><i
                            class="iconfont">&#xe60c;</i> 96</span>
                    </dd>
                    <dd>
                        <a href="">使用 layui 秒搭后台大布局之基本结构</a> <span><i
                            class="iconfont">&#xe60c;</i> 96</span>
                    </dd>
                    <dd>
                        <a href="">使用 layui 秒搭后台大布局之基本结构</a> <span><i
                            class="iconfont">&#xe60c;</i> 96</span>
                    </dd>
                    <dd>
                        <a href="">使用 layui 秒搭后台大布局之基本结构</a> <span><i
                            class="iconfont">&#xe60c;</i> 96</span>
                    </dd>
                    <dd>
                        <a href="">使用 layui 秒搭后台大布局之基本结构</a> <span><i
                            class="iconfont">&#xe60c;</i> 96</span>
                    </dd>
                    <dd>
                        <a href="">使用 layui 秒搭后台大布局之基本结构</a> <span><i
                            class="iconfont">&#xe60c;</i> 96</span>
                    </dd>
                    <dd>
                        <a href="">使用 layui 秒搭后台大布局之基本结构</a> <span><i
                            class="iconfont">&#xe60c;</i> 96</span>
                    </dd>
                    <dd>
                        <a href="">使用 layui 秒搭后台大布局之基本结构</a> <span><i
                            class="iconfont">&#xe60c;</i> 96</span>
                    </dd>
                </dl>
            </div>
        </div>
    
        <script type="text/javascript" charset="utf-8" src="js/kindeditor.js"></script>
        <script type="text/javascript">
            KE.show({
                id : 'content',
                resizeMode : 1,
                cssPath : './index.css',
                items : [ 'fontname', 'fontsize', 'textcolor', 'bgcolor', 'bold',
                        'italic', 'underline', 'removeformat', 'justifyleft',
                        'justifycenter', 'justifyright', 'insertorderedlist',
                        'insertunorderedlist', 'emoticons', 'image', 'link' ]
            });
        </script>
        <script>
            layui.cache.page = '';
            layui.cache.user = {
                username : '游客',
                uid : -1,
                avatar : '../res/images/avatar/00.jpg',
                experience : 83,
                sex : ''
            };
            layui.config({
                version : "2.0.0",
                base : '../res/mods/'
            }).extend({
                fly : 'index'
            }).use('fly');
        </script>
    </body>
    </html>
    detail.jsp
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>发表问题</title>
    <meta name="viewport"
        content="width=device-width, initial-scale=1, maximum-scale=1">
    <link rel="stylesheet" href="css/head.css" />
    <link rel="stylesheet" href="layui/css/layui.css">
    
    <link rel="stylesheet" href="css/global.css">
    
    <script src="layui/layui.js"></script>
    </head>
    <body>
    
        <div class="dvhead">
            <div class="dvlogo">
                <a href="index.html">你问我答</a>
            </div>
            <div class="dvsearch">10秒钟注册账号,找到你的同学</div>
            <div class="dvreg">
                已有账号,立即&nbsp;<a href="login.html">登录</a>
            </div>
        </div>
    
        <div class="main layui-clear">
            <div class="fly-panel" pad20>
                <h2 class="page-title">发表问题</h2>
    
                <!-- <div class="fly-none">并无权限</div> -->
    
                <div class="layui-form layui-form-pane">
                    <form action="${pageContext.request.contextPath }/PasteAction_addPaste ">
                        <div class="layui-form-item">
                            <label for="L_title" class="layui-form-label">标题</label>
                            <div class="layui-input-block">
                                <input type="text" id="L_title" name="title" required
                                    lay-verify="required" autocomplete="off" class="layui-input">
                            </div>
                        </div>
                        
                        <div class="layui-form-item layui-form-text">
                            <div class="layui-input-block">
                                <div class="editor">
                                    <textarea id="content" name="content"
                                        style=" 1040px; height: 450px; visibility: hidden;"></textarea>
                                </div>
                            </div>
                            <label for="L_content" class="layui-form-label" style="top: -2px;">描述</label>
                        </div>
                        
                        <div class="layui-form-item">
                            <label for="L_title" class="layui-form-label">悬赏</label>
                            <div class="layui-input-block">
                                <input type="number" name="offer" required lay-verify="required"
                                    autocomplete="off" class="layui-input">
                            </div>
                        </div>
                        <div class="layui-form-item">
                            <button class="layui-btn" lay-filter="*" lay-submit>立即发布</button>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    
        <script type="text/javascript" charset="utf-8" src="js/kindeditor.js"></script>
        <script type="text/javascript">
            KE.show({
                id : 'content',
                resizeMode : 1,
                cssPath : './index.css',
                items : [ 'fontname', 'fontsize', 'textcolor', 'bgcolor', 'bold',
                        'italic', 'underline', 'removeformat', 'justifyleft',
                        'justifycenter', 'justifyright', 'insertorderedlist',
                        'insertunorderedlist', 'emoticons', 'image', 'link' ]
            });
        </script>
        <script>
            layui.cache.page = '';
            layui.cache.user = {
                username : '游客',
                uid : -1,
                avatar : '../res/images/avatar/00.jpg',
                experience : 83,
                sex : ''
            };
            layui.config({
                version : "2.0.0",
                base : '../res/mods/'
            }).extend({
                fly : 'index'
            }).use('fly');
        </script>
    </body>
    </html>
    add.jsp
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
        
    <struts>
    
        <constant name="struts.devMode" value="true"></constant>
        <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
        
        <package name="hibernateTest" namespace="/" extends="struts-default">
            <global-allowed-methods>regex:.*</global-allowed-methods>
            <action name="UserAction_*" class="com.Gary.web.UserAction" method="{1}">
                
                <result name="toIndex" type="redirect">/index.jsp</result>
                <result name = "login">/login.jsp</result>
            </action>
        
            <action name="PasteAction_*" class="com.Gary.web.PasteAction" method="{1}">
                <result name="toIndex" type="redirect">/index.jsp</result>
            </action>
        
            <action name="AnswerAction_*" class="com.Gary.web.AnswerAction" method="{1}">
                <result name="success">/index.jsp</result>
            </action>
        
        </package>
        
    
    </struts>
    struts.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
        
    
    <hibernate-configuration>
    
        <session-factory>
        
            <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
            
            <property name="hibernate.connection.url">jdbc:mysql:///hforum</property>
            
            <property name="hibernate.connection.username">root</property>
            
            <property name="hibernate.connection.password">123456</property>
            
            <!-- 将hibernate生成的sql语句打印到控制台 -->
            <property name="hibernate.show_sql"></property>
            
            <!-- 格式化hibernate生成的sql语句 -->
            <property name="hibernate.format_sql"></property>
            
            <!-- 配置hibernate自动创建表-->
            <property name="hibernate.hbm2ddl.auto">update</property>
            
            <!-- 配置数据库的隔离级别-->
            <property name="hibernate.connection.isolation">4</property>
            
            <!-- 配置事务 (session与当前线程绑定)  -->
            <property name="hibernate.current_session_context_class">thread</property>
        
            <mapping resource="com/Gary/domain/User.hbm.xml"/>
            <mapping resource="com/Gary/domain/Paste.hbm.xml"/>
            <mapping resource="com/Gary/domain/Answer.hbm.xml"/>
        
        </session-factory>
    
    </hibernate-configuration>
    hibernate.xml

      com.Gary.dao

    package com.Gary.dao;
    
    import org.hibernate.Session;
    
    import com.Gary.domain.Answer;
    import com.Gary.utils.HibernateUtils;
    
    public class AnswerDao {
    
        public void addAnswer(Answer answer) {
            
            Session session = HibernateUtils.getCurrentSession();
            session.save(answer);
            
            
        }
    
    }
    AnswerDao.java
    package com.Gary.dao;
    
    import org.hibernate.Session;
    
    import com.Gary.domain.Paste;
    import com.Gary.utils.HibernateUtils;
    
    public class PasteDao {
    
        public void addPaste(Paste paste) {
            
            Session session = HibernateUtils.getCurrentSession();
            session.save(paste);
            
        }
    
        public Paste findPasteById(String pasteid) {
        
            Session session = HibernateUtils.getCurrentSession();
            return session.get(Paste.class, pasteid);
            
        }
    
    }
    PasteDao.java
    package com.Gary.dao;
    
    import org.hibernate.Session;
    import org.hibernate.query.NativeQuery;
    
    import com.Gary.domain.User;
    import com.Gary.utils.HibernateUtils;
    
    public class UserDao {
    
        //原生SQL查询
        public User findUesr(User user) {
    
            Session session = HibernateUtils.getCurrentSession();
            String sql = "select * from user where username = ? and password = ?";
            NativeQuery query = session.createSQLQuery(sql);
            query.setParameter(1, user.getUsername());
            query.setParameter(2, user.getPassword());
            query.addEntity(User.class);
            
            User temp = (User) query.uniqueResult();
            
            
            
            return temp;
    
        }
    
    }
    UserDao.java

      com.Gary.domain

    package com.Gary.domain;
    
    public class Answer {
    
        private String id;
        private String content;
        
        private User user;
        private Paste paste;
        
        
        
        public String getId() {
            return id;
        }
        public void setId(String id) {
            this.id = id;
        }
        public String getContent() {
            return content;
        }
        public void setContent(String content) {
            this.content = content;
        }
        public User getUser() {
            return user;
        }
        public void setUser(User user) {
            this.user = user;
        }
        public Paste getPaste() {
            return paste;
        }
        public void setPaste(Paste paste) {
            this.paste = paste;
        }
        
        
    }
    Answer.java
    package com.Gary.domain;
    
    import java.util.HashSet;
    import java.util.Set;
    
    public class Paste {
    
        private String id;
        
        private String title;
        private String content;
        private Integer offer;
        private Integer ansnum;
        private Integer glanceover;
        private String createtime;
        
        
        //一个帖子属于一个用户
        private User user;
        
        private Set<User> userAnswerSet = new HashSet<User>();
        
        
        
        public Set<User> getUserAnswerSet() {
            return userAnswerSet;
        }
        public void setUserAnswerSet(Set<User> userAnswerSet) {
            this.userAnswerSet = userAnswerSet;
        }
        public User getUser() {
            return user;
        }
        public void setUser(User user) {
            this.user = user;
        }
        public String getId() {
            return id;
        }
        public void setId(String 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 Integer getOffer() {
            return offer;
        }
        public void setOffer(Integer offer) {
            this.offer = offer;
        }
        public Integer getAnsnum() {
            return ansnum;
        }
        public void setAnsnum(Integer ansnum) {
            this.ansnum = ansnum;
        }
        public Integer getGlanceover() {
            return glanceover;
        }
        public void setGlanceover(Integer glanceover) {
            this.glanceover = glanceover;
        }
        public String getCreatetime() {
            return createtime;
        }
        public void setCreatetime(String createtime) {
            this.createtime = createtime;
        }
        
        
        
        
    }
    Paste.java
    package com.Gary.domain;
    
    import java.util.HashSet;
    import java.util.Set;
    
    public class User {
    
        private String id;;
        private String username;
        private String password;
        
        private String name;
        private String email;
        private String telephone;
        
        //一对多
        private Set<Paste> pasteSet = new HashSet<Paste>();
        
        private Set<Paste> answerPasteSet = new HashSet<Paste>();
        
        
        
        public Set<Paste> getAnswerPasteSet() {
            return answerPasteSet;
        }
        public void setAnswerPasteSet(Set<Paste> answerPasteSet) {
            this.answerPasteSet = answerPasteSet;
        }
        public Set<Paste> getPasteSet() {
            return pasteSet;
        }
        public void setPasteSet(Set<Paste> pasteSet) {
            this.pasteSet = pasteSet;
        }
        public String getId() {
            return id;
        }
        public void setId(String id) {
            this.id = id;
        }
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getEmail() {
            return email;
        }
        public void setEmail(String email) {
            this.email = email;
        }
        public String getTelephone() {
            return telephone;
        }
        public void setTelephone(String telephone) {
            this.telephone = telephone;
        }
        
        
        
    }
    User.java
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC 
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    
    <hibernate-mapping package="com.Gary.domain">
    
            <class name ="Answer" table="answer">
            <id name="id">
                <generator class="uuid"></generator>
            </id>
            
            <property name="content" column="content"></property>
            
            <many-to-one name="user" column="userid" class="User"></many-to-one>
            <many-to-one name="paste" column="pasteid" class="Paste"></many-to-one>
            
            
        </class>
    
    </hibernate-mapping>
    Answer.hbm.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC 
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    
    <hibernate-mapping package="com.Gary.domain">
        <class name = "Paste" table="paste">
            <id name="id">
                <generator class="uuid"></generator>
            </id>
            
            <property name="title" column="title"></property>
            <property name="content" column="content"></property>
            <property name="offer" column="offer"></property>
            <property name="ansnum" column="ansnum"></property>
            <property name="glanceover" column="glanceover"></property>
            <property name="createtime" column="createtime"></property>
        
            <!-- name:引用属性名
                    class:与他关系的对象的完整类名
                    column:外键列名
             -->
             <!-- inverse:配置关系是否不维护
                             true:    不维护
                             false:    维护关系
                    insert属性:
                    性能优化:
                    无论怎么放弃维护,总有一方需要维护(按照默认值来就行)
                    一般的开发中,一的一方放弃维护,多的一方不放弃维护
            -->
            <many-to-one name="user" class="User" column="userid" insert="true"></many-to-one>
        
        <!-- 多对多关系 转换为两个一对多 -->
            <set name="userAnswerSet">
                <!-- 指定关联的外键的列名 -->
                <key column="userid"></key>
                <!-- 指定关联的外键的实体类名 -->
                <one-to-many class="Answer"/>
            </set>
        
        
        </class>
    
    </hibernate-mapping>
    Paste.hbm.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC 
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
        
        
    <hibernate-mapping package="com.Gary.domain">
        <class name="User" table="user">
            <id name = "id">
                <generator class="uuid"></generator>
            </id>
            
            
            <property name="username" column="username"></property>
            <property name="password" column="password"></property>
            <property name="name" column="name"></property>
            <property name="email" column="email"></property>
            <property name="telephone" column="telephone"></property>
            
            
            <!-- name:集合属性名字
                    column:外键列名
                    class:与他相关的对象的完整类名 -->
                    <!-- 
                        cascade:级联操作
                            save-update:级联保存,级联更新
                            delete:级联删除
                            all
                     -->
                     <!-- inverse:配置关系是否不维护
                             true:    不维护
                             false:    维护关系
                      -->
            <set name="pasteSet">
                <key column="userid"></key>
                <one-to-many class="Paste"/>
            </set>
            
            <set name="answerPasteSet">
                <key column="pasteid"></key>
                <one-to-many class="Answer"/>
            </set>
            
            
        </class>
    </hibernate-mapping>
    User.hbm.xml

      com.Gary.service

    package com.Gary.service;
    
    import org.hibernate.Transaction;
    
    import com.Gary.dao.AnswerDao;
    import com.Gary.domain.Answer;
    import com.Gary.utils.HibernateUtils;
    
    public class AnswerService {
    
        public void addAnswer(Answer answer) {
            
            AnswerDao answerDao= new AnswerDao();
            Transaction beginTransaction = HibernateUtils.getCurrentSession().beginTransaction();
        
            try {
                answerDao.addAnswer(answer);    
            }catch(Exception e)
            {
                beginTransaction.rollback();
            }
            
            
            beginTransaction.commit();
            
        }
    
    }
    AnswerService.java
    package com.Gary.service;
    
    import org.hibernate.Transaction;
    
    import com.Gary.dao.PasteDao;
    import com.Gary.domain.Paste;
    import com.Gary.utils.HibernateUtils;
    
    public class PasteService {
    
        public void addPaste(Paste paste) {
            
            PasteDao pasteDao = new PasteDao();
            
            Transaction beginTransaction = HibernateUtils.getCurrentSession().beginTransaction();
            
            try
            {
                pasteDao.addPaste(paste);
            }
            catch(Exception e)
            {
                beginTransaction.rollback();
            }
            
            beginTransaction.commit();
        }
    
        //查找  不用进行事务保护
        public Paste findPasteById(String pasteid) {
            
            PasteDao pasteDao = new PasteDao();
        
            Paste paste = null;
            Transaction beginTransaction = HibernateUtils.getCurrentSession().beginTransaction();    
            try
            {
                paste = pasteDao.findPasteById(pasteid);
            }
            catch(Exception e)
            {
                beginTransaction.rollback();
            }
            
            beginTransaction.commit();
            return paste;
            
        }
    
    }
    PasteService.java
    package com.Gary.service;
    
    import org.hibernate.Transaction;
    
    import com.Gary.dao.UserDao;
    import com.Gary.domain.User;
    import com.Gary.utils.HibernateUtils;
    
    public class UserService {
    
        public User findUesr(User user) {
            
            UserDao userDao = new UserDao();
            //开启事务(查询不需要数据库保护)
            Transaction transaction = HibernateUtils.getCurrentSession().beginTransaction();
            
            User temp = null;
            
            try
            {
                temp = userDao.findUesr(user);
            }
            catch(Exception e)
            {
                transaction.rollback();
            }
            
            //提交事务
            transaction.commit();
            
            
            return temp;
        }
    
    }
    UserService.java

      com.Gary.utils

    package com.Gary.utils;
    
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
    
    public class HibernateUtils {
    
        private static SessionFactory sessionFactory = null;
        
        static {
            Configuration config = new Configuration().configure();
            sessionFactory = config.buildSessionFactory();
        }
        
        public static Session getSession()
        {
            return sessionFactory.openSession();
        }
        
        public static Session getCurrentSession()
        {
            return sessionFactory.getCurrentSession();
        }
        
    }
    HibernateUtils.java

      com.Gary.web

    package com.Gary.web;
    
    import com.Gary.domain.Answer;
    import com.Gary.domain.Paste;
    import com.Gary.domain.User;
    import com.Gary.service.AnswerService;
    import com.Gary.service.PasteService;
    import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionSupport;
    import com.opensymphony.xwork2.ModelDriven;
    
    public class AnswerAction extends ActionSupport implements ModelDriven<Answer>{
    
        public Answer answer = new Answer();
        public String pasteid;
    
        public String addAnswer() throws Exception {
    
            AnswerService answerService = new AnswerService();
            PasteService pasteService = new PasteService();
            
            Paste paste = pasteService.findPasteById(pasteid);
            answer.setPaste(paste);
            User user = (User) ActionContext.getContext().getSession().get("user");
            answer.setUser(user);
    
            System.out.println(pasteid + " --- "+answer.getContent());
            answerService.addAnswer(answer);
    
            return "success";
        }
    
        public String getPasteid() {
            return pasteid;
        }
    
        public void setPasteid(String pasteid) {
            this.pasteid = pasteid;
        }
    
        @Override
        public Answer getModel() {
        
            return answer;
        }
    
    }
    AnswerAction.java
    package com.Gary.web;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    import com.Gary.domain.Paste;
    import com.Gary.domain.User;
    import com.Gary.service.PasteService;
    import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionSupport;
    import com.opensymphony.xwork2.ModelDriven;
    
    public class PasteAction extends ActionSupport implements ModelDriven<Paste>{
    
        public Paste paste = new Paste();
        
        //addPaste
        public String addPaste() throws Exception {
            
            //没有的数据手动封装
            //title  content  offer
            paste.setAnsnum(0);
            paste.setGlanceover(0);
            Date date = new Date(System.currentTimeMillis());
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
            String createtime = format.format(date);
            paste.setCreatetime(createtime);
            User user = (User) ActionContext.getContext().getSession().get("user");
            paste.setUser(user);
    
            PasteService pasteService = new PasteService();
            pasteService.addPaste(paste);
            
            System.out.println("PasteAction"+paste);
            
            return "toIndex";
        }
    
        @Override
        public Paste getModel() {
            
            return paste;
        }
    
        
        
    }
    PasteAction.java
    package com.Gary.web;
    
    import com.Gary.domain.User;
    import com.Gary.service.UserService;
    import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionSupport;
    import com.opensymphony.xwork2.ModelDriven;
    
    public class UserAction extends ActionSupport implements ModelDriven<User>{
    
        public User user = new User();
        
        public String login() throws Exception {
            
            UserService userService = new UserService();
            
            User temp = userService.findUesr(user);
            
            System.out.println("UserAction"+temp);
            
            if(temp!=null)
            {
                ActionContext.getContext().getSession().put("user", temp);
                return "toIndex";
            }
            else
            {
                ActionContext.getContext().put("error", "用户名或密码错误!!");
                return "login";
            }
            
            
            
        }
    
        @Override
        public User getModel() {
        
            return user;
        }
    
        
        
    }
    UserAction.java
  • 相关阅读:
    MD5加密 + 盐
    SQLite数据库--C#访问加密的SQLite数据库
    SQLite问题笔记
    微信开发--Two.菜单生成
    NOIP2018游记(更新完毕)
    HNOI2019 游记
    JXOI2017-2018 解题报告
    网络流20+4题解题报告(已更前20题)
    CodeForces528A (STLset)
    CodeForces 140C New Year Snowmen(堆)
  • 原文地址:https://www.cnblogs.com/1138720556Gary/p/11923851.html
Copyright © 2011-2022 走看看