旅游网项目(SpringBoot2.7.1 + SpringMVC + Mybatis-Plus3.5.0)

news2024/12/27 13:04:53

技术选型

JAVA版本:JDK17

数据库:Mysql5.7+Navicat

后端框架:SpringBoot3.0.6 + SpringMVC + Mybatis-Plus3.5.0

权限控制:SpringSecurity

前端框架:AdminLTE2

模板引擎:Thymeleaf

工具类:发邮件工具类、生成验证码工具类

其他技术:lombok、ajax、logback

  • 将数据库脚本导入数据库
  • 创建名为 "travel" springboot项目, 引入相关依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.0.6</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.hgy</groupId>
    <artifactId>travel</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>travel</name>
    <description>travel</description>
    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
<!--        mybatis-Plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.0</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>
  • 编写配置文件 application.yml
#端口
server:
  port: 80

#数据源
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql:///travel?serverTimezone=UTC
    username: root
    password: root

#配置mybatis-plus
mybatis-plus:
  global-config:
    db-config:
      #主键生成策略为自增
      id-type: auto
  configuration:
    #关闭列名自动驼峰命名映射
    map-underscore-to-camel-case: false
    #开启sql日志
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

# 日志格式
logging:
  pattern:
    console: '%d{HH:mm:ss.SSS} %clr(%-5level) ---  [%-15thread] %cyan(%-50logger{50}):%msg%n'

  • 在src目录中创建包

  •  将数据库相关实体类复制到pojo

  • controller包编写PageController类,用于跳转到Thymeleaf页面, 能跳转到前台页面也可以跳转到后台页面
package com.hgy.travel.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * TODO 类描述
 *
 * @author HGY
 * @date 2023/5/10 20:01
 */
@Controller
public class PageController {

   //访问后台页面
   @RequestMapping("/backstage/{page}")
   public String showPageBackstage(@PathVariable String page){
      return "/backstage/" + page;
   }

   //访问前台页面
   @RequestMapping("/frontdesk/{page}")
   public String showPageFrontdesk(@PathVariable String page){
      return "/frontdesk/" + page;
   }

   //忽略访问项目logo 可以写也可以不写
   @RequestMapping("favicon.ico")
   @ResponseBody
   void returnNoFavicon(){}

}
  • 在templates下编写前台和后台文件夹然后再backstage下创建一个demo.html然后启动项目进行测试


项目搭建_AdminLTE

官网: 

项目分为管理员端和用户端。管理员端负责管理网站资源,发布旅游产品;用户端可以查询旅游产品,收藏旅游产品等。两端使用的页面风格不同。在项目中,我们使用AdminLTE框架作为管理员端页面,使用自己编写的网页作为用户端页面。

AdminLTE是一款建立在bootstrap和jquery之上的开源的模板主题工具,它提供了一系列响应的、 可重复使用的组件,并内置了多个模板页面;同时自适应多种屏幕分辨率,兼容PC和移动端。通过AdminLTE,我们可以快速的创建一个响应式的Html5网站。AdminLTE框架在网页架构与设计上,有很大的辅助作用,尤其是前端架构设计师,用好AdminLTE 不但美观,而且可以免去写很大CSS与JS的工作量。

使用AdminLTE非常简单,只需要根据需求将需要的组件复制到我们的页面中即可。

  • 将dist中的静态资源复制到/static/backstage中。

编写后台首页

使用AdminLTE的模板页面编写后台首页index.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">

