SpringBoot(入门demo)

以下包含SpringBoot的入门Demo和 SpringBoot+Mybatis的整合入门demo(使用IDE是IDEA)

一、简介
1、SpringBoot提供一种固定的、约定优于配置风格的框架,使开发者更快地创建基于spring的应用和程序。

2、特性:
1、高效的创建基于spring的应用服务(不是对spring功能的增强,而是提供快速使用spring的方式)
2、鼓励注解配置
3、为微服务spring cloud铺路,可整合其他框架(如dubbo thrift等)

3、Spring Boot应用启动器:
首先pom.xml默认2个模块:
spring-boot-starter: Spring Boot的核心启动器,包含了自动配置支持、日志和YAML。
spring-boot-starter-test:测试模块,包括JUnit、Hamcrest、Mockito
spring-boot-starter-jdbc: 支持JDBC数据库。
spring-boot-starter-thymeleaf: 支持Thymeleaf模板引擎,包括与Spring的集成。
spring-boot-starter-web: 支持全栈式开发,包括Tomcat和Spring-WebMVC。
mybatis-spring-boot-starter: 整合spring-mybatis依赖。

SpringBoot(入门demo)_第1张图片

SpringBoot(入门demo)_第2张图片
image.png

这些pom依赖为开发spring应用提供良好的基础,springboot的第三方库是比较适合产品开发的,其中也有些选择,如日志框架可以用 Logback 或 Log4j,应用服务器可以用 Tomcat 或 Jetty。

4、一些常用的注解:
启动类常用:
@SpringBootApplication:声明当前类为SpringBoot入口类,且项目只只能有一个
@RestController:声明当前类为控制层的类(等价于@Controller+@ResponseBody的结合,里面的方法都以json格式输出,不用再写什么jackjson配置的了)

二、下面是一个最简单的SpringBoot入门demo:
首先,生成SpringBoot web项目结构有两种办法:
1、用Spring initializer
2、用IDEA/Eclipse开放工具构建(一般springBoot推荐使用IDEA)

在创建时勾选spring initial,勾选web。
自动生成必要的DemoApplication作为启动类,对于web项目,也同样是通过启动该类,在地址栏输入映射地址达到访问目的。


SpringBoot(入门demo)_第3张图片
目录结构

HelloSpringboot.class:

package com.example.demo;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloSpringboot {

    @RequestMapping("/hello")
    public String say() {
        System.out.println("Hello springboot");
        return "hello,this is a springboot demo!~";
    }

    @RequestMapping("/login")
    public String login(@RequestParam("username") String username,@RequestParam("password") String password){
        String result= "username:"+username+",password:"+password;
        System.out.println(result);
         return(result);
    }

}

启动类DemoApplication.java:

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {

        SpringApplication.run(DemoApplication.class, args);
    }
}

测试:
启动启动类DemoApplication.java,地址栏输入地址,若页面显示返回数据,则测试成功。

在地址栏输入:localhost:8080/hello


SpringBoot(入门demo)_第4张图片

在地址栏输入:http://localhost:8080/login?username=tycoding&password=123

SpringBoot(入门demo)_第5张图片


三、SpringBoot和Mybatis整合入门Demo
下面是项目整体目录结构:


SpringBoot(入门demo)_第6张图片

SpringBoot(入门demo)_第7张图片

1、创建项目,选择spring initial,选择 web,JDBC,mybatis,mysql,自动生成项目。由于后面用到了junit测试,所以pom.xml中引入junit包(版本要4.12以上)。

2、pom.xml



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.1.1.RELEASE
         
    
    com.example
    demo
    0.0.1-SNAPSHOT
    demo
    Demo project for Spring Boot

    
        1.8
    

    
        
            org.springframework.boot
            spring-boot-starter-jdbc
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            1.3.2
        

        
            mysql
            mysql-connector-java
            runtime
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        

        
            junit
            junit
            4.12
            test
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    


2、使用mysql数据库,创建了表user,创建字段id(bigint) username(varchar(120)) password(varchar(20)) ,插入一些数据。

