bos项目第二天

2 jQuery EasyUI 中动态添加选项卡

用于动态添加选项卡
注意:easyui方法名是作为参数传进去的

这里写图片描述

选中指定的选项卡
判断某个选项卡是否存在

这里写图片描述

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>tabs选项卡</title>
</head>
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath }/js/easyui/themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath }/js/easyui/themes/icon.css">
<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-1.8.3.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/easyui/jquery.easyui.min.js"></script>

<body class="easyui-layout">
    <div title="XXX管理系统" style="height: 100px" data-options="region:'north'">north region</div>
    <div title="系统菜单" style="width: 200px" data-options="region:'west'">
        <!-- 制作accordion折叠面板
             fit:true   自适应(填充父容器西部区域)
         -->
        <div class="easyui-accordion" data-options="fit:true">
            <!-- 使用子div表示每个面板 -->
            <div data-options="iconCls:'icon-save'" title="面板一">
                <!-- <input type="button" value="添加一个选项卡"> -->
                <a id="but1" class="easyui-linkbutton">添加一个选项卡</a>
                <script type="text/javascript">
                    $(function(){
                        //页面加载完成之后为上面的按钮绑定单击事件
                        $("#but1").click(function(){
                            //判断系统管理选项卡是否存在
                            var e = $("#mytabs").tabs('exists','系统管理');
                            if(e){
                                //存在,只需要选中即可
                                $("#mytabs").tabs('select','系统管理');
                            }else{
                                //调用tabs对象的add方法动态添加选项卡
                                $("#mytabs").tabs('add',{
                                    title:'系统管理',
                                    iconCls:'icon-edit',
                                    closable:true,
                                    content:'<iframe frameborder="0" width="100%" height="100%" src="https://www.baidu.com"></iframe>'
                                })
                            }
                        })
                    })
                </script>

            </div>
            <div title="面板二">22</div>
            <div title="面板三">33</div>
        </div>
    </div>
    <div data-options="region:'center'">
        <!-- 制作tabs选项卡面板 -->
        <div id="mytabs" class="easyui-tabs" data-options="fit:true">
            <!-- 使用子div表示每个面板 -->
            <div data-options="iconCls:'icon-save'" title="面板一">11</div>
            <div data-options="closable:true" title="面板二">22</div>
            <div title="面板三">33</div>
        </div>
    </div>
    <div style="width: 100px" data-options="region:'east'">east region</div>
    <div style="height: 50px" data-options="region:'south'">south region</div>
</body>
</html>

这里写图片描述

3 jquery ztree插件使用

官网:ztree.me
目录结构

这里写图片描述

在页面中引入相关的资源文件
<link rel="stylesheet" href="${pageContext.request.contextPath }/js/ztree/zTreeStyle.css" type="text/css">
<script type="text/javascript" src="${pageContext.request.contextPath }/js/easyui/jquery.easyui.min.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/ztree/jquery.ztree.all-3.5.js"></script>

3.1 使用标准json构造ztree

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>ztree</title>
</head>
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath }/js/easyui/themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath }/js/easyui/themes/icon.css">
<link rel="stylesheet" href="${pageContext.request.contextPath }/js/ztree/zTreeStyle.css" type="text/css">
<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-1.8.3.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/easyui/jquery.easyui.min.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/ztree/jquery.ztree.all-3.5.js"></script>