<head>
    <!-- 页面meta -->
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>首页</title>
    <link rel="stylesheet" href="/backstage/plugins/bootstrap/css/bootstrap.min.css">
    <link rel="stylesheet" href="/backstage/plugins/font-awesome/css/font-awesome.min.css">
    <link rel="stylesheet" href="/backstage/plugins/ionicons/css/ionicons.min.css">
    <link rel="stylesheet" href="/backstage/plugins/iCheck/square/blue.css">
    <link rel="stylesheet" href="/backstage/plugins/morris/morris.css">
    <link rel="stylesheet" href="/backstage/plugins/jvectormap/jquery-jvectormap-1.2.2.css">
    <link rel="stylesheet" href="/backstage/plugins/datepicker/datepicker3.css">
    <link rel="stylesheet" href="/backstage/plugins/daterangepicker/daterangepicker.css">
    <link rel="stylesheet" href="/backstage/plugins/bootstrap-wysihtml5/bootstrap3-wysihtml5.min.css">
    <link rel="stylesheet" href="/backstage/plugins/datatables/dataTables.bootstrap.css">
    <link rel="stylesheet" href="/backstage/plugins/treeTable/jquery.treetable.css">
    <link rel="stylesheet" href="/backstage/plugins/treeTable/jquery.treetable.theme.default.css">
    <link rel="stylesheet" href="/backstage/plugins/select2/select2.css">
    <link rel="stylesheet" href="/backstage/plugins/colorpicker/bootstrap-colorpicker.min.css">
    <link rel="stylesheet" href="/backstage/plugins/bootstrap-markdown/css/bootstrap-markdown.min.css">
    <link rel="stylesheet" href="/backstage/plugins/adminLTE/css/AdminLTE.css">
    <link rel="stylesheet" href="/backstage/plugins/adminLTE/css/skins/_all-skins.min.css">
    <link rel="stylesheet" href="/backstage/css/style.css">
    <link rel="stylesheet" href="/backstage/plugins/ionslider/ion.rangeSlider.css">
    <link rel="stylesheet" href="/backstage/plugins/ionslider/ion.rangeSlider.skinNice.css">
    <link rel="stylesheet" href="/backstage/plugins/bootstrap-slider/slider.css">
    <link rel="stylesheet" href="/backstage/plugins/bootstrap-datetimepicker/bootstrap-datetimepicker.css">
</head>

<body class="hold-transition skin-purple sidebar-mini">

