开篇:工程初始化
本部分采用实战场景的方式,我们先搭建一个基本工程
添加 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);
}
}