3、application.yml:配置文件,此处注意配置文件一般会自动生成在resource下,先将后缀改为yml(IDEA的自动解析要求所有的xml,yml等文件都放在resource下,且由于springBoot本身是去xml化的,所以一般会写成yml)
对springboot和jdbc、mybatis等都进行了简单的配置(此处尤其注意一些配置不能写错,在这也出现了不少bug导致研究了很长时间,这是debug的记录 SpringBoot+Mybatis web项目常见bug)

spring:
  profiles:
    active: dev
  datasource:
    username: root
    password: root
    url: jdbc:mysql://localhost:3306/smtest?characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false
    driver-class-name: com.mysql.cj.jdbc.Driver

server:
  port: 8080

mybatis:
  mapper-locations: classpath*:mapper/*.xml
  type-aliases-package: com.example.demo.entity

4、entity层:
User.class:

package com.example.demo.entity;

public class User {
    private Long id;
    private String username;
    private String password;

    public User(Long id, String username, String password) {
        this.id = id;
        this.username = username;
        this.password = password;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

5、Mapper层:注意不同于eclipse,IDEA的mapper.xml必须放在resource/mapper下。
UserMapper.java(接口,放在java.com.example.demo.mapper下):

package com.example.demo.mapper;

import com.example.demo.entity.User;
public interface UserMapper {
    
     User findById( Long id);
     
}

UserMapper.xml:(在resource/mapper下):





    
    
    




6、Service层:访问mapper
一些注解:
@Service:声明该类为Service类
@Resource:常常与@Autowired注解替换,声明为一个bean,@Autowire注解在IDEA中常会引起一些不必要的错误,IDEA会无法识别这是一个bean而报警告,此时可用@Resource

package com.example.demo.service;

import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;

import org.springframework.stereotype.Service;

import javax.annotation.Resource;

@Service
public class UserService {

    @Resource
    UserMapper userMapper;

    public User findById(Long id){
        return userMapper.findById(id);
    }
}

7、Contoller控制层:
@RestController:声明该类为控制类。
@RequestMapping:该类/方法的映射地址
@Autowired:声明bean

UserController:

package com.example.demo.controller;

import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/boot")
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping("/getUser/{id}")
    public String GetUser(@PathVariable Long id){
        return userService.findById(id).toString();
    }

    @RequestMapping("/find")
    public String findUser(){
        Long id=1000l;
        return userService.findById(id).toString();
    }

    @RequestMapping("hello")
    public String hello(){
        return "hello";
    }
}

8、测试类:
自动生成测试类,用junit测试,idea对着要进行测试的类/方法光标覆盖 ctrl+shift+t 选择create test class,勾选要测试的方法。

UserMapper的测试类UserMapperTest:

注意一些注解:
@RunWith(SpringRunner.class)
@SpringBootTest
@WebAppConfiguration
@Resource
@Test

package com.example.demo.mapper;

import com.example.demo.entity.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.context.web.WebAppConfiguration;

import javax.annotation.Resource;

@RunWith(SpringRunner.class)
@SpringBootTest
//web项目,junit需要模拟servletContext,所以要加@webAppConfiguration
@WebAppConfiguration
//告诉Junit Spring配置文件
public class UserMapperTest {

    @Resource
    private UserMapper userMapper;

    @Test
    public void findById() throws Exception{
        Long id=1000l;
        User user=userMapper.findById(id);
        System.out.println(user.toString());

    }
}

测试时,只允许测试类的该方法。


以上,是本人初学springboot的基本入门demo,相信只要学过spring以及其他框架的,对于springboot都会比较容易上手,目前,我通过这两个demo,掌握了一些基本的应用。

对于springboot的学习,不少人都说并没有必要去买工具书,做demo就会容易上手,对我来说确实如此,但也因此学得不够系统化,因此之后会不断巩固和学习,并记录下来。

纯洁的微笑-SpringBoot,博主写的挺好的,我本人就是特别不喜欢技术文章太冗长的,这个还蛮简明扼要的。但是初学看的时候有一丢丢看不下去,先上手demo之后再尝试去看就好得多。

此外,在入手过程中,也遇到了不少bug,尝试了不少解决方案,并记录了这些bug。
详阅——SpringBoot+Mybatis web项目常见bug

你可能感兴趣的:(SpringBoot(入门demo))