Skip to content

开篇:工程初始化

本部分采用实战场景的方式,我们先搭建一个基本工程

添加 maven 依赖

xml
    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.statemachine</groupId>
            <artifactId>spring-statemachine-core</artifactId>
            <version>3.0.1</version>
        </dependency>
<!--        <dependency>-->
<!--            <groupId>org.apache.httpcomponents</groupId>-->
<!--            <artifactId>httpclient</artifactId>-->
<!--            <version>4.4.6</version>-->
<!--        </dependency>-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.76</version>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.7.3</version>
                <scope>import</scope>
                <type>pom</type>
            </dependency>
        </dependencies>
    </dependencyManagement>

定义 POJO

java
@Data
@Entity
@Table(name = "user_info")
public class UserInfo {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;

    @Column(nullable = false)
    private String username;

    @Column(nullable = false)
    private String userPassword;

    @Column(nullable = false)
    private Date createTime;

    @Column
    private String userEmail;
}

定义 Repository

java
@Repository
public interface UserRepository extends JpaRepository<UserInfo,Integer> {

    UserInfo findByUsername(String username);

    UserInfo findByUsernameAndUserPassword(String account,String password);
}

定义 Controller

java
@RestController
public class UserController {

    private final UserService userService;

    public UserController(UserService userService) {
        this.userService = userService;
    }

    @PostMapping("login")
    public String login(@RequestParam String account, @RequestParam String password) {
        return userService.login(account, password);
    }

    @PostMapping("register")
    public String register(@RequestBody UserInfo userInfo) {
        return userService.register(userInfo);
    }
}

定义 service

@Service
public class UserService {

    private final UserRepository userRepository;

    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public String login(String account,String password) {
        UserInfo userInfo = userRepository.findByUsernameAndUserPassword(account, password);
        if (userInfo == null) {
            return "account/ password error";
        }
        return "Login Success";
    }

    public String register(UserInfo userInfo) {
        if (checkUserExist(userInfo.getUsername())) {
            throw new RuntimeException("user already registed");
        }
        userInfo.setCreateTime(new Date());
        userRepository.save(userInfo);
        return "register success";
    }

    private boolean checkUserExist(String username) {
        UserInfo userInfo = userRepository.findByUsername(username);
        if (userInfo == null){
            return false;
        }
        return true;
    }
}

配置 application.yml

yml
server:
  port: 8081

spring:
  datasource:
    url: jdbc:h2:mem:design
    driver-class-name: org.h2.Driver
    username: design
    password: design
  h2:
    console:
      enabled: true
      path: /myH2 # 通过访问myH2路径可以访问h2数据库的可视化界面

  jpa:
    show-sql: true
    hibernate:
      ddl-auto: update

添加启动类

java
@SpringBootApplication
public class DesignPatternsApplication {
    public static void main(String[] args) {
        SpringApplication.run(DesignPatternsApplication.class,args);
    }
}

Released under the MIT License.