<body class="easyui-layout">
    <div title="XXX管理系统" style="height: 100px" data-options="region:'north'">north region</div>
    <div title="系统菜单" style="width: 200px" data-options="region:'west'">
        <!-- 制作accordion折叠面板
             fit:true   自适应(填充父容器西部区域)
         -->
        <div class="easyui-accordion" data-options="fit:true">
            <!-- 使用子div表示每个面板 -->
            <div data-options="iconCls:'icon-save'" title="面板一">
                <!-- <input type="button" value="添加一个选项卡"> -->
                <a id="but1" class="easyui-linkbutton">添加一个选项卡</a>
                <script type="text/javascript">
                    $(function(){
                        //页面加载完成之后为上面的按钮绑定单击事件
                        $("#but1").click(function(){
                            //判断系统管理选项卡是否存在
                            var e = $("#mytabs").tabs('exists','系统管理');
                            if(e){
                                //存在,只需要选中即可
                                $("#mytabs").tabs('select','系统管理');
                            }else{
                                //调用tabs对象的add方法动态添加选项卡
                                $("#mytabs").tabs('add',{
                                    title:'系统管理',
                                    iconCls:'icon-edit',
                                    closable:true,
                                    content:'<iframe frameborder="0" width="100%" height="100%" src="https://www.baidu.com"></iframe>'
                                })
                            }
                        })
                    })
                </script>

            </div>
            <div title="面板二">
                <!-- 展示ztree效果:使用标准json数据构造ztree树 -->
                <ul id="ztree1" class="ztree"></ul>
                <script type="text/javascript">
                    $(function(){
                        //页面加载完成后执行这段代码--动态创建ztree
                        var setting = {};
                        //构造节点数据
                        var zNodes = [
                                      {"name":"节点一","children":[
                                                                    {"name":"节点一_1"},
                                                                    {"name":"节点一_2"}
                                                                ]},//每个json对象表示一个节点数据
                                      {"name":"节点二"},
                                      {"name":"节点三"}

                                      ];
                        $.fn.zTree.init($("#ztree1"), setting, zNodes);

                    })
                </script>

            </div>
            <div title="面板三">33</div>
        </div>
    </div>
    <div data-options="region:'center'">
        <!-- 制作tabs选项卡面板 -->
        <div id="mytabs" class="easyui-tabs" data-options="fit:true">
            <!-- 使用子div表示每个面板 -->
            <div data-options="iconCls:'icon-save'" title="面板一">11</div>
            <div data-options="closable:true" title="面板二">22</div>
            <div title="面板三">33</div>
        </div>
    </div>
    <div style="width: 100px" data-options="region:'east'">east region</div>
    <div style="height: 50px" data-options="region:'south'">south region</div>
</body>
</html>

这里写图片描述

3.2 使用简单json构造ztree(重点)

这里写图片描述

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>ztree</title>
</head>
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath }/js/easyui/themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath }/js/easyui/themes/icon.css">
<link rel="stylesheet" href="${pageContext.request.contextPath }/js/ztree/zTreeStyle.css" type="text/css">
<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-1.8.3.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/easyui/jquery.easyui.min.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/ztree/jquery.ztree.all-3.5.js"></script>

<body class="easyui-layout">
    <div title="XXX管理系统" style="height: 100px" data-options="region:'north'">north region</div>
    <div title="系统菜单" style="width: 200px" data-options="region:'west'">
        <!-- 制作accordion折叠面板
             fit:true   自适应(填充父容器西部区域)
         -->
        <div class="easyui-accordion" data-options="fit:true">
            <!-- 使用子div表示每个面板 -->
            <div data-options="iconCls:'icon-save'" title="面板一">
                <!-- <input type="button" value="添加一个选项卡"> -->
                <a id="but1" class="easyui-linkbutton">添加一个选项卡</a>
                <script type="text/javascript">
                    $(function(){
                        //页面加载完成之后为上面的按钮绑定单击事件
                        $("#but1").click(function(){
                            //判断系统管理选项卡是否存在
                            var e = $("#mytabs").tabs('exists','系统管理');
                            if(e){
                                //存在,只需要选中即可
                                $("#mytabs").tabs('select','系统管理');
                            }else{
                                //调用tabs对象的add方法动态添加选项卡
                                $("#mytabs").tabs('add',{
                                    title:'系统管理',
                                    iconCls:'icon-edit',
                                    closable:true,
                                    content:'<iframe frameborder="0" width="100%" height="100%" src="https://www.baidu.com"></iframe>'
                                })
                            }
                        })
                    })
                </script>

            </div>
            <div title="面板二">
                <!-- 展示ztree效果:使用标准json数据构造ztree树 -->
                <ul id="ztree1" class="ztree"></ul>
                <script type="text/javascript">
                    $(function(){
                        //页面加载完成后执行这段代码--动态创建ztree
                        var setting = {};
                        //构造节点数据
                        var zNodes = [
                                      {"name":"节点一","children":[
                                                                    {"name":"节点一_1"},
                                                                    {"name":"节点一_2"}
                                                                ]},//每个json对象表示一个节点数据
                                      {"name":"节点二"},
                                      {"name":"节点三"}

                                      ];
                        $.fn.zTree.init($("#ztree1"), setting, zNodes);

                    })
                </script>

            </div>
            <div title="面板三">
                <!-- 展示ztree效果:简单json数据构造ztree树 -->
                <ul id="ztree2" class="ztree"></ul>
                <script type="text/javascript">
                    $(function(){
                        //页面加载完成后执行这段代码--动态创建ztree
                        var setting2 = {
                                data: {
                                    simpleData: {
                                        enable: true//使用简单json数据构造ztree节点
                                    }
                                }
                        };
                        //构造节点数据
                        var zNodes2 = [
                                      {"id":"1","pId":"0","name":"节点一"},//每个json对象表示一个节点数据
                                      {"id":"2","pId":"1","name":"节点二"},
                                      {"id":"3","pId":"2","name":"节点三"}

                                      ];
                        $.fn.zTree.init($("#ztree2"), setting2, zNodes2);

                    })
                </script>
            </div>
        </div>
    </div>
    <div data-options="region:'center'">
        <!-- 制作tabs选项卡面板 -->
        <div id="mytabs" class="easyui-tabs" data-options="fit:true">
            <!-- 使用子div表示每个面板 -->
            <div data-options="iconCls:'icon-save'" title="面板一">11</div>
            <div data-options="closable:true" title="面板二">22</div>
            <div title="面板三">33</div>
        </div>
    </div>
    <div style="width: 100px" data-options="region:'east'">east region</div>
    <div style="height: 50px" data-options="region:'south'">south region</div>
