SpringBoot一:理论知识和入门程序

1 概述

SpringBoot 和 Spring 关系

  1. Spring特指的是 SpringFramework【IoC、AOP】
  2. SpringBoot本质是是基于SpringFramework再封装的一个上层应用框架,简化各种配置,提升开发效率
  • 因此,只要会了 Spring 和 SpringMVC,那么 SpringBoot 就很容易上手。

2 入门程序

2.1 快速创建

  • 以 IDEA 开发工具为例
  1. New Project -> Spring Initializr -> 填写各种信息 -> 选择 Spring Web (其他则需选择,若是入门程序仅选择该项即可) -> Finish

  2. 默认项目结构

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uMVh6jV9-1641389394166)(assets/image-20220105173302068.png)]

    <!-- 默认pom.xml 内容如下 -->
    <?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>2.6.2</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        
        <groupId>cn</groupId>
        <artifactId>spring-boot-demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>spring-boot-demo</name>
        <description>Demo project for Spring Boot</description>
        
        <properties>
            <java.version>11</java.version>
        </properties>
        
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </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>
    
  3. 简化项目结构

    1. 即默认生成的项目结构稍复杂,入门程序用不到那么多目录,可以删除。当然不删也行。

    2. 主要就是删除 .mvnmvnwmvnw.cmd ,以及 resources 目录下的 statictemplates 目录。

    3. 删除多余文件和目录后,项目结构如下

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rPAdXrVQ-1641389394167)(assets/image-20220105173838600.png)]

  4. 启动项目

    • 直接运行自动生成的 SpringBootDemoApplication 类即可,略

2.2 手动引依赖

  • 推荐该方式,因为快速创建SpringBoot工程需要去官网下载模板,国外网站有时比较慢访问不到
  1. 创建普通maven工程

  2. 引入依赖

    <?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.6.2</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    
        <groupId>cn</groupId>
        <artifactId>spring-boot-demo2</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <!--手动修改版本(非必须)-->
        <properties>
            <java.version>11</java.version>
        </properties>
    
        <dependencies>
            <!--手动添加web依赖-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <!--手动添加测试依赖(非必须)-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </project>
    
  3. 启动项目

    1. 启动类 App(必须)

      package cn;
      
      import org.springframework.boot.SpringApplication;
      import org.springframework.boot.autoconfigure.SpringBootApplication;
      
      @SpringBootApplication
      public class App {
          public static void main(String[] args) {
              SpringApplication.run(App.class, args);
          }
      }
      
      
    2. 配置文件 application.yml(非必须,默认端口8080)

      server:
        port: 8081
      
  4. 项目结构

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-54T1x9jg-1641389394168)(assets/image-20220105175333066.png)]

3 web样例

  • 使用 SpringBoot + mybatis 构建一个简单型web项目

环境搭建

  1. SQL脚本

    CREATE TABLE `t_users`(
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(64) NOT NULL DEFAULT '',
      `gender` tinyint(4) NOT NULL DEFAULT '0' COMMENT '//1 male,2 female',
      `age` int(11) NOT NULL DEFAULT '0',
      `telphone` varchar(255) NOT NULL DEFAULT '',
      `register_mode` varchar(255) NOT NULL DEFAULT '' COMMENT '//byphone,bywechat,byalipay',
      `third_party_id` varchar(64) NOT NULL DEFAULT '',
      PRIMARY KEY (`id`),
      UNIQUE KEY `telphone_unique_index` (`telphone`) USING BTREE
    ) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8;
    
    INSERT INTO `t_users` VALUES(1,'zhangsan',1,30,'18362610001','byphone','');
    INSERT INTO `t_users` VALUES(15,'lisi',1,20,'18362610002','byphone','');
    INSERT INTO `t_users` VALUES(20,'wangwu',1,1,'18362610003','byphone','');
    INSERT INTO `t_users` VALUES(21,'zhaoliu',1,31,'18362610004','byphone','');
    INSERT INTO `t_users` VALUES(22,'xiaohong',2,20,'18362610005','byphone','');
    
  2. 依赖

    <?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.6.2</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    
        <groupId>org.example</groupId>
        <artifactId>springboot-basic</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <properties>
            <maven.compiler.source>11</maven.compiler.source>
            <maven.compiler.target>11</maven.compiler.target>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>2.1.3</version>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.22</version>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.16</version>
            </dependency>
        </dependencies>
    </project>
    
  3. 配置文件

    server:
      port: 8081
    
    spring:
      datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        username: root
        password: root
        url: jdbc:mysql://192.168.192.133:3306/test?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useUnicode=true&useSSL=false
    
    mybatis:
      configuration:
        map-underscore-to-camel-case: true # 开启驼峰映射
    