<div class="wrapper">

    <!-- 页面头部 -->
    <header class="main-header">
        <!-- Logo -->
        <a href="all-admin-index.html" class="logo">
            <!-- mini logo for sidebar mini 50x50 pixels -->
            <span class="logo-mini"><b>数据</b></span>
            <!-- logo for regular state and mobile devices -->
            <span class="logo-lg"><b>数据</b>后台管理</span>
        </a>
        <!-- Header Navbar: style can be found in header.less -->
        <nav class="navbar navbar-static-top">
            <!-- Sidebar toggle button-->
            <a href="#" class="sidebar-toggle" data-toggle="offcanvas" role="button">
                <span class="sr-only">Toggle navigation</span>
            </a>
            <div class="navbar-custom-menu">
                <ul class="nav navbar-nav">
                    <!-- User Account: style can be found in dropdown.less -->
                    <li class="dropdown user user-menu">
                        <a href="#" class="dropdown-toggle" data-toggle="dropdown">
                            <img src="/backstage/img/user2-160x160.jpg" class="user-image" alt="User Image">
                            <span class="hidden-xs">管理员</span>
                        </a>
                        <ul class="dropdown-menu">
                            <!-- User image -->
                            <li class="user-header">
                                <img src="/backstage/img/user2-160x160.jpg" class="img-circle" alt="User Image">

                                <p>
                                    管理员 - 数据管理员
                                </p>
                            </li>
                            <!-- Menu Footer-->
                            <li class="user-footer">
                                <div class="pull-right">
                                    <a href="/admin/logout" class="btn btn-default btn-flat">注销</a>
                                </div>
                            </li>
                        </ul>
                    </li>

                </ul>
            </div>
        </nav>
    </header>
    <!-- 页面头部 /-->

    <!-- 导航侧栏 -->
    <aside class="main-sidebar">
        <!-- sidebar: style can be found in sidebar.less -->
        <section class="sidebar">
            <!-- Sidebar user panel -->
            <div class="user-panel">
                <div class="pull-left image">
                    <img src="/backstage/img/user2-160x160.jpg" class="img-circle" alt="User Image">
                </div>
                <div class="pull-left info">
                    <p>管理员</p>
                    <a href="#"><i class="fa fa-circle text-success"></i> 在线</a>
                </div>
            </div>
            <!-- sidebar menu: : style can be found in sidebar.less -->
            <ul class="sidebar-menu">
                <li class="header">菜单</li>
                <li id="admin-index"><a href="/backstage/index"><i class="fa fa-dashboard"></i> <span>首页</span></a>
                </li>
                <!-- 菜单 -->
                <li class="treeview" id="system">
                    <a href="#">
                        <i class="fa fa-folder"></i> <span>系统管理</span>
                        <span class="pull-right-container">
                        <i class="fa fa-angle-left pull-right"></i>
                    </span>
                    </a>
                    <ul class="treeview-menu">

                        <li id="admin">
                            <a href="/backstage/admin/all">
                                <i class="fa fa-circle-o"></i> 用户管理
                            </a>
                        </li>

                        <li id="role">
                            <a href="/backstage/role/all">
                                <i class="fa fa-circle-o"></i> 角色管理
                            </a>
                        </li>

                        <li id="permission">
                            <a href="/backstage/permission/all">
                                <i class="fa fa-circle-o"></i> 权限管理
                            </a>
                        </li>

                    </ul>
                </li>

                <li class="treeview" id="business">
                    <a href="#">
                        <i class="fa fa-laptop"></i> <span>业务管理</span>
                        <span class="pull-right-container">
                        <i class="fa fa-angle-left pull-right"></i>
                    </span>
                    </a>
                    <ul class="treeview-menu">

                        <li id="category">
                            <a href="/backstage/category/all">
                                <i class="fa fa-circle-o"></i> 类型管理
                            </a>
                        </li>

                        <li id="product">
                            <a href="/backstage/product/all">
                                <i class="fa fa-circle-o"></i> 产品管理
                            </a>
                        </li>

                    </ul>
                </li>

            </ul>
        </section>
        <!-- /.sidebar -->
    </aside>
    <!-- 导航侧栏 /-->

    <!-- 内容区域 -->
    <!-- @@master = admin-layout.html-->
    <!-- @@block = content -->

    <div class="content-wrapper">

    </div>
    <!-- @@close -->
    <!-- 内容区域 /-->

    <!-- 底部导航 -->
    <footer class="main-footer">
        <div class="pull-right hidden-xs">
            <b>Version</b> 1.0.8
        </div>
        <strong>Copyright &copy; <a href="http://www.itbaizhan.com">JAVA研究院</a>.</strong> All rights reserved.
    </footer>
    <!-- 底部导航 /-->

</div>


<script src="/backstage/plugins/jQuery/jquery-2.2.3.min.js"></script>
<script src="/backstage/plugins/jQueryUI/jquery-ui.min.js"></script>
<script>
    $.widget.bridge('uibutton', $.ui.button);