</body>
</html>

这里写图片描述

3.3 发送ajax请求获取json数据构造ztree树

//jQuery提供的ajax方法:ajax,post,get,load,getJSON,getScript
$.post(url,{},function(){},'json');
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>ztree</title>
</head>
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath }/js/easyui/themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath }/js/easyui/themes/icon.css">
<link rel="stylesheet" href="${pageContext.request.contextPath }/js/ztree/zTreeStyle.css" type="text/css">
<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-1.8.3.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/easyui/jquery.easyui.min.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/ztree/jquery.ztree.all-3.5.js"></script>

<body class="easyui-layout">
    <div title="XXX管理系统" style="height: 100px" data-options="region:'north'">north region</div>
    <div title="系统菜单" style="width: 200px" data-options="region:'west'">
        <!-- 制作accordion折叠面板
             fit:true   自适应(填充父容器西部区域)
         -->
        <div class="easyui-accordion" data-options="fit:true">
            <!-- 使用子div表示每个面板 -->
            <div data-options="iconCls:'icon-save'" title="面板一">
                <!-- <input type="button" value="添加一个选项卡"> -->
                <a id="but1" class="easyui-linkbutton">添加一个选项卡</a>
                <script type="text/javascript">
                    $(function(){
                        //页面加载完成之后为上面的按钮绑定单击事件
                        $("#but1").click(function(){
                            //判断系统管理选项卡是否存在
                            var e = $("#mytabs").tabs('exists','系统管理');
                            if(e){
                                //存在,只需要选中即可
                                $("#mytabs").tabs('select','系统管理');
                            }else{
                                //调用tabs对象的add方法动态添加选项卡
                                $("#mytabs").tabs('add',{
                                    title:'系统管理',
                                    iconCls:'icon-edit',
                                    closable:true,
                                    content:'<iframe frameborder="0" width="100%" height="100%" src="https://www.baidu.com"></iframe>'
                                })
                            }
                        })
                    })
                </script>

            </div>
            <div title="面板二">
                <!-- 展示ztree效果:使用标准json数据构造ztree树 -->
                <ul id="ztree1" class="ztree"></ul>
                <script type="text/javascript">
                    $(function(){
                        //页面加载完成后执行这段代码--动态创建ztree
                        var setting = {};
                        //构造节点数据
                        var zNodes = [
                                      {"name":"节点一","children":[
                                                                    {"name":"节点一_1"},
                                                                    {"name":"节点一_2"}
                                                                ]},//每个json对象表示一个节点数据
                                      {"name":"节点二"},
                                      {"name":"节点三"}

                                      ];
                        $.fn.zTree.init($("#ztree1"), setting, zNodes);

                    })
                </script>

            </div>
            <div title="面板三">
                <!-- 展示ztree效果:简单json数据构造ztree树 -->
                <ul id="ztree2" class="ztree"></ul>
                <script type="text/javascript">
                    $(function(){
                        //页面加载完成后执行这段代码--动态创建ztree
                        var setting2 = {
                                data: {
                                    simpleData: {
                                        enable: true//使用简单json数据构造ztree节点
                                    }
                                }
                        };
                        //构造节点数据
                        var zNodes2 = [
                                      {"id":"1","pId":"0","name":"节点一"},//每个json对象表示一个节点数据
                                      {"id":"2","pId":"1","name":"节点二"},
                                      {"id":"3","pId":"2","name":"节点三"}

                                      ];
                        $.fn.zTree.init($("#ztree2"), setting2, zNodes2);

                    })
                </script>
            </div>
            <div title="面板四">
                <!-- 展示ztree效果:发送ajax请求获取json数据构造ztree树 -->
                <ul id="ztree3" class="ztree"></ul>
                <script type="text/javascript">
                    $(function(){
                        //页面加载完成后执行这段代码--动态创建ztree
                        var setting3 = {
                                data: {
                                    simpleData: {
                                        enable: true//使用简单json数据构造ztree节点
                                    }
                                }
                        };

                        //发送ajax请求,获取json数据
                        //jQuery提供的ajax方法:ajax,post,get,load,getJSON,getScript
                        var url = "${pageContext.request.contextPath }/json/menu.json";
                        $.post(url,{},function(data){
                            //调用API初始化ztree
                            $.fn.zTree.init($("#ztree3"), setting3, data);
                        },'json');
                    })
                </script>
            </div>
        </div>
    </div>
    <div data-options="region:'center'">
        <!-- 制作tabs选项卡面板 -->
        <div id="mytabs" class="easyui-tabs" data-options="fit:true">
            <!-- 使用子div表示每个面板 -->
            <div data-options="iconCls:'icon-save'" title="面板一">11</div>
            <div data-options="closable:true" title="面板二">22</div>
            <div title="面板三">33</div>
        </div>
    </div>
    <div style="width: 100px" data-options="region:'east'">east region</div>
    <div style="height: 50px" data-options="region:'south'">south region</div>
