用户登录
用户注册

分享至

从零开始的springboot项目小demo

  • 作者: 张庄刘二蛋
  • 来源: 51数据库
  • 2021-09-21

创建我的小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。

软件
前端设计
程序设计
Java相关