在创建项目之前先说一下ide的问题,从学习软件开始一直到一个月之前,开发用的IDE都是Eclipse,对,就是这个远古时代的开发工具,在使用过程中虽然总是遇到各种bug,但内心里还是存在着一丝理解的想法的,因为自己写的代码也会存在很多bug,有些甚至很低端,所以开发工具存在问题也是有情可原的。而且还免费,还要什么自行车呢?但是最近工作中发现同事里大部分都在用Idea,虽然只是开发工具的不同而已,不过在具体使用的过程中还是存在很多问题的,比如:由于开发工具的验证方式不同,很多在Eclipse中写的代码没有问题,但是到了Idea中就会出现检查异常,最简单的例子,在eclipse中的这段代码就是没有问题的,但是到了Idea中就会存在问题。

  所以为了工作顺利,果断跳入Idea的坑。因此,这里的项目开发工具也是Idea,下面进入正题。

  之前说过,这个项目使用Springboot框架整合Mybatis,数据库使用mysql,是一个典型的springboot项目。除了典型的mysql、mybatis、web等依赖之外还加了lombok这个依赖,很实用。

  

  一路下一步直到项目创建完成。完成之后打开pom文件,添加数据库连接池驱动,这里实用阿里的druid连接池。代码如下:

<?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 http://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>2.1.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.hatten</groupId>
<artifactId>hihi-video</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>hihi-Video</name>
<description>a video website like bilibili</description> <properties>
<java.version>1.8</java.version>
</properties> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.12</version>
</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>
</dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> </project>

  这里需要注意:依赖文件的版本一定要合适,尤其是MySQL数据库版本、druid、mybaits、jdbc的版本一定要合适,自己当时创建项目的时候就因为版本的问题,搞了好长时间。所以项目创建完成之后一定要及时做测试,发现问题及时解决。

  准备工作完成,可以着手写代码了。

  第一步:创建Application启动类,这也是SpringBoot相比于传统的Spring框架的优势,直接一个main方法启动,不需要再配置Tomcat了,因为springboot内集成了一个Tomcat,所以也就不会出现之前的写了代码没编译、即使编译了也没部署Tomcat直接走缓存的情况。

package com.hatten.hihivideo;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@MapperScan("com.hatten.hihivideo.dao")
@SpringBootApplication
public class HiHiVideoApplication {
public static void main(String[] args) {
SpringApplication.run(HiHiVideoApplication.class, args);
}
}

  这是一个典型的springboot整合mybatis的启动类,其中@SpringBootApplication注解是在springboot2.0中出现的注解,表示这是一个启动类也是一个配置类。@MapperScan包扫描注解,功能相当于配置文件中的包扫描,用于标注mapper或者称为dao接口的包路径,可以配置多个,需要用“,”隔开。也可以不适用这个注解,但需要在每一个dao接口上加一个@Mapper注解,表示这是一个交给Spring管理的Bean,这里为了省事直接用包扫描。

  第二步:在java下创建controller、service、dao、entity、utils几个包,分别用于存放*Controller类、*Service类、*Dao接口、实体类、工具类。在resources下新建mapper目录,用于存放*Dao.xml文件,目录结构如下:

  

  这里需要注意:Application启动类一定要放在最外层目录,这样整个项目才能启动起来。

  第三步:编辑application.properties文件,这是springboot项目中唯一的配置文件,所有的配置都会放在这个文件中,当然如果配置日志或者其他功能也可以通过添加相应的配置文件的方式实现。application也可以通过yml文件的形式配置,只是形式上的不同,每有太大差别。配置文件如下:

server.port=8080
server.servlet.context-path=/
#配置数据源
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/hihi_video?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT
spring.datasource.username=root
spring.datasource.password=root
#配置静态资源存放路径
spring.resources.static-locations=classpath:/static/
#配置mapper.xml文件路径
mybatis.mapper-locations=classpath:/mapper/*.xml
#下划线对应驼峰规则
mybatis.configuration.map-underscore-to-camel-case=true

  在这个阶段需要配置的东西不是很多,主要配置Tomcat端口号、访问路径,数据源,mapper文件路径,静态资源路径即可,也可以配置mybatis的下划线驼峰对应规则,用于将数据库中的字段名和实体类中的属性名一一对应。

  第四步:创建测试类,包括(测试Controller、测试Service、测试Dao、测试实体类、测试mapper.xml文件、测试html文件),分别测试页面跳转和数据传递功能。代码如下:

  ①Controller类:

package com.hatten.hihivideo.controller;

import com.hatten.hihivideo.entity.vo.SysResultVo;
import com.hatten.hihivideo.service.TestService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; @Controller
@RequestMapping("/test")
public class TestController {
@Autowired
private TestService testService; /**
* 测试页面跳转
* @return
*/
@RequestMapping("/page")
public String pageTest(){
return "/page/page-test.html";
} /**
* 测试数据传输
* @return
*/
@RequestMapping("/get/json")
@ResponseBody
public SysResultVo getJsonResult(){
return SysResultVo.ok(testService.getJsonResult());
}
}

  ②Service类:

