创建我的小demo,从零搭建spring boot项目

    • 创建springboot项目
    • 整合mybatis
    • 整合swagger
    • 启动项目测试接口

创建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