</script>
<script src="/backstage/plugins/bootstrap/js/bootstrap.min.js"></script>
<script src="/backstage/plugins/raphael/raphael-min.js"></script>
<script src="/backstage/plugins/morris/morris.min.js"></script>
<script src="/backstage/plugins/sparkline/jquery.sparkline.min.js"></script>
<script src="/backstage/plugins/jvectormap/jquery-jvectormap-1.2.2.min.js"></script>
<script src="/backstage/plugins/jvectormap/jquery-jvectormap-world-mill-en.js"></script>
<script src="/backstage/plugins/knob/jquery.knob.js"></script>
<script src="/backstage/plugins/daterangepicker/moment.min.js"></script>
<script src="/backstage/plugins/daterangepicker/daterangepicker.js"></script>
<script src="/backstage/plugins/daterangepicker/daterangepicker.zh-CN.js"></script>
<script src="/backstage/plugins/datepicker/bootstrap-datepicker.js"></script>
<script src="/backstage/plugins/datepicker/locales/bootstrap-datepicker.zh-CN.js"></script>
<script src="/backstage/plugins/bootstrap-wysihtml5/bootstrap3-wysihtml5.all.min.js"></script>
<script src="/backstage/plugins/slimScroll/jquery.slimscroll.min.js"></script>
<script src="/backstage/plugins/fastclick/fastclick.js"></script>
<script src="/backstage/plugins/iCheck/icheck.min.js"></script>
<script src="/backstage/plugins/adminLTE/js/app.min.js"></script>
<script src="/backstage/plugins/treeTable/jquery.treetable.js"></script>
<script src="/backstage/plugins/select2/select2.full.min.js"></script>
<script src="/backstage/plugins/colorpicker/bootstrap-colorpicker.min.js"></script>
<script src="/backstage/plugins/bootstrap-wysihtml5/bootstrap-wysihtml5.zh-CN.js"></script>
<script src="/backstage/plugins/bootstrap-markdown/js/bootstrap-markdown.js"></script>
<script src="/backstage/plugins/bootstrap-markdown/locale/bootstrap-markdown.zh.js"></script>
<script src="/backstage/plugins/bootstrap-markdown/js/markdown.js"></script>
<script src="/backstage/plugins/bootstrap-markdown/js/to-markdown.js"></script>
<script src="/backstage/plugins/ckeditor/ckeditor.js"></script>
<script src="/backstage/plugins/input-mask/jquery.inputmask.js"></script>
<script src="/backstage/plugins/input-mask/jquery.inputmask.date.extensions.js"></script>
<script src="/backstage/plugins/input-mask/jquery.inputmask.extensions.js"></script>
<script src="/backstage/plugins/datatables/jquery.dataTables.min.js"></script>
<script src="/backstage/plugins/datatables/dataTables.bootstrap.min.js"></script>
<script src="/backstage/plugins/chartjs/Chart.min.js"></script>
<script src="/backstage/plugins/flot/jquery.flot.min.js"></script>
<script src="/backstage/plugins/flot/jquery.flot.resize.min.js"></script>
<script src="/backstage/plugins/flot/jquery.flot.pie.min.js"></script>
<script src="/backstage/plugins/flot/jquery.flot.categories.min.js"></script>
<script src="/backstage/plugins/ionslider/ion.rangeSlider.min.js"></script>
<script src="/backstage/plugins/bootstrap-slider/bootstrap-slider.js"></script>
<script src="/backstage/plugins/bootstrap-datetimepicker/bootstrap-datetimepicker.js"></script>
<script src="/backstage/plugins/bootstrap-datetimepicker/locales/bootstrap-datetimepicker.zh-CN.js"></script>
<script>
    $(document).ready(function () {
        // 选择框
        $(".select2").select2();

        // WYSIHTML5编辑器
        $(".textarea").wysihtml5({
            locale: 'zh-CN'
        });
    });


    // 设置激活菜单
    function setSidebarActive(tagUri) {
        var liObj = $("#" + tagUri);
        if (liObj.length > 0) {
            liObj.parent().parent().addClass("active");
            liObj.addClass("active");
        }
    }


    $(document).ready(function () {
        setSidebarActive("admin-blank");
    });
</script>
</body>

</html>

提取统一后台模板

把头、菜单、footer、重复引入的资源等提取到一个模板.

提取完的index


后台用户管理_管理员列表

后台用户也称为管理员,每个管理员能在后台进行的操作不同,所以不同的管理员有不同的权限。在项目中,权限表的设计为用户—角色多对多,角色—权限多对多,既一个用户有多个角色,一个角色有多个权限。所以后台首先要拥有用户管理、角色管理、权限管理的功能。