package com.hatten.hihivideo.service;

import com.hatten.hihivideo.dao.TestDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import java.util.List; @Service
public class TestService {
@Autowired
private TestDao testDao; public List getJsonResult(){
List demos=testDao.getJsonResult();
return demos;
}
}

  ③Dao接口:

package com.hatten.hihivideo.dao;

import org.springframework.stereotype.Component;

import java.util.List;
@Component
public interface TestDao {
List getJsonResult();
}

  ④mapper.xml文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hatten.hihivideo.dao.TestDao">
<select id="getJsonResult" resultType="com.hatten.hihivideo.entity.HiHiDemo">
select * from hihi_demo
</select>
</mapper>

  ⑤实体类:

package com.hatten.hihivideo.entity;

import lombok.Data;
import lombok.experimental.Accessors; import java.io.Serializable; @Data //省略无参构造、get、set方法
@Accessors(chain = true) //链式结构
public class HiHiDemo implements Serializable {
private Integer demoId;
private String demoName;
private String demoDesc;
}

  在这里可以看到引入lambok的优势,不用在写大段的get和set方法,而且能使用链式结构,让代码十分简洁。

  ⑥html文件:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Page-Test</title>
</head>
<body>
<h1>Page-Test</h1>
<p>This is a page-test-html</p>
</body>
</html>

  第五步:到这里就可以开始测试了,启动application类,在浏览器输入相应地址进行测试,测试结果如下:

  

  启动成功!!!!!!!

  

  页面正常访问!!!!!!!!!!!!

  

  数据传输正常!!!!!!!!!!!!!!!!!!!!!!!!!

  对了,应该还需要验证一下数据库中的数据是什么样的才对:

  

  数据也没有问题,项目环境搭建成功!!!!之后就可以着手开发了。。。。这才刚刚是个开始,而已。

  ============================分割线,以下有知识点=====================================

  关于代码中的SysResult类,它的作用就是向前端页面传递数据,对数据进行一次封装,并加入一些状态信息或者消息,方便前后端交互用的。在实际开发过程中每个公司应该都会使用自己公司的代码,我的代码是这样的,可以当做参考:

package com.hatten.hihivideo.entity.vo;

import java.io.Serializable;

public class SysResultVo implements Serializable {
private static final long serialVersionUID = -7368493786259905794L;
/**
* 状态码
*/
private int state = 1;//1-OK,0-Error
/**
* 状态码对应的消息
*/
private String message = "OK";
/**
* 要呈现到客户端的数据
*/
private Object data; public SysResultVo() {
} public SysResultVo(String message) {
this.message = message;
} public SysResultVo(Object data) {
this.data = data;
} public SysResultVo(Throwable e) {
this.state = 0;
this.message = e.getMessage();
} public int getState() {
return state;
} public void setState(int state) {
this.state = state;
} public String getMessage() {
return message;
} public void setMessage(String message) {
this.message = message;
} public Object getData() {
return data;
} public void setData(Object data) {
this.data = data;
} /**
* 静态方法,用于返回正确数据
* @param data
* @return
*/
public static SysResultVo ok(Object data){
return new SysResultVo(data);
} /**
* 静态方法,用于返回错误信息
* @param msg
* @return
*/
public static SysResultVo fail(String msg){
SysResultVo result=new SysResultVo();
result.setState(0);
result.setMessage(msg);
return result;
} }

=======================代码已更新至GitHub,并持续更新==========================

https://github.com/Mysterious-gt/HiHi-Video.git

