SpringBoot+Vue全栈的一个简单入门案例

目录

开发环境

Github开源项目

入门一:跑起别人的开源项目

跑起前端Vue

跑起后端SpringBoot

运行效果

入门二:将HTML模板转成Vue组件

下载一个免费的HTML模板

通过Trae将HTML转成Vue组件

将生成Vue组件增加为Vue的一个路由节点

运行Vue看看效果​编辑


开发环境

  • IntelliJ IDEA 2024.3.5 (Ultimate Edition):后端SpringBoot
  • WebStorm 2025.1:前端Vue
  • JDK21
  • Maven3.99
  • MySQL5.7/8.0
  • Node.js18.16.1
  • TraeCN0.5.6:免费AI IDE,提高工作效率
  • Navicat17

安装配置自行百度。

Github开源项目

入门一:跑起别人的开源项目

跑起前端Vue

  1. WebStorm打开todo-list-fullstack\client项目,执行npm install安装依赖;
  2. WebStorm添加npm运行配置,功能是执行npm run dev;
  3. 运行Vue

跑起后端SpringBoot

IDEA打开server/pom.xml导入工程

  1. 源项目数据库是postgresql,改为MySQL;
    1. pom.xml添加MySQL Driver依赖;
    2. application.properties添加MySQL配置
      spring.datasource.url=jdbc:mysql://127.0.0.1:3306/FinalProject?characterEncoding=utf8&useSSL=false
      spring.datasource.username=root
      spring.datasource.password=root
      spring.datasource.driver-class-name=com.mysql.jdbc.Driver
  2. MySQL建立库和表;
    1. 使用字节的Trae处理todo-list-fullstack\database\create-script.sql,删除所有注释;
      drop table if exists users, user_roles;
      create table users (
          username varchar(255) primary key,
          email varchar(255),
          password varchar(255)
      );
      
      create table user_roles (
          username varchar(255),
          role varchar(255),
          primary key (username, role)
      );
      
      insert into users (username, password, email) values ('admin', '$2a$10$/2cfdNAuBaJOK/GeCG7r6.eU8a2jdqivs81fhpYdHBFk1L0dfZN3W', 'admin@example.com');
      insert into user_roles (username, role) values ('admin', 'ADMIN');
      
      drop table if exists todos;
      create table todos (
          id serial primary key,
          title varchar(255),
          completed boolean default false
      );
      
      insert into todos (title) values ('Wash dishes');
      insert into todos (title) values ('Feed Loki');
      insert into todos (title) values ('Feed Cat');
    2. 新建数据库finalproject,并执行create-script.sql建立表

  3. 修改数据库用户admin登录密码为1234567890;

    1. 编辑server/Daos/JdbcUserDao.java,添加代码打断点后得到加密后的密码字符串;

      public JdbcUserDao(DataSource dataSource, PasswordEncoder passwordEncoder) {
              template = new JdbcTemplate(dataSource);
              this.passwordEncoder = passwordEncoder;
              // admin 1234567890 
              var x = passwordEncoder.encode("1234567890");
              // x = $2a$10$WbdzQ/8qfnx6MfQKgmkbceU/cQMshqarx1I42Y2619avW3yhdZWXC
          }

    2. 将生成的密码替换到数据库表user;

  4. 启动SpringBoot服务;

运行效果

入门二:将HTML模板转成Vue组件

下载一个免费的HTML模板