我们首先编写用户管理中的查询用户功能。

编写AdminMapper

 编写AdminService

 在启动类扫描mapper接口,注册mybatis-plus分页插件

 编写AdminController

 


 管理员列表_前端页面 

编写页面admin_all.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">

<head>
    <title>用户管理</title>
    <th:block th:replace="/backstage/common_resources::common_css"></th:block>
    <th:block th:replace="/backstage/common_resources::common_js"></th:block>
</head>
<body class="hold-transition skin-purple sidebar-mini">
<!--头部-->
<header th:replace="/backstage/common_header::header"></header>
<!--菜单-->
<aside th:replace="/backstage/common_aside::aside"></aside>
<div class="wrapper">
    <div class="content-wrapper">

        <!-- 内容头部 -->
        <section class="content-header">
            <h1>
                用户管理
                <small>用户列表</small>
            </h1>
            <ol class="breadcrumb">
                <li><a href="@{/backstage/index}"><i class="fa fa-dashboard"></i> 首页</a></li>
                <li><a href="@{/backstage/admin/all}">用户管理</a></li>
                <li class="active">数据列表</li>
            </ol>
        </section>
        <!-- 内容头部 /-->

        <!-- 正文区域 -->
        <section class="content">
            <!-- .box-body -->
            <div class="box box-primary">
                <div class="box-header with-border">
                    <h3 class="box-title">列表</h3>
                </div>
                <div class="box-body">
                    <!-- 数据表格 -->
                    <div class="table-box">
                        <!--工具栏-->
                        <div class="pull-left">
                            <div class="form-group form-inline">
                                <div class="btn-group">
                                    <button type="button" class="btn btn-default" title="新建"><i
                                            class="fa fa-file-o"></i> 新建
                                    </button>
                                </div>
                            </div>
                        </div>
                        <!--数据列表-->
                        <table id="dataList" class="table table-bordered table-striped table-hover dataTable">
                            <thead>
                            <tr>
                                <th class="" style="padding-right:0px;">
                                    <input id="selall" type="checkbox" class="icheckbox_square-blue">
                                </th>
                                <th>用户名</th>
                                <th>邮箱</th>
                                <th>联系电话</th>
                                <th>状态</th>
                                <th class="text-center">操作</th>
                            </tr>
                            </thead>
                            <tbody>
                            <tr th:each="admin:${adminPage.records}">
                                <td><input name="ids" type="checkbox"></td>
                                <td th:text="${admin.username}"></td>
                                <td th:text="${admin.email}"></td>
                                <td th:text="${admin.phoneNum}"></td>
                                <td th:text="${admin.status}"></td>
                                <td class="text-center">
                                    <a th:href="@{/backstage/admin/desc(aid=${admin.aid})}" class="btn bg-olive btn-xs">详情</a>
                                    <a th:href="@{/backstage/admin/edit(aid=${admin.aid})}" class="btn bg-olive btn-xs">修改</a>
                                    <a th:href="@{/backstage/admin/findRole(aid=${admin.aid})}" class="btn bg-olive btn-xs">分配角色</a>
                                    <a th:href="@{/backstage/admin/updateStatus(aid=${admin.aid})}" class="btn bg-olive btn-xs">启用/禁用</a>
                                </td>
                            </tr>
                            </tbody>
                        </table>
                        <!--数据列表/-->
                    </div>
                    <!-- 数据表格 /-->
                </div>
                <!-- /.box-body -->

                <!-- .box-footer-->
                <div class="box-footer">
                    <div class="pull-left">
                        <div class="form-group form-inline">
                            总共<span th:text="${adminPage.pages}"></span>页,
                            共<span th:text="${adminPage.total}"></span>条数据。
                        </div>
                    </div>

                    <div class="box-tools pull-right">
                        <ul class="pagination">
                            <li>
                                <a href="#" aria-label="Previous">首页</a>
                            </li>
                            <li><a href="#">上一页</a></li>
                            <li><a href="#">1</a></li>
                            <li><a href="#">2</a></li>
                            <li><a href="#">3</a></li>
                            <li><a href="#">4</a></li>
                            <li><a href="#">5</a></li>
                            <li><a href="#">下一页</a></li>
                            <li>
                                <a href="#" aria-label="Next">尾页</a>
                            </li>
                        </ul>
                    </div>
                </div>
                <!-- /.box-footer-->
            </div>
        </section>
        <!-- 正文区域 /-->
    </div>
