乘风原创程序

  • 从零开始的springboot项目小demo
  • 2021/2/23 10:26:16
  • 创建我的小demo,从零搭建spring boot项目

    创建springboot项目

    在这里插入图片描述
    在这里插入图片描述
    ?? 这里选择java版本及项目命名
    在这里插入图片描述
    在这里插入图片描述
    ??勾选spring web、mybatis、mysql,右侧红框是已经选择的选项
    在这里插入图片描述
    ?? 这里选择项目路径
    在这里插入图片描述
    ??创建项目后,修改项目结构,这是我整合mybatis及swagger后的项目结构.下面整合mybatis及swagger。

    整合mybatis

    ??1.在整合mybatis前需要创建数据库,打开Navicat(数据库管理工具)。
    在这里插入图片描述
    ??创建数据库,命名为mydemo
    在这里插入图片描述
    ??新建表,这里主键id可以用int类型,并且把下面的自动递增选上(插入数据时,不需要填写id数据,会自动递增),如果不选需要自己设置一个数据。主键id也可以用varchar类型,利用mybatis-plus的雪花算法生成64位的唯一id。
    ??这里先用int类型,后期再引用mybatis-plus。最后保存,将表命名为user_info。
    在这里插入图片描述
    在这里插入图片描述
    ??在idea连接数据库,下面是我修改后的URL,问号前面的mydemo是数据库名称。这里如果没配置时区,会连接不上。

    jdbc:mysql://localhost:3306/mydemo?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=GMT%2B8

    ??2.配置mybatis环境
    在这里插入图片描述

    ??application.yml文件:

    spring:
      profiles:
        active: dev
    

    在这里插入图片描述

    ??application-dev.yml文件:

    #数据库连接池
    spring:
      datasource:
        url: jdbc:mysql://localhost:3306/mydemo?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=GMT%2B8
        username: root
        password: 123456
        driver-class-name: com.mysql.cj.jdbc.Driver
    
    #mybatis映射配置
    mybatis:
      mapperLocations: classpath*:com/hjj/mydemo/**/xml/*Mapper.xml
    
    #Mybatis输出sql日志
    logging:
      level:
        com.hjj.mydemo: debug
    
    #端口号
    server:
      port: 8080
    

    ??端口号默认的是8080,若用8080端口可以不用配置,这里用于展示如何修改端口号
    在这里插入图片描述
    在这里插入图片描述

    ??pom文件中需要添加红框这2个依赖(这里是因为之前创建idea项目是勾选了mysql、mybatis的选项,所以他会自动添加),若未勾选需要添加依赖。另外还需在bulid中添加配置

    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.1.4</version>
    </dependency>
    
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    
    
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.xml</include>
            </includes>
        </resource>
    </resources>
    

    ??3.实体类代码:
    在这里插入图片描述

    @Data
    public class UserInfo implements Serializable {
        private Integer id;
    
        private String userName;
    
        private Integer sex;
    
        private String userPhone;
    
        private static final long serialVersionUID = 1L;
    }
    

    ??这里的@Data可以为类提供读写功能,从而不用写get、set方法。他还会为类提供 equals()、hashCode()、toString() 方法。需要安装lombok插件和添加以下依赖

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.6</version>
    </dependency>
    

    ??4.dao层代码:
    ??Mapper文件:
    在这里插入图片描述

    @Mapper
    public interface UserInfoMapper {
        //插入
        int inster(UserInfo userInfo);
    
        //查询
        UserInfo selectById(@Param("id") Integer id);
    }
    

    ??这里只写了插入与查询,下面是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.hjj.mydemo.user.mapper.UserInfoMapper">
        <resultMap id="BaseResultMap" type="com.hjj.mydemo.user.pojo.UserInfo">
            <id column="id" jdbcType="INTEGER" property="id"/>
            <result column="user_name" jdbcType="VARCHAR" property="userName"/>
            <result column="sex" jdbcType="INTEGER" property="sex"/>
            <result column="user_phone" jdbcType="INTEGER" property="userPhone"/>
        </resultMap>
        <sql id="Base_Column_List">
            id,
            user_name,
            sex,
            user_phone
        </sql>
        <insert id="inster" parameterType="com.hjj.mydemo.user.pojo.UserInfo">
            insert into user_info (user_name, sex, user_phone)
            values (#{userName}, #{sex}, #{userPhone})
        </insert>
        <select id="selectById" resultMap="BaseResultMap" parameterType="int">
            select
            <include refid="Base_Column_List"/>
            from user_info
            where id = #{id}
        </select>
    </mapper>
    

    ??注意这里的namespace,需要与mapper文件对应,也就是mapper包下的UserInfoMapper文件。
    ??红框的id需要与UserInfoMapper的接口名对应
    ??resultMap可以实现将查询结果映射为复杂类型的pojo,比如在查询结果映射对象中包括pojo和list实现一对一查询和一对多查询。
    ??resultType可以把查询结果封装到pojo类型中,但必须pojo类的属性名和查询到的数据库表的字段名一致。如果sql查询到的字段与pojo的属性名不一致,则需要使用resultMap将字段名和属性名对应起来,进行手动配置封装,将结果映射到pojo中
    ??parameterType是传入参数类型,其包括基本数据类型:(int,string,long,Date)、复杂数据类型:(类和Map)
    ??5.service层代码
    在这里插入图片描述

    public interface UserInfoService{
        //插入
        int inster(UserInfo userInfo);
    
        //查询
        UserInfo selectById(@Param("id") Integer id);
    }
    

    ??6.serviceImpl层代码,注意不要漏了@Service注解
    在这里插入图片描述

    @Service
    public class UserInfoServiceImpl implements UserInfoService{
        @Resource
        public UserInfoMapper userInfoMapper;
    
        @Override
        public int inster(UserInfo userInfo) {
            return userInfoMapper.inster(userInfo);
        }
    
        @Override
        public UserInfo selectById(Integer id) {
            return userInfoMapper.selectById(id);
        }
    }
    

    7.Controller层代码
    在这里插入图片描述

    @Api(tags = "用户信息表")
    @RestController
    public class UserInfoController {
        @Autowired
        UserInfoService userInfoService;
    
        @ApiOperation(value = "新增", notes = "新增")
        @PostMapping(value = "/add")
        public int insertUser(@RequestBody UserInfo userInfo) {
            return userInfoService.inster(userInfo);
        }
    
        @ApiOperation(value = "查询", notes = "查询")
        @GetMapping(value = "/select")
        public Object selectByid(@RequestParam(name = "id", required = true) Integer id) {
            return userInfoService.selectById(id);
        }
    }
    

    ??这里如果出现报错,不用担心,是因为没有引入swagger依赖,下面会引入。
    ??@RestController是@Controller+@RequestBody,加上@ResponseBody意思是返回json或xml到前台页面,也就是return里的东西。这时候,即使你在视图解析器InternalResourceViewResolver中配置相应的返回页面也是不起作用的。
    ??如果用@Controller注解,则可以配置视图解析器,return里的是要返回的jsp路径。他们区别在于return后的是返回的内容还是返回的路径。这里因为没有前端页面,所以选择@RestController即可,这也是前后端分离通常写的接口。
    ??@PostMapping、@GetMapping是请求url,其中有post(新建)、get(查询)、delete(删除)、put(更新),这四种请求方式,这是restful风格请求操作资源。后续可能会涉及到幂等性的问题(最常见重复提交和支付就是不幂等)。
    ??@Api和@ApiOperation是swagger中的注解,下面开始集成swagger

    整合swagger

    ??swagger可以方便我们测试写好的接口,在前后端分离开发中会经常用到。
    ??1.添加依赖
    在这里插入图片描述

    <!--    导入Swagger、SwaggerUI依赖    -->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.9.2</version>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.9.2</version>
    </dependency>
    

    ??pom文件添加swagger相关依赖
    ??2. swagger配置文件
    在这里插入图片描述

    @Configuration
    @EnableSwagger2
    public class SwaggerConfig {
        @Bean
        public Docket swaggerSpringMvcPlugin(){
            return new Docket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)).build();
        }
    }
    

    ??在mydemo包下创建config包,主要放一些框架的配置文件比如shiro、redis(后续会集成)等。在config下创建SwaggerConfig。
    ??下面是我的pom依赖和配置:

    <?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.4.3</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.hjj</groupId>
        <artifactId>mydemo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>mydemo</name>
        <description>Demo project for Spring Boot</description>
        <properties>
            <java.version>1.8</java.version>
        </properties>
        <dependencies>
    
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>2.1.4</version>
            </dependency>
    
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <scope>runtime</scope>
                <optional>true</optional>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <!--    导入Swagger、SwaggerUI依赖    -->
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger2</artifactId>
                <version>2.9.2</version>
            </dependency>
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger-ui</artifactId>
                <version>2.9.2</version>
            </dependency>
    
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.6</version>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
            <resources>
                <resource>
                    <directory>src/main/resources</directory>
                    <filtering>true</filtering>
                </resource>
                <resource>
                    <directory>src/main/java</directory>
                    <includes>
                        <include>**/*.xml</include>
                    </includes>
                </resource>
            </resources>
        </build>
    </project>
    
    

    启动项目测试接口

    ??这里直接启动项目,不需要像ssm项目那样配置tomcat,因为spring boot有内置的tomcat,访问http://localhost:8080/swagger-ui.html
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    ?? 修改数据
    在这里插入图片描述
    ??回到idea看控制台可以看到sql语句已经执行成功
    在这里插入图片描述
    ??在navicat上也能 能看到数据也有这条数据,此插入接口可行,再测试查询接口
    在这里插入图片描述
    ??刚刚能看到插入的那条数据id为18,在查询接口填入18,点击execute执行
    能看到查询结结果。
    ??以上是搭建Springboot项目,及整合mybatis、swagger的全部操作。后续还会整合其他框架及技术,慢慢拓展自己的小demo。

    本文地址:https://blog.csdn.net/zhuzai233/article/details/113986010