</body>
</html>

这里写图片描述

3.4 为ztree提供的API为节点绑定事件动态添加选项卡

这里写图片描述

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>ztree</title>
</head>
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath }/js/easyui/themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath }/js/easyui/themes/icon.css">
<link rel="stylesheet" href="${pageContext.request.contextPath }/js/ztree/zTreeStyle.css" type="text/css">
<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-1.8.3.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/easyui/jquery.easyui.min.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/ztree/jquery.ztree.all-3.5.js"></script>

<body class="easyui-layout">
    <div title="XXX管理系统" style="height: 100px" data-options="region:'north'">north region</div>
    <div title="系统菜单" style="width: 200px" data-options="region:'west'">
        <!-- 制作accordion折叠面板
             fit:true   自适应(填充父容器西部区域)
         -->
        <div class="easyui-accordion" data-options="fit:true">
            <!-- 使用子div表示每个面板 -->
            <div data-options="iconCls:'icon-save'" title="面板一">
                <!-- <input type="button" value="添加一个选项卡"> -->
                <a id="but1" class="easyui-linkbutton">添加一个选项卡</a>
                <script type="text/javascript">
                    $(function(){
                        //页面加载完成之后为上面的按钮绑定单击事件
                        $("#but1").click(function(){
                            //判断系统管理选项卡是否存在
                            var e = $("#mytabs").tabs('exists','系统管理');
                            if(e){
                                //存在,只需要选中即可
                                $("#mytabs").tabs('select','系统管理');
                            }else{
                                //调用tabs对象的add方法动态添加选项卡
                                $("#mytabs").tabs('add',{
                                    title:'系统管理',
                                    iconCls:'icon-edit',
                                    closable:true,
                                    content:'<iframe frameborder="0" width="100%" height="100%" src="https://www.baidu.com"></iframe>'
                                })
                            }
                        })
                    })
                </script>

            </div>
            <div title="面板二">
                <!-- 展示ztree效果:使用标准json数据构造ztree树 -->
                <ul id="ztree1" class="ztree"></ul>
                <script type="text/javascript">
                    $(function(){
                        //页面加载完成后执行这段代码--动态创建ztree
                        var setting = {};
                        //构造节点数据
                        var zNodes = [
                                      {"name":"节点一","children":[
                                                                    {"name":"节点一_1"},
                                                                    {"name":"节点一_2"}
                                                                ]},//每个json对象表示一个节点数据
                                      {"name":"节点二"},
                                      {"name":"节点三"}

                                      ];
                        $.fn.zTree.init($("#ztree1"), setting, zNodes);

                    })
                </script>

            </div>
            <div title="面板三">
                <!-- 展示ztree效果:简单json数据构造ztree树 -->
                <ul id="ztree2" class="ztree"></ul>
                <script type="text/javascript">
                    $(function(){
                        //页面加载完成后执行这段代码--动态创建ztree
                        var setting2 = {
                                data: {
                                    simpleData: {
                                        enable: true//使用简单json数据构造ztree节点
                                    }
                                }
                        };
                        //构造节点数据
                        var zNodes2 = [
                                      {"id":"1","pId":"0","name":"节点一"},//每个json对象表示一个节点数据
                                      {"id":"2","pId":"1","name":"节点二"},
                                      {"id":"3","pId":"2","name":"节点三"}

                                      ];
                        $.fn.zTree.init($("#ztree2"), setting2, zNodes2);

                    })
                </script>
            </div>
            <div title="面板四">
                <!-- 展示ztree效果:发送ajax请求获取json数据构造ztree树 -->
                <ul id="ztree3" class="ztree"></ul>
                <script type="text/javascript">
                    $(function(){
                        //页面加载完成后执行这段代码--动态创建ztree
                        var setting3 = {
                                data: {
                                    simpleData: {
                                        enable: true//使用简单json数据构造ztree节点
                                    }
                                },
                                callback: {
                                    //为ztree节点绑定单击事件
                                    onClick: zTreeOnClick
                                }
                        };

                        //发送ajax请求,获取json数据
                        //jQuery提供的ajax方法:ajax,post,get,load,getJSON,getScript
                        var url = "${pageContext.request.contextPath }/json/menu.json";
                        $.post(url,{},function(data){
                            //调用API初始化ztree
                            $.fn.zTree.init($("#ztree3"), setting3, data);
                        },'json');

                        function zTreeOnClick(event, treeId, treeNode) {
                              if(treeNode.page != undefined){
                                //判断选项卡是否打开
                                var e = $("#mytabs").tabs('exists',treeNode.name);
                                if(e){
                                    //已经存在,选中
                                    $("#mytabs").tabs('select',treeNode.name);
                                }else{
                                    //说明我们点击的是叶子节点,动态添加选项卡
                                    $("#mytabs").tabs('add',{
                                        title:treeNode.name,
                                        closable:true,
                                        content:'<iframe frameborder="0" width="100%" height="100%" src="'+treeNode.page+'"></iframe>'
                                    })
                                }
                            }
                        };
                    })
                </script>
            </div>
        </div>
    </div>
    <div data-options="region:'center'">
        <!-- 制作tabs选项卡面板 -->
        <div id="mytabs" class="easyui-tabs" data-options="fit:true">
            <!-- 使用子div表示每个面板 -->
            <div data-options="iconCls:'icon-save'" title="面板一">11</div>
            <div data-options="closable:true" title="面板二">22</div>
            <div title="面板三">33</div>
        </div>
    </div>
    <div style="width: 100px" data-options="region:'east'">east region</div>
    <div style="height: 50px" data-options="region:'south'">south region</div>