</div>
<!--尾部-->
<footer th:replace="/backstage/common_footer::footer"></footer>
</body>
</html>

在通用页面引入分页插件

 在admin_all页面下编写分页插件


新增管理员_前端页面

编写页面admin_add.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">

<head>
    <title>新增用户</title>
    <th:block th:replace="/backstage/common_resources::common_css"></th:block>
    <th:block th:replace="/backstage/common_resources::common_js"></th:block>
</head>
<body class="hold-transition skin-purple sidebar-mini">
<!--头部-->
<header th:replace="/backstage/common_header::header"></header>
<!--菜单-->
<aside th:replace="/backstage/common_aside::aside"></aside>
<div class="wrapper">
    <div class="content-wrapper">
        <!-- 内容头部 -->
        <section class="content-header">
            <h1>
                用户管理
                <small>新增用户</small>
            </h1>
            <ol class="breadcrumb">
                <li><a href="@{/backstage/index}"><i class="fa fa-dashboard"></i> 首页</a></li>
                <li><a href="@{/backstage/admin/all}">用户管理</a></li>
                <li class="active">新增用户</li>
            </ol>
        </section>
        <!-- 内容头部 /-->

        <!-- 正文区域 -->
        <section class="content">
            <form th:action="@{/backstage/admin/add}" method="post">
                <div class="row data-type">
                    <div class="col-md-2 title">用户名</div>
                    <div class="col-md-4 data">
                        <input type="text" class="form-control" placeholder="用户名" name="username">
                    </div>
                    <div class="col-md-2 title">密码</div>
                    <div class="col-md-4 data">
                        <input type="password" class="form-control" placeholder="密码" name="password" value="">
                    </div>
                    <div class="col-md-2 title">邮箱</div>
                    <div class="col-md-4 data">
                        <input type="text" class="form-control" placeholder="邮箱" name="email">
                    </div>
                    <div class="col-md-2 title">联系电话</div>
                    <div class="col-md-4 data">
                        <input type="text" class="form-control" placeholder="联系电话" name="phoneNum" value="">
                    </div>
                    <div class="col-md-2 title">用户状态</div>
                    <div class="col-md-4 data">
                        <select class="form-control" name="status">
                            <option value="true">开启</option>
                            <option value="false">关闭</option>
                        </select>
                    </div>

                    <div class="col-md-2 title"></div>
                    <div class="col-md-10 data text-center">
                        <button type="submit" class="btn bg-maroon">保存</button>
                        <button type="button" class="btn bg-default" onclick="history.back(-1);">返回</button>
                    </div>
                </div>
            </form>
        </section>
        <!-- 正文区域 /-->
    </div>
</div>
<!--尾部-->
<footer th:replace="/backstage/common_footer::footer"></footer>
</body>
</html>

AdminService类 

AdminController类 

 


修改管理员 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/594966.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WIN10系统解决IDEA动不动就卡顿一下

1、前言 不知为啥&#xff0c;最近idea一直在卡顿&#xff0c;输入几个代码都会卡两秒&#xff0c;鼠标滚动文件卡两秒&#xff0c;点击打开文件卡两秒&#xff0c;就算是点击上方的工具栏&#xff0c;它也要等两秒才会出来菜单&#xff01; 卡顿的时候整个idea直接无响应&a…

Java性能权威指南-总结3

