IDEA Spring boot 项目构建全过程,MySQL和idea连接
官方文档:Spring | Quickstart
问题及解决
问题一:
[ERROR] The goal you specified requires a project to execute but there is no POM in this directory (E:\软件工程\Base Project). Please verify you inv Maven from the correct directory. -> [Help 1]
解决:
需要在包含pom.xml的文件夹中运行:
mvn spring-boot:run
问题二:
Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:3.3.4:run (default-cli) on project demo: Process terminated with exit code: 1 -> [Help 1] #找不到或无法加载主类
解决:
不用mvn spring-boot:run了,直接运行主类: locate the DemoApplication.java file in the src/main/java/com/example/demo folder
成功
问题三:
直接运行主类控制台出现:
2024-09-29T17:26:41.735+08:00 ERROR 18596 --- [demo] [ main] o.a.catalina.core.AprLifecycleListener : An incompatible version [1.2.21] of the Apache Tomcat Native library is installed, while Tomcat requires version [1.2.34]
,但是打开http://localhost:8080/hello正确出现”hello world!“
项目构建
典型的 Spring Boot 项目结构,通常会涉及到控制层(Controller)、服务层(Service)、以及持久层(Repository)。下面结合 Spring Boot 的相关概念,解释项目结构。
项目结构解释:
com └── example └── myapplication ├── MyApplication.java ├── customer │ ├── Customer.java │ ├── CustomerController.java │ ├── CustomerService.java │ └── CustomerRepository.java └── order ├── Order.java ├── OrderController.java ├── OrderService.java └── OrderRepository.java
1. MyApplication.java
这是整个 Spring Boot 应用的启动类,通常包含 @SpringBootApplication 注解,并且包括 main 方法来启动整个应用。Spring Boot 通过这个类来启动嵌入式的应用服务器(如 Tomcat)并运行整个项目。
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
2. customer 包
这个包处理与“客户”相关的逻辑,包含了 MVC 架构的各个层次。
-
Customer.java: 这是客户的实体类(Entity),通常会使用 JPA 的注解来映射数据库表中的字段。例如:@Entity public class Customer { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private String email; // getters, setters, constructors } -
CustomerController.java: 这是控制器类,用于处理与客户相关的 HTTP 请求。典型的注解是@RestController,并且会通过@RequestMapping或@GetMapping等注解来映射 URL 路径。@RestController @RequestMapping("/customers") public class CustomerController { private final CustomerService customerService; public CustomerController(CustomerService customerService) { this.customerService = customerService; } @GetMapping public List<Customer> getAllCustomers() { return customerService.getAllCustomers(); } // Other endpoints like creating, updating customers } -
CustomerService.java: 服务类,包含业务逻辑。通常会使用@Service注解。它会与持久层(Repository)进行交互,进行数据库操作。@Service public class CustomerService { private final CustomerRepository customerRepository; public CustomerService(CustomerRepository customerRepository) { this.customerRepository = customerRepository; } public List<Customer> getAllCustomers() { return customerRepository.findAll(); } // Other business logic methods } -
CustomerRepository.java: 持久层接口,通常继承自 JPA 的JpaRepository或CrudRepository,负责与数据库交互,执行增删改查操作。public interface CustomerRepository extends JpaRepository<Customer, Long> { // Custom database query methods if needed }
3. order 包
与 customer 包类似,order 包处理与“订单”相关的逻辑,包含了对应的实体类、控制器、服务类和持久层接口。
-
Order.java: 订单实体类。@Entity public class Order { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String orderNumber; private Double amount; // getters, setters, constructors } -
OrderController.java: 处理订单相关的 HTTP 请求的控制器类。@RestController @RequestMapping("/orders") public class OrderController { private final OrderService orderService; public OrderController(OrderService orderService) { this.orderService = orderService; } @GetMapping public List<Order> getAllOrders() { return orderService.getAllOrders(); } // Other endpoints } -
OrderService.java: 订单相关的业务逻辑类。@Service public class OrderService { private final OrderRepository orderRepository; public OrderService(OrderRepository orderRepository) { this.orderRepository = orderRepository; } public List<Order> getAllOrders() { return orderRepository.findAll(); } // Other business logic } -
OrderRepository.java: 订单持久层接口,通常继承自JpaRepository。public interface OrderRepository extends JpaRepository<Order, Long> { // Additional query methods if necessary }
总结
这个结构非常典型地遵循了 Spring Boot 应用的三层架构:
-
控制层:
Controller处理用户请求。 -
服务层:
Service处理业务逻辑。 -
持久层:
Repository负责与数据库交互。
每个实体(如 Customer 和 Order)都有对应的控制器、服务和持久层,确保了代码的模块化和清晰的职责分离。
mysql和idea连接
好的,下面是使用 MySQL 数据库的配置步骤。
1. MySQL 安装与设置
首先,确保你的系统上已经安装并运行了 MySQL。你可以使用以下命令来检查 MySQL 是否运行:
mysql -u root -p
如果 MySQL 还没有安装,可以根据你的操作系统选择安装方式,例如:
-
Windows/MacOS:可以使用 MySQL Installer 或 Homebrew 安装。
-
Linux:可以使用
apt-get或yum等包管理工具。
2. 创建数据库
登录 MySQL 后,创建一个数据库供 Spring Boot 项目使用。例如,创建一个名为 myappdb 的数据库:
CREATE DATABASE myappdb;
还可以为这个数据库创建一个用户(假设用户名为 user,密码为 password):
CREATE USER 'user'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON myappdb.* TO 'user'@'localhost'; FLUSH PRIVILEGES;
3. 添加 MySQL 依赖
在 Spring Boot 项目的 pom.xml 中,添加 MySQL 依赖:
<dependencies>
<!-- MySQL 驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- Spring Data JPA -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- 其他依赖 -->
<!-- 例如Spring Web -->
</dependencies>
然后,刷新 Maven 项目以下载新的依赖。
4. 配置 MySQL 数据库连接
打开 src/main/resources/application.properties 文件,添加以下 MySQL 连接配置:
# MySQL 数据源配置 spring.datasource.url=jdbc:mysql://localhost:3306/myappdb?useSSL=false&serverTimezone=UTC spring.datasource.username=user spring.datasource.password=password spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # JPA配置 spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
说明:
spring.datasource.url中的localhost可以替换为你的 MySQL 服务器的 IP 地址,mysql> SHOW VARIABLES WHERE Variable_name = 'port'; #用于查看端口号
myappdb为前面创建的数据库名称。
spring.datasource.username和spring.datasource.password为你设置的 MySQL 用户名和密码。
spring.jpa.hibernate.ddl-auto=update会根据模型自动更新数据库表结构。
5. 创建实体类和 Repository
创建一个简单的实体类来代表数据库中的表。例如,创建 User 实体:
package com.example.myapp.entity;
import javax.persistence.*;
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
// getters and setters
}
接着,创建 UserRepository 接口来访问数据库:
package com.example.myapp.repository;
import com.example.myapp.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}
6. 创建服务层与控制器
你可以创建一个服务层和控制器来使用这个实体和数据库交互。例如:
Service 类:
package com.example.myapp.service;
import com.example.myapp.entity.User;
import com.example.myapp.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public List<User> getAllUsers() {
return userRepository.findAll();
}
public User saveUser(User user) {
return userRepository.save(user);
}
}
Controller 类:
package com.example.myapp.controller;
import com.example.myapp.entity.User;
import com.example.myapp.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping
public List<User> getUsers() {
return userService.getAllUsers();
}
@PostMapping
public User createUser(@RequestBody User user) {
return userService.saveUser(user);
}
}
7. 运行项目并测试
运行项目后,可以通过 POST 请求向 http://localhost:8080/users 发送一个 JSON 数据来创建用户,例如:
{
"name": "John",
"email": "john@example.com"
}
然后使用 GET 请求访问 http://localhost:8080/users 来获取所有用户。
我的项目:基线需求
| buyers: | |||||
|---|---|---|---|---|---|
| id | name | phone | trade_time | trade_address | stauts |
| int auto_increment | varchar20 | varchar15 | datetime | varchar30 | varchar10 |
| good: | |||||
| id | name | price | status | ||
| int auto_increment | varchar20 | int | varchar10 | ||
| sellers: | |||||
| account | password | ||||
| varchar20 | varchar20 |
-
先连接mysql:File/new/data source/mysql
-
再自动生成entity:jpa 之自动生成entity与repository相关数据库实体类_jpa entity生成-CSDN博客
-
再手动生成repository
推送项目到他人的github仓库
-
他人把我拉进colaborators
-
本地新建目录,git clone 他人的仓库.git
-
将项目文件全拉进新建的目录
-
在IDEA中,Git\new branch,Git\Push
-
成功
问题:
-
运行main方法,出现报错:
Unable to resolve name [org.hibernate.dialect.MySQL5Dialect ] as strategy [org.hibernate.dialect.Dialect]
解决:
是application.properties中jpa的问题,将下面这行注释掉就成功了
spring.jpa.properties.hibernate.dialect="org.hibernate.dialect.MySQL5Dialect"
问题:JDK版本不同导致我运行他人项目报错
在pom.xml中修改完jdk之后还是报错:
需要发行版21
解决:
rebuild然后invalidate cashes就好了
「智能机器人开发者大赛」官方平台,致力于为开发者和参赛选手提供赛事技术指导、行业标准解读及团队实战案例解析;聚焦智能机器人开发全栈技术闭环,助力开发者攻克技术瓶颈,促进软硬件集成、场景应用及商业化落地的深度研讨。 加入智能机器人开发者社区iRobot Developer,与全球极客并肩突破技术边界,定义机器人开发的未来范式!
更多推荐



所有评论(0)