常见问题
数据库相关
- 未配置数据库时,启动项目会报错,报错提示如:
Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
解决方法:
- 在
application.properties
中配置数据库连接信息。
1 2 3
| spring.datasource.url=jdbc:mysql: spring.datasource.username=root spring.datasource.password=123456
|
- 在 DemoApplication 类中添加
@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})
,再运行项目即不会报错。
- 将
pom.xml
中关于数据库的依赖注释掉,再运行项目即不会报错。
创建项目
创建 Spring Boot 项目
以下两种创建方式基本一致,均是使用官方提供的项目初始化工具实现。
通过 IDEA 创建
- 新建项目选择
Spring Initializr
项目
- 填写项目名称和存储位置
- 选择项目语言
Java
- 选择项目类型
Maven
- 填写具体项目信息
- 选择
JDK
和 Java
版本
- 选择打包方式
- 选择项目依赖为
Sprint Web, MySQL Driver, Spring Data JPA
- 选择创建即可
通过官方网站创建
- 访问 Spring Initializr 网站
- 选择项目类型为
Maven
- 选择项目语言为
Java
- 选择
Sprint Boot
的版本
- 填写项目信息
- 选择项目框架为
Sprint Web, MySQL Driver, Spring Data JPA
- 点击
Generate
按钮
- 下载项目压缩包,解压后导入到 IDEA 中
项目基础
项目结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| ├─src │ ├─main │ │ ├─java │ │ │ └─com │ │ │ └─sleny │ │ │ └─demo │ │ │ ├─controller │ │ │ ├─converter │ │ │ ├─dao │ │ │ ├─dto │ │ │ └─service │ │ └─resources │ │ ├─static │ │ └─templates │ └─test │ └─java │ └─com │ └─sleny │ └─demo └─target ├─classes │ └─com │ └─sleny │ └─demo │ ├─controller │ ├─converter │ ├─dao │ ├─dto │ └─service ├─generated-sources │ └─annotations ├─generated-test-sources │ └─test-annotations └─test-classes └─com └─sleny └─demo
|
目录说明
src/main/java
存放 Java 源代码
src/main/resources
存放资源文件
src/test/java
存放测试源代码
src/test/resources
存放测试资源文件
target/classes
存放编译后的 Java 文件
target/test-classes
存放编译后的测试 Java 文件
target/generated-sources
存放自动生成的源代码
target/generated-test-sources
存放自动生成的测试源代码
controller
: 控制器,用于接收用户请求并调用 service 层处理业务逻辑
service
: 服务层,用于处理业务逻辑
xxSerivce
: 接口,用于显示实现类中所有的方法
xxServiceImpl
: 实现类,用于实现接口中定义的方法
@Service
: 用于将当前类注入到 Spring 容器中
@Autowired
: 用于将其他类注入到当前类中,官方不推荐字段注入,可以使用构造方法。
@Override
: 用于标记当前方法为重写方法
@Transactional
: 用于标记当前方法为事务方法,用于处理业务逻辑(update
方法时进行注解)
converter
: 转换器,用于将 DTO 转换为实体对象
dao
: 数据访问层,用于操作数据库
@Entity
: 用于标记当前类为实体类
@Table
: 用于标记当前类对应的表
@Id
: 用于标记当前字段为主键
@Column
: 用于标记当前字段对应的数据库列
@GeneratedValue
: 用于标记当前字段的自增策略
Repository
: 接口,用于定义数据库操作方法,继承JpaRepository
@Repository
: 是Spring框架
中一个专用的注解,用于标记数据访问层的组件。可以让Spring
自动检测和管理数据访问组件,并提供一致的异常处理机制,使其成为Spring IoC
容器管理的一个Bean
。
dto
: 数据传输对象,用于封装数据,即定义返回给前端的数据类型。一般情况下与vo
相同,当存在不同时,vo
不建议隐去。
static
: 存放静态资源文件,如:js, css, img等
templates
: 存放模板文件,如:html, jsp等;如果前后端分离,则该目录可以不使用。
常用注解
@SpringBootApplication
: 用于标记当前类为 Spring Boot 项目的启动类。
@RestController
: 用于标记当前类为控制器,并使用@ResponseBody
标记当前方法为返回 JSON 数据的方法。
@RequestMapping
: 用于标记当前方法为请求映射方法。
@GetMapping
: 用于标记当前方法为 GET 请求方法。
@PostMapping
: 用于标记当前方法为 POST 请求方法。
@PutMapping
: 用于标记当前方法为 PUT 请求方法。
@DeleteMapping
: 用于标记当前方法为 DELETE 请求方法。
@RequestParam
: 用于标记当前方法为请求参数方法。
@PathVariable
: 用于标记当前方法为路径参数方法。
@RequestBody
: 用于处理HTTP请求体,通常用于接收JSON或XML格式的数据,Spring将尝试将请求体映射到相应的Java对象中。
@RequestParam
: 用于从HTTP请求中提取查询参数或表单参数。
required
: 用于标记当前参数是否必须存在。
defaultValue
: 用于标记当前参数的默认值。
name
: 用于标记当前参数的名称。
@Component
: 用于将当前类注入到 Spring 容器中。
@Service
@Repository
/ @Mapper
@Controller
@Data
: lombok的专属注解,需要引入其依赖 1 2 3 4 5
| <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency>
|
@AllArgsConstructor
: 用于标记当前类为全参构造函数。
@NoArgsConstructor
: 用于标记当前类为无参构造函数。
- 在编译时期,会自动生成getter/setter, equals, hascode, toString等方法
ConfigurationProperties
: 批量将外部属性配置注入到Bean对象的属性中
prefix
: 用于标记当前类对应的属性前缀(即配置文件中的前缀) 1 2 3 4
| <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> </dependency>
|
常用依赖
MyBatis Plus
依赖
1 2 3 4 5
| <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-spring-boot3-starter</artifactId> <version>3.5.7</version> </dependency>
|
配置
- 在application.yml文件中添加以下配置,以启用MyBatis Plus的日志功能。
1 2 3 4 5 6
| mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl global-config: db-config: id-type: auto
|
- 并在Spring Boot启动类中添加
@MapperScan
注解,以指定Mapper接口所在的包路径。1 2 3 4 5 6 7
| @SpringBootApplication @MapperScan("com.example.demo.mapper") public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
|
编码
- 创建一个实体类
User.java
,用于映射数据库表的字段。1 2 3 4 5 6 7
| @Data public class User { private Long id; private String name; private Integer age; private String email; }
|
- 创建一个Mapper接口
UserMapper.java
,用于定义数据库操作的方法。1 2 3
| public interface UserMapper extends BaseMapper<User> { }
|
- 创建一个Service接口,用于定义业务逻辑的方法。
1 2 3
| public interface UserService { }
|
- 创建一个Service实现类,用于实现Service接口的方法,在Service实现类中,使用MyBatis Plus提供的CRUD方法,实现对数据库的增删改查操作。
1 2 3 4 5 6 7 8
| @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; public User getUserById(Long id) { return userMapper.selectById(id); }
|
常用注解
@TableName
: 用于标记当前类对应的表名。
@TableId
: 用于标记当前类对应的表的主键字段。
@TableField
: 用于标记当前类对应的表的字段。
@TableLogic
: 用于标记当前类对应的表的字段是否逻辑删除。
@Select
: 用于标记当前方法为查询方法。
@Insert
: 用于标记当前方法为插入方法。
@Update
: 用于标记当前方法为更新方法。
@Delete
: 用于标记当前方法为删除方法。
@Param
: 用于标记当前方法为参数方法。
@Result
: 用于标记当前方法为结果方法。
@Results
: 用于标记当前方法为结果集方法。
@One
: 用于标记当前方法为一对一关系方法。
@Many
: 用于标记当前方法为一对多关系方法。
@Transactional
: 用于标记当前方法为事务方法。