目录
(三)创建 MyBatis 映射文件(如果不使用注解方式编写 SQL)
在开启一个 Spring Boot 实战项目时,前期的基础功能搭建和准备工作至关重要。以下将详细介绍这些步骤,包括项目创建、基础配置以及相关工具和技术的引入等,同时提供必要的代码示例。
一、项目创建
(一)使用 Spring Initializr 创建项目
- 访问 Spring Initializr 网站
- 打开浏览器,访问Spring Initializr网站。
- 配置项目信息
- 在页面上选择项目的基本信息,如:
- Project:选择使用 Maven 或 Gradle 构建项目,这里以 Maven 为例。
- Language:选择 Java 作为开发语言。
- Spring Boot 版本:根据需求选择合适的 Spring Boot 版本,如 Spring Boot 3.x。
- Project Metadata:填写项目的相关信息,包括 Group(组织或公司域名倒序,如
com.example
)、Artifact(项目名称,如myproject
)、Name(项目名称,与 Artifact 相同)、Description(项目描述)、Package Name(默认根据 Group 和 Artifact 生成,如com.example.myproject
)等。
- 在页面上选择项目的基本信息,如:
- 添加项目依赖
- 在 “Dependencies” 部分,添加项目所需的初始依赖,如 Web 依赖(用于构建 Web 应用)、MyBatis 依赖(如果项目涉及数据库操作且选择使用 MyBatis)等。点击 “Generate” 按钮生成项目结构。
- 下载并导入项目
- 下载生成的项目压缩包,解压后使用 IDE(如 IntelliJ IDEA、Eclipse 等)导入项目。在 IDE 中,选择 “Open” 或 “Import” 项目,找到解压后的项目目录,按照向导完成项目导入。
(二)项目结构分析
- 包结构
- 导入项目后,观察默认的包结构。一般包含
src/main/java
用于存放 Java 源代码,src/main/resources
用于存放配置文件、静态资源等,src/test/java
用于存放测试代码。 - 在
src/main/java
下,默认的包名是根据项目创建时填写的 Group 和 Artifact 生成的,如com.example.myproject
。可以根据项目功能模块进一步划分包,例如com.example.myproject.controller
用于存放控制器类,com.example.myproject.service
用于存放业务逻辑类,com.example.myproject.dao
用于存放数据访问层接口等。
- 导入项目后,观察默认的包结构。一般包含
- 启动类
- 找到项目中的启动类,一般命名为
Application
或类似名称,位于项目的根包下。该类包含一个main
方法,是 Spring Boot 应用的入口点。 - 代码示例(默认的启动类):
- 找到项目中的启动类,一般命名为
package com.example.myproject;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@SpringBootApplication
注解是一个组合注解,包含了@Configuration
(表明该类是一个配置类)、@EnableAutoConfiguration
(启用 Spring Boot 的自动配置功能)和@ComponentScan
(扫描指定包及其子包下的组件,默认扫描启动类所在包及其子包)。
二、数据库配置(假设使用 MySQL 和 MyBatis)
(一)添加数据库驱动依赖
- 在
pom.xml
中添加依赖- 如果项目使用 MySQL 数据库,需要在
pom.xml
文件中添加 MySQL 驱动依赖。例如:
- 如果项目使用 MySQL 数据库,需要在
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependency>
- 确保版本号与实际使用的 MySQL 版本兼容。
(二)配置数据源
- 在
application.properties
或application.yml
中配置- 在
src/main/resources
目录下的配置文件中,添加数据源配置信息。如果使用application.properties
,配置如下:
- 在
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
- 如果使用
application.yml
,配置如下:
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
- 这里的
url
、username
、password
和driver-class-name
需要根据实际的数据库连接信息进行修改。mydb
是数据库名称,root
是用户名,123456
是密码,com.mysql.cj.jdbc.Driver
是 MySQL 8.x 及以上版本的驱动类名。
(三)配置 MyBatis
- 添加 MyBatis 依赖(如果在创建项目时未添加)
- 在
pom.xml
文件中添加 MyBatis 依赖,例如:
- 在
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.1</version>
</dependency>
- 确保版本与 Spring Boot 版本兼容。
- 配置 MyBatis 相关属性(可选)
- 可以在配置文件中进一步配置 MyBatis 的属性,如映射文件位置、日志级别等。例如,在
application.properties
中:
- 可以在配置文件中进一步配置 MyBatis 的属性,如映射文件位置、日志级别等。例如,在
# MyBatis映射文件位置
mybatis.mapper-locations=classpath:mapper/*.xml
# MyBatis日志级别
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
- 在
application.yml
中:
mybatis:
mapper-locations: classpath:mapper/*.xml
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mapper-locations
指定了 MyBatis 映射文件(包含 SQL 语句定义)的位置,log-impl
设置了 MyBatis 的日志实现类,这里使用标准输出日志,方便在开发过程中查看 SQL 执行情况。
三、创建基础实体类和数据访问层接口(DAO)
(一)创建实体类
- 根据数据库表结构定义实体类
- 假设项目中有一个用户表(
user
),包含字段id
(用户 ID,主键)、username
(用户名)、password
(密码)、email
(邮箱)等。创建一个User
实体类,代码如下:
- 假设项目中有一个用户表(
package com.example.myproject.entity;
import java.io.Serializable;
public class User implements Serializable {
private Long id;
private String username;
private String password;
private String email;
// 生成getter和setter方法
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
- 实体类中的属性与数据库表字段对应,实现
Serializable
接口(如果需要进行对象序列化操作,如在缓存或网络传输中)。
(二)创建数据访问层接口(DAO)
- 定义数据访问方法接口
- 创建一个
UserDao
接口,用于定义与用户表相关的数据访问操作,如查询用户、插入用户、更新用户等。代码如下:
- 创建一个
package com.example.myproject.dao;
import com.example.myproject.entity.User;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface UserDao {
// 根据ID查询用户
User findById(Long id);
// 查询所有用户
List<User> findAll();
// 插入用户
int insert(User user);
// 更新用户
int update(User user);
// 根据ID删除用户
int deleteById(Long id);
}
- 使用
@Mapper
注解(如果使用 MyBatis 的注解方式)标识该接口是一个 MyBatis 的数据访问接口,MyBatis 会自动扫描并创建代理实现类。如果不使用注解方式,也可以在配置类中手动配置扫描路径等信息。
(三)创建 MyBatis 映射文件(如果不使用注解方式编写 SQL)
- 编写 SQL 语句映射
- 在
src/main/resources/mapper
目录下(根据配置的mapper-locations
)创建UserDao.xml
文件,编写与UserDao
接口方法对应的 SQL 语句。例如:
- 在
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.myproject.dao.UserDao">
<select id="findById" resultType="com.example.myproject.entity.User">
SELECT * FROM user WHERE id = #{id}
</select>
<select id="findAll" resultType="com.example.myproject.entity.User">
SELECT * FROM user
</select>
<insert id="insert" keyProperty="id" useGeneratedKeys="true">
INSERT INTO user (username, password, email) VALUES (#{username}, #{password}, #{email})
</insert>
<update id="update">
UPDATE user SET username = #{username}, password = #{password}, email = #{email} WHERE id = #{id}
</update>
<delete id="deleteById">
DELETE FROM user WHERE id = #{id}
</delete>
</mapper>
- 在映射文件中,
namespace
指定了对应的接口全路径,每个 SQL 语句通过id
与接口方法对应,resultType
指定查询结果的映射类型(这里是User
实体类)。
通过以上步骤,我们完成了 Spring Boot 实战项目的基础功能搭建与准备工作,为后续的功能开发和业务逻辑实现奠定了基础。在实际项目中,可以根据具体需求进一步优化和扩展这些基础配置,例如添加更多的数据源配置、集成其他数据库或持久层框架等。