网站后台搭建--springboot项目是如何创建的的更多相关文章

  1. idea:spring initializr无web勾选,maven方式搭建springboot项目。jdk7创建springboot项目的版本不兼容问题。

    一.idea 使用spring initializr不选择web搭建springboot项目 1.file => new => project 2.直接next到finish结束. 3.完 ...

  2. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-1.快速搭建SpringBoot项目,采用Eclipse

    笔记 1.快速搭建SpringBoot项目,采用Eclipse     简介:使用SpringBoot start在线生成项目基本框架并导入到eclipse中 1.站点地址:http://start. ...

  3. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-2.快速搭建SpringBoot项目,采用IDEA

    笔记 2.快速搭建SpringBoot项目,采用IDEA     简介:使用SpringBoot start在线生成项目基本框架并导入到IDEA中 参考资料:         IDEA使用文档    ...

  4. linux下后台启动springboot项目

    linux下后台启动springboot项目 我们知道启动springboot的项目有三种方式: 运行主方法启动 使用命令 mvn spring-boot:run”在命令行启动该应用 运行“mvn p ...

  5. 在线官网Spring Initializr 或 IntelliJ IDEA 快速搭建springboot项目

    Spring Boot是由Pivotal团队提供的全新框架,设计目的是用来简化新Spring应用的初始搭建以及开发过程.它主要推崇的是'消灭配置’,实现零配置. 那么,如何快速新建一个一个spring ...

  6. springboot:基础学习一 linux下后台启动springboot项目

    我们知道启动springboot的项目有三种方式: 运行主方法启动 使用命令 mvn spring-boot:run”在命令行启动该应用 运行“mvn package”进行打包时,会打包成一个可以直接 ...

  7. SpringBoot从入门到精通一(idea优雅搭建SpringBoot项目)

    前言 在没有SpringBoot之前,我们搭建的是SSM(SpingMVC+Spring+Mybatis)项目,在搭建SSM项目的时候,我们要经过一系列的繁琐配置,例如:application,web ...

  8. linux下后台启动springboot项目(转载)

    我们知道启动springboot的项目有三种方式: 运行主方法启动 使用命令 mvn spring-boot:run”在命令行启动该应用 运行“mvn package”进行打包时,会打包成一个可以直接 ...

  9. 使用IDEA快速搭建Springboot项目

    Spring Boot是由Pivotal团队提供的全新框架,设计目的是用来简化新Spring应用的初始搭建以及开发过程.它主要推崇的是'消灭配置’,实现零配置. 下面就介绍一下如何使用idea快速搭建 ...

随机推荐

  1. OO第二单元单元总结

    总述 OO的第二单元主题是电梯调度,与第一单元注重对数据的输入输出的处理.性能的优化不同,第二单元的重心更多的是在线程安全与线程通信上.这此次单元实验之前,我并未对线程有过了解,更谈不上“使用经验”, ...

  2. appium sendkeys 输入数字丢失问题

    参考:https://blog.csdn.net/rainshine1190/article/details/82814503

  3. 编写一个javscript函数 fn,该函数有一个参数 n(数字类型),其返回值是一个数组,该数组内是 n 个随机且不重复的整数,且整数取值范围是 [2, 32]。

    function fn(n){ if(n<2 || n>32) { return; }  if(!n) { return;}  //判断n是否为数字  if(!/^[0-9]+.?[0-9 ...

  4. [c#.net]遍历一个对象中所有的属性和值

    利用反射 SpDictItem sp = GetCFHObject.GetSpItem("); PropertyInfo[] propertys = sp.GetType().GetProp ...

  5. s6 传输层

    标题 s6-1 传输层概述(2019-04-06 21:19) s6-2 UDP(2019-04-07 08:39) s6-3 通信模型(2019-04-07 08:47) s6-4 TCP 数据段( ...

  6. 实践中 XunSearch(讯搜)更新索引方案对比

    检测PHP-SDK的运行条件(查看是否支持XunSearch)   $prefix/sdk/php/util/RequiredCheck.php $prefix #替换成你的安装目录 使用 XunSe ...

  7. Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes

    Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes 题目连接: http://code ...

  8. 可遇不可求的Question之SQLSERVER触发器不支持多行插入操作篇

    描述: 我们经常遇到 insert table_a select * from table_b 这样的语句, 同时在表table_a中根据每一条新增的SQL语句,通过触发器来触发对应的一系列的后续操作 ...

  9. fiddler中断request,修改参数问题

    fiddler正在学习阶段,遇到了一个问题,就是bpu url后,不会修改参数,今天实验了几次,总算成功了 下面写一下步骤: 1.先打开fiddler 2.打开网站,如百度,在文本框输入1,记住!不要 ...

  10. Python成绩雷达图

    代码 import numpy as np import matplotlib import matplotlib.pyplot as plt matplotlib.rcParams['font.fa ...