</body>
</html>

这里写图片描述

4 数据建模工具PowerDesigner使用方式

设计一张表,保存之后是一个.pdm文件

这里写图片描述
这里写图片描述
这里写图片描述

这里写图片描述

选择database>>generate database

这里写图片描述

直接拖进navicat

这里写图片描述

设计两张表,创建外键关联,从左边拉到右边(子表拉到父表)

这里写图片描述
这里写图片描述

这里写图片描述

这里写图片描述

5 myeclipse翻转引擎插件使用

第一步:切换到视图window>>open Perspective>>MyEclipse Hibernate

这里写图片描述

这里写图片描述

第二步:新建一个java项目,创建包com.zcl.bos.domain
项目右键>>MyEclipse>>Project Facets>>Install Hibernate Facet

这里写图片描述

这里写图片描述

第三步:重新切回MyEclipse Hibernate视图,找到需要的表,右键>>Hibernate Reverse engineering

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

注意:映射文件中catalog建议去掉
session(User.class,1)
select * from t_user where id=1;
select *from bos32.t_user where id=1;

这里写图片描述

6 项目底层代码构建(重点)

6.1 持久层代码抽取
这里写图片描述

IBaseDao接口
package com.zcl.bos.dao.base;

import java.io.Serializable;
import java.util.List;