通过Trae将HTML转成Vue组件

  1. Vue项目新建文件夹src\template\login并将下载的HTML模板解压到src\template\login;
  2. 使用Trae将index.html转成Vue组件并改为Register.vue放入src\views;
    <!DOCTYPE html>
    <html lang="en"><!-- Basic -->
    <head>
    	<meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">   
       
        <!-- Mobile Metas -->
        <meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
     
         <!-- Site Metas -->
        <title>Login and Register tabbed form</title>  
        <meta name="keywords" content="">
        <meta name="description" content="">
        <meta name="author" content="">
    
        <!-- Site Icons -->
        <link rel="shortcut icon" href="images/favicon.ico" type="image/x-icon">
        <link rel="apple-touch-icon" href="images/apple-touch-icon.png">
    
        <!-- Bootstrap CSS -->
        <link href="css/bootstrap.min.css" rel="stylesheet">
    	<!-- Site CSS -->
        <link rel="stylesheet" href="css/style.css"> 
    	<!-- Fontawesome CSS -->
        <link rel="stylesheet" href="css/all.min.css">  	
        <!-- Responsive CSS -->
        <link rel="stylesheet" href="css/responsive.css">
        <!-- Custom CSS -->
        <link rel="stylesheet" href="css/custom.css">
    
        <!--[if lt IE 9]>
          <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
          <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
        <![endif]-->
    
    </head>
    
    <body>
    <div id="particles-js" class="main-form-box">
    	<div class="md-form">
    		<div class="container">
    			<div class="row">
    				<div class="col-md-6 offset-md-3">
    					<div class="panel panel-login">
    						<div class="logo-top">
    							<a href="#"><img src="images/logo.png" alt="" /></a>
    						</div>
    						<div class="panel-heading">
    							<div class="row">
    								<div class="col-lg-6 col-sm-6 col-xl-6">
    									<a href="#" class="active" id="login-form-link">Login</a>
    								</div>
    								<div class="col-lg-6 col-sm-6 col-xl-6">
    									<a href="#" id="register-form-link">Register</a>
    								</div>
    								<div class="or">OR</div>
    							</div>
    						</div>
    						<div class="panel-body">
    							<div class="row">
    								<div class="col-lg-12">
    									<form id="login-form" action="#" method="post" role="form" style="display: block;">
    										<div class="form-group">
    											<label class="icon-lp"><i class="fas fa-user-tie"></i></label>
    											<input type="text" name="username" id="username" tabindex="1" class="form-control" placeholder="Username" value="" required="">
    										</div>
    										<div class="form-group">
    											<label class="icon-lp"><i class="fas fa-key"></i></label>
    											<input type="password" name="password" id="password" tabindex="2" class="form-control" placeholder="Password" required="">
    										</div>
    										<div class="che-box">
    											<label class="checkbox-in">
    												<input name="checkbox" type="checkbox" tabindex="3" id="remember"> <span></span>
    												Remember Me
    											</label>
    										</div>
    										<ul>
    											<li>
    												<button class="fb"><i class="fab fa-facebook-f"></i> Connect with Facebook</button>
    											</li>
    											<li>
    												<button class="tw"><i class="fab fa-twitter"></i> Connect with Twitter</button>
    											</li>
    										</ul>
    										<div class="form-group">
    											<div class="row">
    												<div class="col-sm-6 offset-sm-3">
    													<input type="submit" name="login-submit" id="login-submit" tabindex="4" class="form-control btn btn-login" value="Log In">
    												</div>
    											</div>
    										</div>
    										<div class="form-group">
    											<div class="row">
    												<div class="col-lg-12">
    													<div class="text-center">
    														<a href="#" tabindex="5" class="forgot-password">Forgot Password?</a>
    													</div>
    												</div>
    											</div>
    										</div>
    									</form>
    									<form id="register-form" action="#" method="post" role="form" style="display: none;">
    										<div class="form-group">
    											<label class="icon-lp"><i class="fas fa-user-tie"></i></label>
    											<input type="text" name="username" id="username" tabindex="1" class="form-control" placeholder="Username" value="" required="">
    										</div>
    										<div class="form-group">
    											<label class="icon-lp"><i class="fas fa-envelope"></i></label>
    											<input type="email" name="email" id="email" tabindex="1" class="form-control" placeholder="Email Address" value="" required="">
    										</div>
    										<div class="form-group">
    											<label class="icon-lp"><i class="fas fa-key"></i></label>
    											<input type="password" name="password" id="password" tabindex="2" class="form-control" placeholder="Password" required="">
    										</div>
    										<div class="form-group">
    											<label class="icon-lp"><i class="fas fa-key"></i></label>
    											<input type="password" name="confirm-password" id="confirm-password" tabindex="2" class="form-control" placeholder="Confirm Password" required="">
    										</div>
    										<ul>
    											<li>
    												<button class="fb"><i class="fab fa-facebook-f"></i> Connect with Facebook</button>
    											</li>
    											<li>
    												<button class="tw"><i class="fab fa-twitter"></i> Connect with Twitter</button>
    											</li>
    										</ul>
    										
    										<div class="che-box">
    											<label class="checkbox-in"> 
    												<input name="checkbox" type="checkbox"> <span></span>I agree to the <a href="#"> Terms and Conditions </a> and <a href="#">Privacy Policy </a>
    											</label>
    										</div>
    										
    										<div class="form-group">
    											<div class="row">
    												<div class="col-sm-6 offset-sm-3">
    													<input type="submit" name="register-submit" id="register-submit" tabindex="4" class="form-control btn btn-register" value="Register Now">
    												</div>
    											</div>
    										</div>										
    									</form>
    								</div>
    							</div>
    						</div>
    					</div>
    					
    					<p class="footer-company-name">All Rights Reserved. &copy; 2018 <a href="#">Login Register</a> <a target="_blank" href="http://www.mobanwang.com/" title="网页模板">网页模板</a></p>
    					
    				</div>
    			</div>
    		</div>	
    	</div>
    	
    </div>
    
    	
    <script src="js/jquery.min.js"></script>
    <script src="js/bootstrap.min.js"></script>
    <script src="js/particles.min.js"></script>
    <script src="js/index.js"></script>
    	<script type="text/javascript">
    		$(function() {
    			$('#login-form-link').click(function(e) {
    				$("#login-form").delay(100).fadeIn(100);
    				$("#register-form").fadeOut(100);
    				$('#register-form-link').removeClass('active');
    				$(this).addClass('active');
    				e.preventDefault();
    			});
    			$('#register-form-link').click(function(e) {
    				$("#register-form").delay(100).fadeIn(100);
    				$("#login-form").fadeOut(100);
    				$('#login-form-link').removeClass('active');
    				$(this).addClass('active');
    				e.preventDefault();
    			});
    		});
    		
    		$('.form-group input').focus(function () {
    			$(this).parent().addClass('addcolor');
    		}).blur(function () {
    			$(this).parent().removeClass('addcolor');
    		});
    		
    	</script>
    </body>
    </html>
    
    <script setup>
    import { ref } from 'vue'
    import serverApi from '../services/server-api';
    
    const activeForm = ref('login')
    
    const toggleForm = (formName) => {
      activeForm.value = formName
    }
    
    const handleFocus = (e) => {
      e.target.parentElement.classList.add('addcolor')
    }
    
    const handleBlur = (e) => {
      e.target.parentElement.classList.remove('addcolor')
    }
    </script>
    
    <template>
      <div id="particles-js" class="main-form-box">
        <div class="md-form">
          <div class="container">
            <div class="row">
              <div class="col-md-6 offset-md-3">
                <div class="panel panel-login">
                  <div class="logo-top">
                    <a href="#"><img src="/src/template/login/images/logo.png" alt="" /></a>
                  </div>
                  <div class="panel-heading">
                    <div class="row">
                      <div class="col-lg-6 col-sm-6 col-xl-6">
                        <a href="#" 
                           :class="{ active: activeForm === 'login' }" 
                           @click.prevent="toggleForm('login')">
                          Login
                        </a>
                      </div>
                      <div class="col-lg-6 col-sm-6 col-xl-6">
                        <a href="#" 
                           :class="{ active: activeForm === 'register' }" 
                           @click.prevent="toggleForm('register')">
                          Register
                        </a>
                      </div>
                      <div class="or">OR</div>
                    </div>
                  </div>
                  <div class="panel-body">
                    <div class="row">
                      <div class="col-lg-12">
                        <form id="login-form" v-show="activeForm === 'login'">
                          <div class="form-group">
                            <label class="icon-lp"><i class="fas fa-user-tie"></i></label>
                            <input type="text" 
                                   name="username" 
                                   @focus="handleFocus" 
                                   @blur="handleBlur" 
                                   class="form-control" 
                                   placeholder="Username" 
                                   required>
                          </div>
                          <div class="form-group">
                            <label class="icon-lp"><i class="fas fa-key"></i></label>
                            <input type="password" 
                                   name="password" 
                                   @focus="handleFocus" 
                                   @blur="handleBlur" 
                                   class="form-control" 
                                   placeholder="Password" 
                                   required>
                          </div>
                          <div class="che-box">
                            <label class="checkbox-in">
                              <input name="checkbox" type="checkbox"> <span></span>
                              Remember Me
                            </label>
                          </div>
                          <ul>
                            <li>
                              <button class="fb"><i class="fab fa-facebook-f"></i> Connect with Facebook</button>
                            </li>
                            <li>
                              <button class="tw"><i class="fab fa-twitter"></i> Connect with Twitter</button>
                            </li>
                          </ul>
                          <div class="form-group">
                            <div class="row">
                              <div class="col-sm-6 offset-sm-3">
                                <input type="submit" class="form-control btn btn-login" value="Log In">
                              </div>
                            </div>
                          </div>
                          <div class="form-group">
                            <div class="row">
                              <div class="col-lg-12">
                                <div class="text-center">
                                  <a href="#" class="forgot-password">Forgot Password?</a>
                                </div>
                              </div>
                            </div>
                          </div>
                        </form>
    
                        <form id="register-form" v-show="activeForm === 'register'">
                          <div class="form-group">
                            <label class="icon-lp"><i class="fas fa-user-tie"></i></label>
                            <input type="text" 
                                   name="username" 
                                   @focus="handleFocus" 
                                   @blur="handleBlur" 
                                   class="form-control" 
                                   placeholder="Username" 
                                   required>
                          </div>
                          <div class="form-group">
                            <label class="icon-lp"><i class="fas fa-envelope"></i></label>
                            <input type="email" 
                                   name="email" 
                                   @focus="handleFocus" 
                                   @blur="handleBlur" 
                                   class="form-control" 
                                   placeholder="Email Address" 
                                   required>
                          </div>
                          <div class="form-group">
                            <label class="icon-lp"><i class="fas fa-key"></i></label>
                            <input type="password" 
                                   name="password" 
                                   @focus="handleFocus" 
                                   @blur="handleBlur" 
                                   class="form-control" 
                                   placeholder="Password" 
                                   required>
                          </div>
                          <div class="form-group">
                            <label class="icon-lp"><i class="fas fa-key"></i></label>
                            <input type="password" 
                                   name="confirm-password" 
                                   @focus="handleFocus" 
                                   @blur="handleBlur" 
                                   class="form-control" 
                                   placeholder="Confirm Password" 
                                   required>
                          </div>
                          <ul>
                            <li>
                              <button class="fb"><i class="fab fa-facebook-f"></i> Connect with Facebook</button>
                            </li>
                            <li>
                              <button class="tw"><i class="fab fa-twitter"></i> Connect with Twitter</button>
                            </li>
                          </ul>
                          
                          <div class="che-box">
                            <label class="checkbox-in"> 
                              <input name="checkbox" type="checkbox"> <span></span>I agree to the <a href="#"> Terms and Conditions </a> and <a href="#">Privacy Policy </a>
                            </label>
                          </div>
                          
                          <div class="form-group">
                            <div class="row">
                              <div class="col-sm-6 offset-sm-3">
                                <input type="submit" class="form-control btn btn-register" value="Register Now">
                              </div>
                            </div>
                          </div>                                      
                        </form>
                      </div>
                    </div>
                  </div>
                </div>
                
                <p class="footer-company-name">All Rights Reserved. &copy; 2018 <a href="#">Login Register</a> <a target="_blank" href="http://www.mobanwang.com/" title="网页模板">网页模板</a></p>
                
              </div>
            </div>
          </div>  
        </div>
      </div>
    </template>
    
    <style scoped>
    @import url('/src/template/login/css/bootstrap.min.css');
    @import url('/src/template/login/css/style.css');
    @import url('/src/template/login/css/all.min.css');
    @import url('/src/template/login/css/responsive.css');
    
    #login-form, #register-form {
      transition: opacity 0.1s ease;
    }
    </style>

将生成Vue组件增加为Vue的一个路由节点

  1. src/router/index.js;注意导入组件
    import Register from "@/views/Register.vue";
  2. src/App.vue添加节点;

运行Vue看看效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值