Java性能权威指南-总结3 性能测试方法原则4:尽早频繁测试小结 Java性能调优工具箱操作系统的工具和分析CPU使用率 性能测试方法 原则4:尽早频繁测试 这是最后的原则。性能测试应该作为开发周期不可或缺的一部分。理想情况下&#xff0c;在代码提交到中心源代码仓库前&#xf…

【数据分享】1929-2022年全球站点的逐月最高气温(Shp\Excel\12000个站点)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、湿度等指标&#xff0c;其中又以气温指标最为常用&#xff01;说到气温数据&#xff0c;最详细的气温数据是具体到气象监测站点的气温数据&#xff01; 之前我们分享过1929-2022年全球气象站…

Win10搭建Nacos2.2.3集群版

Nacos是Alibaba提供的服务注册发现的管理平台&#xff0c;其优异的性能越来越受到广大开发者的喜爱&#xff0c;在构建分布式微服务项目中通常会首选Nacos作为注册/配置中心&#xff0c;在实际开发中为了提升服务的可用性和稳定性&#xff0c;通常都会搭建集群版&#xff0c;有…

《强风吹拂》呐!你喜欢跑步吗?

《强风吹拂》呐&#xff01;你喜欢跑步吗&#xff1f; 三浦紫苑&#xff0c;1976生于东京。主要作品有《多田便利屋》《强风吹拂》《哪啊哪啊~神去村》《编舟记》等 林佩瑾、李建铨、杨正敏 译 文章目录 《强风吹拂》呐&#xff01;你喜欢跑步吗&#xff1f;[toc]动漫摘录箱根驿…

Go Web下gin框架使用(一)

〇、前言 在前面&#xff0c;已经在这篇文章中详细地讨论了 gin 框架下的模板渲染问题&#xff0c;这篇文章主要对 gin 框架的使用进行讨论。 一、不同的路由 以下可以选择不同的路由进行渲染&#xff1a; r : gin.Default()type usr struct {Name string json:"name&…

八、go语言键盘输入和打印输出

键盘输入和打印输出 一、打印输出 1.1 fmt包 fmt包实现了类似C语言printf和scanf的格式化I/O。格式化verb&#xff08;‘verb’&#xff09;源自C语言但更简单。 详见官网fmt的API&#xff1a;https://golang.google.cn/pkg/fmt/ 1.2 导入包 import "fmt"1.3 常…

MyBatis——MyBatis项目搭建

但凡是框架&#xff0c;使用都是分三步走 1.导入jar文件&#xff0c;用maven导入 2.处理配置文件 3.开发业务代码 1.创建maven项目导入相关依赖 在pom文件中导入MyBatis相关依赖jar文件 安装lombok 在File->Settings Pugins 中安装lombok 要想启动lombok的话还需要在B…

GPT带你飞:Chat GPT吊打面试官,实时获取答案,分享调用OpenAI API key+完整源码脚本哦!

目录 福利&#xff1a;文末纯分享中文版CHAT GPT镜像&#xff0c;不存在魔法&#xff0c;纯分享免费使用 故事发生了 火爆GitHub 所以大家注意 网友看了之后调侃到&#xff0c;为了防止线上面试作弊&#xff0c;以后只好把面试都改成线下了。 如何安装 既然是调用GPT的AP…

nodejs基于vue的汽车订票客运站售票网站

使用Mysql创建数据表保存本系统产生的数据。系统可以提供信息显示和相应服务&#xff0c;其管理员负责审核会员充值&#xff0c;审核客户购票信息以及会员购票信息&#xff0c;管理客运班次与留言板&#xff0c;管理会员等级。客户查看客运班次&#xff0c;购买并支付车票&…

【Selenium】常用的Selenium基础使用模板和简单封装

前言 近来又用上了 Selneium &#xff0c;因为反复用到&#xff0c;所以在这里将一些常用的方法封装起来&#xff0c;方便后续的使用。 在这篇文章中&#xff0c;我们将探讨 Selenium 的基础模板和基础封装&#xff0c;以便更好地理解 Selenium 的使用方法。 在Selenium的使用…