编码

  • 项目结构图

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-syOGbqkx-1641389394169)(assets/image-20220105212439819.png)]

  1. 实体类

    package cn.pojo;
    import lombok.Data;
    
    @Data
    public class User {
        private Integer id;
        private String name;
        private Integer gender;
        private Integer age;
        private String telphone;
        private String registerMode;
        private String thirdPartyId;
    }
    
  2. 持久层

    package cn.mapper;
    import cn.pojo.User;
    import org.apache.ibatis.annotations.Select;
    import java.util.List;
    
    public interface UserMapper {
    
        @Select("select * from t_users")
        List<User> findAll();
    
        @Select("select * from t_users where id = #{id}")
        User findUserById(int id);
    }
    
  3. 控制层

    package cn.controller;
    import cn.mapper.UserMapper;
    import cn.pojo.User;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    import javax.annotation.Resource;
    import java.util.List;
    
    @RestController
    @RequestMapping("user")
    public class UserController {
        // 简单demo,业务层service略,直接调用持久层接口
        @Resource
        private UserMapper userMapper;
    
        @RequestMapping("all")
        public List<User> findAll() {
            return userMapper.findAll();
        }
    
        /**
         * 查询所有用户
         * 访问 http://localhost:8081/user/all
         * 结果
         * [
         * {
         * "id": 1,
         * "name": "zhangsan",
         * "gender": 1,
         * "age": 30,
         * "telphone": "18362610001",
         * "registerMode": "byphone",
         * "thirdPartyId": ""
         * },
         * {
         * "id": 15,
         * "name": "lisi",
         * "gender": 1,
         * "age": 20,
         * "telphone": "18362610002",
         * "registerMode": "byphone",
         * "thirdPartyId": ""
         * },
         * {
         * "id": 20,
         * "name": "wangwu",
         * "gender": 1,
         * "age": 1,
         * "telphone": "18362610003",
         * "registerMode": "byphone",
         * "thirdPartyId": ""
         * },
         * {
         * "id": 21,
         * "name": "zhaoliu",
         * "gender": 1,
         * "age": 31,
         * "telphone": "18362610004",
         * "registerMode": "byphone",
         * "thirdPartyId": ""
         * },
         * {
         * "id": 22,
         * "name": "xiaohong",
         * "gender": 2,
         * "age": 20,
         * "telphone": "18362610005",
         * "registerMode": "byphone",
         * "thirdPartyId": ""
         * }
         * ]
         */
    
        @RequestMapping("get")
        public User getUser(@RequestParam("id") Integer id) {
            return userMapper.findUserById(id);
        }
    
        /**
         * 查询指定用户(法一:普通url方式)
         * 访问 http://localhost:8081/user/get?id=1
         * 结果
         * {
         * "id": 1,
         * "name": "zhangsan",
         * "gender": 1,
         * "age": 30,
         * "telphone": "18362610001",
         * "registerMode": "byphone",
         * "thirdPartyId": ""
         * }
         */
    
    
        @RequestMapping("{id}")
        public User findUser(@PathVariable Integer id) {
            return userMapper.findUserById(id);
        }
        /**
         * 查询指定用户(法二:restful格式)
         * 访问 http://localhost:8081/user/15
         * 结果
         * {
         * "id": 15,
         * "name": "lisi",
         * "gender": 1,
         * "age": 20,
         * "telphone": "18362610002",
         * "registerMode": "byphone",
         * "thirdPartyId": ""
         * }
         */
    
    }
    
  4. 启动类

    package cn;
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @MapperScan("cn/mapper")
    @SpringBootApplication
    public class App {
        public static void main(String[] args) {
            SpringApplication.run(App.class, args);
        }
    }
    
  5. 访问接口进行测试

    • 略,见第三步“控制层”中的注释
  6. 补充:SpringBoot测试类

    package test;
    
    
    import cn.App;
    import cn.mapper.UserMapper;
    import cn.pojo.User;
    import org.junit.jupiter.api.Test;
    import org.springframework.boot.test.context.SpringBootTest;
    
    import javax.annotation.Resource;
    import java.util.List;
    
    @SpringBootTest(classes = App.class)
    public class MyTest {
    
        @Resource
        private UserMapper userMapper;
    
        @Test
        public void testFindAll() {
            List<User> users = userMapper.findAll();
            users.forEach(user -> System.out.println(user));
            /**
             * 配置文件application.yml中开启驼峰映射
             * (注: thirdPartyId 没有结果是因为数据库表中没有值)
             * User(id=1, name=zhangsan, gender=1, age=30, telphone=18362610001, registerMode=byphone, thirdPartyId=)
             * User(id=15, name=lisi, gender=1, age=20, telphone=18362610002, registerMode=byphone, thirdPartyId=)
             * User(id=20, name=wangwu, gender=1, age=1, telphone=18362610003, registerMode=byphone, thirdPartyId=)
             * User(id=21, name=zhaoliu, gender=1, age=31, telphone=18362610004, registerMode=byphone, thirdPartyId=)
             * User(id=22, name=xiaohong, gender=2, age=20, telphone=18362610005, registerMode=byphone, thirdPartyId=)
             *
             * 配置文件application.yml中关闭驼峰映射
             * (registerMode和thirdPartyId直接为null,说明没有映射上。因为数据库字段使用的下划线而User类中属性用的驼峰)
             * User(id=1, name=zhangsan, gender=1, age=30, telphone=18362610001, registerMode=null, thirdPartyId=null)
             * User(id=15, name=lisi, gender=1, age=20, telphone=18362610002, registerMode=null, thirdPartyId=null)
             * User(id=20, name=wangwu, gender=1, age=1, telphone=18362610003, registerMode=null, thirdPartyId=null)
             * User(id=21, name=zhaoliu, gender=1, age=31, telphone=18362610004, registerMode=null, thirdPartyId=null)
             * User(id=22, name=xiaohong, gender=2, age=20, telphone=18362610005, registerMode=null, thirdPartyId=null)
             */
        }
    
    
        @Test
        public void testFindUserById() {
            User user = userMapper.findUserById(1);
            System.out.println(user);
            // User(id=1, name=zhangsan, gender=1, age=30, telphone=18362610001, registerMode=byphone, thirdPartyId=)
        }
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值