文档章节

网站后台搭建--springboot项目是如何创建的

o
 osc_w9s1w4o0
发布于 2019/04/14 21:09
字数 1983
阅读 9
收藏 0

精选30+云产品,助力企业轻松上云!>>>

  在创建项目之前先说一下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

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
一步一步实现web程序信息管理系统之二----后台框架实现跳转登陆页面

SpringBoot springboot的目的是为了简化spring应用的开发搭建以及开发过程。内部使用了特殊的处理,使得开发人员不需要进行额外繁锁的xml文件配置的编写,其内部包含很多模块的配置只需要添加...

osc_7zyqbo9l
2018/11/08
1
0
一步步实现web程序信息管理系统之二--后台框架实现跳转登陆页面

SpringBoot springboot的目的是为了简化spring应用的开发搭建以及开发过程。内部使用了特殊的处理,使得开发人员不需要进行额外繁锁的xml文件配置的编写,其内部包含很多模块的配置只需要添加...

编程SHA
2018/11/08
199
0
IDEAL零开始搭建SpringBoot工程

https://blog.csdn.net/u013248535/article/details/55100979 2017年02月15日 20:00:14 阅读数:91806 标签: SpringBootJPAMVC 个人分类: SpringBoot的具体介绍可以参看其他网上介绍,这里...

osc_28q3csny
2018/08/24
18
0
spring boot之从零开始开发自己的网站

概述 首先要感谢两位大神,该项目的想法来源自tale和MyBlog。 做了一些改造,增加了一些功能和一些代码的重构,并且更换了博客主题。 关于项目,对于开发的练手项目,能够工程化,严谨一些。...

osc_ragotoz1
2018/05/16
6
0
spring boot之从零开始开发自己的网站

概述 首先要感谢两位大神,该项目的想法来源自tale和MyBlog。 做了一些改造,增加了一些功能和一些代码的重构,并且更换了博客主题。 关于项目,对于开发的练手项目,能够工程化,严谨一些。...

诸葛西门
2018/05/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

asp.net core之NLog

NuGet添加 NLog.Web.AspNetCore。 <PackageReference Include="Microsoft.AspNetCore.App" /> 添加配置文件 新建一个文件nlog.config(建议全部小写,linux系统中要注意), 并右键点击其属性......

一介草民Coder
56分钟前
23
0
.NET中的struct和class有什么区别? - What's the difference between struct and class in .NET?

问题: .NET中的struct和class有什么区别? 解决方案: 参考一: https://stackoom.com/question/3OT/NET中的struct和class有什么区别 参考二: https://oldbug.net/q/3OT/What-s-the-differ...

富含淀粉
今天
23
0
android:layout_weight是什么意思? - What does android:layout_weight mean?

问题: I don't understand how to use this attribute. 我不明白如何使用这个属性。 Can anyone tell me more about it? 谁能告诉我更多关于它的事情? 解决方案: 参考一: https://stacko...

javail
今天
17
0
CSS背景不透明度[重复] - CSS Background Opacity [duplicate]

问题: This question already has an answer here: 这个问题已经在这里有了答案: How do I give text or an image a transparent background using CSS? 如何使用CSS为文本或图像提供透明背...

fyin1314
今天
31
0
node http 获取gb2312网页如何转为utf8

最初,我想当然认为是下述做法,但被证明是错误的 const http = require('http'), iconv = require('iconv-lite');const url = 'http://xxx';http.get(url, function(res) { var bo......

高延
今天
24
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部