/**
 * 持久层通用接口
 * @author Administrator
 *
 * @param <T>
 */
public interface IBaseDao<T> {
    public void add(T entity);
    public void delete(T entity);
    public void update(T entity);
    public T findById(Serializable id);
    public List<T> findAll();
}
BaseDaoImpl<T>实现类
关键点:获得entityClass 和 注入sessionFactory
package com.zcl.bos.dao.base.impl;

import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;

import javax.annotation.Resource;

import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;

import com.zcl.bos.dao.base.IBaseDao;

/**
 * 持久层通用实现
 * @author Administrator
 *
 * @param <T>
 */
public class BaseDaoImpl<T> extends HibernateDaoSupport implements IBaseDao<T> {
    //代表的是某个实体的类型
    private Class<T> entityClass;

    //因为使用注解开发,无法直接创建HibernateDaoSupport模板
    @Resource //根据类型注入spring工厂中的会话工厂对象sessionFactory
    public void setMySessionFactory(SessionFactory sessionFactory){
        super.setSessionFactory(sessionFactory);
    }

    //在父类BaseDaoImpl的构造方法中动态获得entityClass
    public BaseDaoImpl(){
        ParameterizedType superclass = (ParameterizedType) this.getClass().getGenericSuperclass();
        //获得父类上声明的泛型数组
        Type[] actualTypeArguments = superclass.getActualTypeArguments();
        entityClass = (Class<T>) actualTypeArguments[0];

    }


    public void add(T entity) {
        this.getHibernateTemplate().save(entity);
    }

    public void delete(T entity) {
        this.getHibernateTemplate().delete(entity);
    }

    public void update(T entity) {
        this.getHibernateTemplate().update(entity);
    }

    public T findById(Serializable id) {
        return this.getHibernateTemplate().get(entityClass, id);
    }

    public List<T> findAll() {
        String hql = "FROM "+entityClass.getSimpleName();
        return (List<T>) this.getHibernateTemplate().find(hql);
    }

}

6.2 表现层代码抽取
这里写图片描述

BaseAction<T>
package com.zcl.bos.web.action.base;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

/**
 * 表现层通用实现
 * @author Administrator
 *
 * @param <T>
 */
public class BaseAction<T> extends ActionSupport implements ModelDriven<T> {

    //模型对象
    private T model;

    //在构造方法中动态获取实体类型,通过反射来创建model对象
    public BaseAction(){
        ParameterizedType superclass = (ParameterizedType) this.getClass().getGenericSuperclass();
        //获取BaseAction上声明的泛型数组
        Type[] actualTypeArguments = superclass.getActualTypeArguments();
        //实现类
        Class<T> entityClass = (Class<T>) actualTypeArguments[0];
        //通过反射来创建对象
        try {
            model = entityClass.newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }

    public T getModel() {

        return model;
    }

}

6.3 测试BaseDao,在BaseDaoImpl的构造方法中设置断点,进行查看(项目需要重新发布)

IUserDao

package com.zcl.bos.dao;

import com.zcl.bos.dao.base.IBaseDao;
import com.zcl.bos.domain.User;

public interface IUserDao extends IBaseDao<User> {

}

UserDaoImpl

package com.zcl.bos.dao.impl;

import org.springframework.stereotype.Repository;

import com.zcl.bos.dao.IUserDao;
import com.zcl.bos.dao.base.impl.BaseDaoImpl;
import com.zcl.bos.domain.User;

@Repository
public class UserDaoImpl extends BaseDaoImpl<User> implements IUserDao {

}

6.4 测试BaseAction

UserAction

package com.zcl.bos.web.action;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.zcl.bos.domain.User;
import com.zcl.bos.web.action.base.BaseAction;

@Controller
//@Scope("prototype")//原型,多例,在项目启动的时候不会创建实例,只有单例对象才会在项目启动的时候创建实例
public class UserAction extends BaseAction<User> {

}

7 实现用户登陆

猜你喜欢

转载自blog.csdn.net/m0_37301141/article/details/80247811