python基础----03-----if语句、while、for循环、range语句、continue和break

一 布尔类型和比较运算符 1.1 布尔类型和比较运算符 定义变量存储布尔类型数据&#xff1a;变量名称 布尔类型字面量。 布尔类型不仅可以自行定义同时也可以通过计算的来。也就是使用比较运算符进行比较运算得到布尔类型的结果。在C/C中&#xff0c;比较运算符称之为关系运算…

如何解决航空企业数字化转型中的痛点?

数字化时代&#xff0c;越来越多的企业开始关注数字技术&#xff0c;希望通过数字化改造提高企业效率和竞争力&#xff0c;为企业创造更多的商机和利润。今天就来同大家探讨航空领域&#xff0c;小程序在企业数字化转型中发挥的作用、 航空业员工端App的敏捷转型挑战 技术上的…

Java 异常机制:是Java 提供的一种识别及响应错误的一致性机制。

。 目录 友情提醒第一章、异常概述1.1&#xff09;我们常说的异常是什么1.2&#xff09;异常的作用1.3&#xff09;Java异常体系和分类1.4&#xff09;演示异常的产生 第二章、定义异常与抛出异常&#xff1a;throw2.1&#xff09;自定义异常类&#xff1a;继承Exception或Run…

网络io与io多路复用select/poll/epoll

一、网络IO请求 网络I/O请求是指在计算机网络中&#xff0c;向其他主机或服务器发送请求或接收响应的操作。这些请求可以包括获取网页、下载文件、发送电子邮件等。网络I/O请求需要使用合适的协议和通信方式来进行数据传输&#xff0c;例如HTTP、FTP、SMTP等。 要完成一个完整…

字节面试过了,薪资都谈好了20K*13,结果挂在这里....

一般提到面试&#xff0c;肯定都会想问一下面试结果&#xff0c;我就大概的说一下面试结果&#xff0c;哈哈&#xff0c;其实不太想说&#xff0c;因为挺惨的&#xff0c;并没有像很多大佬一样 ”已拿字节阿里腾讯各大厂offer”&#xff0c;但是毕竟是自己的经历&#xff0c;无…

让效果图渲染做到最佳的几个小诀窍

制作出优秀的效果图需要多方面的技术支持&#xff0c;而渲染是其中非常关键的一步。一份精美的效果图需要经过高质量的渲染才能呈现出最佳的效果。本文将分享一些关于如何让效果图渲染做到最佳的小诀窍&#xff0c;包括专注的小细节、优化场景设置和灯光、纹理、图像应用最终修…

医疗电子红外线人体额温枪方案

在当前新冠疫情背景下&#xff0c;红外线人体额温枪成为疫情防控必备的设备之一。红外线人体额温枪采用红外线技术&#xff0c;无需接触人体&#xff0c;通过测量人体表面温度来判断人体是否发热。其测量快速、准确、不接触等特点&#xff0c;使其广泛应用于机场、车站、医院、…

数据结构之二叉树(Java)

在这里先说明一下&#xff0c;结点和节点其实一样的&#xff0c;无须关注这个。 一、树型结构 1. 概念&#xff1a;树是一种非线性的数据结构&#xff0c;它是由n个有限节点组成一个具有层次关系的集合。 如上图所示&#xff0c;把此种数据结构称作树是因为它看起来像一个倒挂…

校园高校教务选课成绩系统node.js+vue

系统主要实现了以下功能模块&#xff1a; 学籍信息 网上选课 网上评教&#xff0c;即对自己老师评分 任务查询&#xff0c;老师可以给学生发布任务&#xff08;类似于作业&#xff0c;考试&#xff09; 课表查询&#xff0c;希望有个图形化的课表&#xff0c;而不是表格式 教室…