IntelliJ IDEA 创建 Spring Boot 项目

1. 打开IDEA,新建项目

2. 更改 Server URL(如果IDEA是新版本的,并且不用Java 8的话可以跳过这一步)

由于使用新版本IDEA内置的 Spring Initializr 创建 Spring Boot 新项目时,没有 Java 8 的选项了,只剩下了 >= 17 的版本,这是因为 Spring Boot 官方不再支持 Spring Boot 的 2.x 版本了,之后全力维护 3.x,而 Spring Boot 3.x 对 JDK 版本的最低要求是 17!所以 Spring 官方的项目初始化工具自然不再支持 Java 8 了,用网页版也是一样的

如果想要创建项目的时候使用 Java 8 ,可以使用阿里云提供的脚手架镜像(https://start.aliyun.com/),只要在 IDEA 里更改 Server URL 即可:

3. 设置项目信息,选择 Spring Boot 的版本以及项目所需要的依赖,点击 Create 即可完成创建



4. 项目结构

以下为 Spring Boot 项目的项目结构,可以根据自己的需求参考使用

4.1 如果需要连接MySQL,则需要在application.yml文件中添加如下配置:

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    #                 数据库地址  端口  数据库名
    url: jdbc:mysql://localhost:3306/router?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&useSSL=false
    username: root # 账号
    password: root # 密码
    hikari:
      minimum-idle: 3
      maximum-pool-size: 5
      max-lifetime: 0
      connection-test-query: SELECT 1

4.2 如果需要使用MyBatis-Plus,则需要在pom.xml文件下添加以下依赖:

<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus-boot-starter</artifactId>
  <version>3.5.2</version>
</dependency>

application.yml文件中推荐添加如下配置:

mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: deleted # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
      logic-delete-value: 0 # 逻辑已删除值(默认为 1)
      logic-not-delete-value: 1 # 逻辑未删除值(默认为 0)
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    map-underscore-to-camel-case: false # 关闭驼峰

如果需要使用分页插件,则需要编写配置文件:

package com.example.demo.common.config;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@MapperScan("com.example.demo.mapper")
public class MybatisPlusConfig {
    // 最新版
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}

4.3 Result文件

package com.example.demo.common;

import lombok.Data;

@Data
public class Result {

    private String code;
    private String msg;
    private Object data;

    public static Result success(Object data, String msg) {
        Result result = new Result();
        result.setCode("200");
        result.setData(data);
        result.setMsg(msg);
        return result;
    }

    public static Result error(String msg) {
        Result result = new Result();
        result.setCode("404");
        result.setMsg(msg);
        return result;
    }
}

4.4 DemoApplication文件

package com.example.demo;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.example.demo.mapper")  //这里改成项目的mapper的包路径
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

4.5 User类文件

package com.example.demo.entity;

import lombok.Data;
import java.io.Serializable;

@Data
public class User implements Serializable {
    private Integer id;
    private String community_id;
}

4.6 UserMapper文件(数据库表的映射实体类)

package com.example.demo.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.entity.User;
import org.springframework.stereotype.Repository;

@Repository
public interface UserMapper extends BaseMapper<User> {
}

4.7 UserService文件

package com.example.demo.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

@Slf4j
@Service
public class UserService extends ServiceImpl<UserMapper, User> {

    @Resource
    private UserMapper userMapper;


    public User getUserById(Integer id) {
        // 访问数据库的耗时统计
        long start = System.currentTimeMillis();
        QueryWrapper<User> query = new QueryWrapper<User>().eq("id", id);
        User user = userMapper.selectOne(query);
        log.info("getUserById 耗时统计 {}ms", System.currentTimeMillis() - start);
        return user;
    }

    public List<User> getUser() {
        // 访问数据库的耗时统计
        long start = System.currentTimeMillis();
        List<User> userList = userMapper.selectList(null);
        log.info("getUser 耗时统计 {}ms", System.currentTimeMillis() - start);
        return userList;
    }

    public Page<User> findUserPage(Page<User> page) {
        // 访问数据库的耗时统计
        long start = System.currentTimeMillis();
        Page<User> userPage = userMapper.selectPage(page, null);
        log.info("findUserPage 耗时统计 {}ms", System.currentTimeMillis() - start);
        return userPage;
    }
}

4.8 UserController文件

package com.example.demo.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.demo.common.Result;
import com.example.demo.entity.User;
import com.example.demo.service.UserService;
import org.springframework.web.bind.annotation.GetMapping;
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;
import java.util.Optional;

@RestController
@RequestMapping("/user")
public class UserController {

    @Resource
    private UserService userService;

    @GetMapping("/getUserById")
    public Result getUserById(@RequestParam Integer id) {
        Optional<User> user = Optional.ofNullable(userService.getUserById(id));
        if (!user.isPresent()) {
            return Result.error("查询不到用户");
        }
        return Result.success(user, "查询成功");
    }

    @GetMapping("/getAllUser")
    public Result getUser() {
        Optional<List<User>> userList = Optional.ofNullable(userService.getUser());
        if (!userList.isPresent()) {
            return Result.error("查询不到用户");
        }
        return Result.success(userList, "查询成功");
    }

    @GetMapping("/getUserPage")
    public Result findDeviceByUserId(@RequestParam Integer pageNum,
                                     @RequestParam Integer pageSize) {
        Page<User> page = userService.findUserPage(new Page<>(pageNum, pageSize));
        return Result.success(page, "查询成功");
    }
}

4.9 运行DemoApplication主文件,在浏览器访问 http://localhost:9090/user/getUserById?id=1


5. 注意事项

5.1 如果要将项目打包成 jar 包,推荐直接在 IDEA 里面进行打包,点击右侧的 Maven,先点击 clean 清理,完成后点击 package 进行打包,打包成功后的 jar 包会放在项目的 target 目录下


5.2 如果打包后的 jar 包运行提示没有主清单属性,则有可能缺少了项目maven打包插件 spring-boot-maven-plugin,或者是没有指定具体的项目的Main方法入口或启动类,可以将 pom.xml 配置文件中打包配置部分换成下面的代码

<!-- 打包格式 -->
<packaging>jar</packaging>

<!-- 打包插件 -->
<build>
  <plugins>
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
      <version>${spring-boot.version}</version>
      <configuration>
        <executable>true</executable>
        <layout>JAR</layout>
      </configuration>
      <executions>
        <execution>
          <goals>
            <goal>repackage</goal>
          </goals>
          <configuration>
            <attach>false</attach>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>
  • 10
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值