欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

从零开始的springboot项目小demo

程序员文章站 2022-07-10 19:36:36
创建我的小demo,从零搭建spring boot项目创建springboot项目整合mybatis整合swagger启动项目测试接口创建springboot项目   这里选择java版本及项目命名  勾选spring web、mybatis、mysql,右侧红框是已经选择的选项   这里选择项目路径  创建项目后,修改项目结构,这是我整合mybatis及swagger后的项目结构.下面整合mybatis及swagger。整合mybatis  1.在整合mybatis前需要创建数据...

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

创建springboot项目

从零开始的springboot项目小demo
从零开始的springboot项目小demo
   这里选择java版本及项目命名
从零开始的springboot项目小demo
从零开始的springboot项目小demo
  勾选spring web、mybatis、mysql,右侧红框是已经选择的选项
从零开始的springboot项目小demo
   这里选择项目路径
从零开始的springboot项目小demo
  创建项目后,修改项目结构,这是我整合mybatis及swagger后的项目结构.下面整合mybatis及swagger。

整合mybatis

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

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

  2.配置mybatis环境
从零开始的springboot项目小demo

  application.yml文件:

spring:
  profiles:
    active: dev

从零开始的springboot项目小demo

  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端口可以不用配置,这里用于展示如何修改端口号
从零开始的springboot项目小demo
从零开始的springboot项目小demo

  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.实体类代码:
从零开始的springboot项目小demo

@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文件:
从零开始的springboot项目小demo

@Mapper
public interface UserInfoMapper {
    //插入
    int inster(UserInfo userInfo);

    //查询
    UserInfo selectById(@Param("id") Integer id);
}

  这里只写了插入与查询,下面是xml文件:
从零开始的springboot项目小demo

<?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层代码
从零开始的springboot项目小demo

public interface UserInfoService{
    //插入
    int inster(UserInfo userInfo);

    //查询
    UserInfo selectById(@Param("id") Integer id);
}

  6.serviceImpl层代码,注意不要漏了@Service注解
从零开始的springboot项目小demo

@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层代码
从零开始的springboot项目小demo

@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.添加依赖
从零开始的springboot项目小demo

<!--    导入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配置文件
从零开始的springboot项目小demo

@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
从零开始的springboot项目小demo
从零开始的springboot项目小demo
从零开始的springboot项目小demo
   修改数据
从零开始的springboot项目小demo
  回到idea看控制台可以看到sql语句已经执行成功
从零开始的springboot项目小demo
  在navicat上也能 能看到数据也有这条数据,此插入接口可行,再测试查询接口
从零开始的springboot项目小demo
  刚刚能看到插入的那条数据id为18,在查询接口填入18,点击execute执行
能看到查询结结果。
  以上是搭建Springboot项目,及整合mybatis、swagger的全部操作。后续还会整合其他框架及技术,慢慢拓展自己的小demo。

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

相关标签: java