商城网站都有哪 些功能,抖音代运营怎么样,岳阳建设局网站,免费的wordpress模板本文适合Spring Boot新手及需要整合数据持久层框架的开发者#xff0c;将一步步带你完成「环境准备→MySQL安装配置→Spring Boot项目初始化→MyBatis集成→MyBatis-Plus进阶」全流程#xff0c;每个步骤均附实操代码与注意事项#xff0c;看完即可上手实战。
一、前置知识…本文适合Spring Boot新手及需要整合数据持久层框架的开发者将一步步带你完成「环境准备→MySQL安装配置→Spring Boot项目初始化→MyBatis集成→MyBatis-Plus进阶」全流程每个步骤均附实操代码与注意事项看完即可上手实战。一、前置知识与环境准备在开始搭建前确保你已掌握基础的Java开发JDK8、Maven/Gradle依赖管理以及简单的SQL语法。以下是必备环境清单建议统一版本避免兼容性问题JDK8 或 11Spring Boot 2.x/3.x均兼容本文以JDK8为例构建工具Maven 3.6 或 Gradle 7.0本文用MavenIDEIntelliJ IDEA 2021 或 EclipseIDEA体验更佳数据库MySQL 8.05.7版本也可配置略有差异文中会标注Spring Boot版本3.2.x稳定版兼容主流依赖二、MySQL数据库安装与配置关键步骤数据持久层框架最终要操作数据库先完成MySQL的安装与基础配置这一步是后续开发的基础务必仔细。2.1 下载与安装MySQL下载地址访问MySQL官方下载页选择对应系统版本Windows/macOS/Linux。推荐下载「MySQL Community Server」社区版免费开源。安装流程以Windows为例双击安装包选择「Custom」自定义安装勾选「MySQL Server」核心组件下一步。配置安装路径建议不要含中文和空格如D:\MySQL\mysql-8.0.36继续下一步。配置服务器默认端口3306若被占用可修改后续项目配置需对应选择「Use Legacy Authentication Method」兼容旧版本新手友好设置root用户密码务必牢记如root123456。完成安装后勾选「Start the MySQL Server at System Startup」确保服务开机自启。验证安装Windows打开cmd输入命令mysql -u root -p输入设置的密码若出现「mysql」提示符说明安装成功。macOS/Linux打开终端输入相同命令验证或通过「系统偏好设置→MySQL」查看服务状态。2.2 创建项目专用数据库为避免与其他项目数据混淆创建一个专门用于本次Spring Boot项目的数据库示例库名spring_boot_demo-- 1. 创建数据库指定编码为UTF-8避免中文乱码 CREATE DATABASE spring_boot_demo CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 2. 切换到该数据库 USE spring_boot_demo; -- 3. 创建测试表以用户表user为例 CREATE TABLE user ( id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT 主键ID, username VARCHAR(50) NOT NULL COMMENT 用户名, age INT COMMENT 年龄, email VARCHAR(100) COMMENT 邮箱, create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间 ) COMMENT 用户表;注意MySQL 8.0默认编码为utf8mb4支持表情符号5.7版本需手动设置编码否则可能出现中文乱码。若使用5.7创建数据库时需补充命令ALTER DATABASE spring_boot_demo SET character_set_server utf8mb4;三、初始化Spring Boot项目推荐使用Spring官方的「Spring Initializr」快速初始化项目步骤如下3.1 生成项目骨架访问Spring Initializr网页配置如下参数ProjectMavenLanguageJavaSpring Boot3.2.5稳定版Groupcom.example自定义包名Artifactspring-boot-mybatis-demo项目名Package namecom.example.springbootmybatisdemoJava8添加依赖DependenciesSpring Web用于后续接口测试Spring Data JDBC基础JDBC支持MySQL DriverMySQL驱动Spring Boot会自动适配版本Lombok简化实体类代码可选但推荐点击「Generate」下载项目压缩包解压后用IDEA打开。3.2 核对pom.xml依赖打开项目根目录的pom.xml确保核心依赖已添加若缺失手动补充dependencies!-- Spring Web -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-weblt;/artifactIdgt; lt;/dependencygt; !-- MySQL驱动 -- dependency groupIdcom.mysql/groupId artifactIdmysql-connector-j/artifactId scopegt;runtimelt;/scopegt; lt;/dependencygt; !-- Lombok -- dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId optionaltruelt;/optionalgt; lt;/dependencygt; !-- 测试依赖 -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-test/artifactId scopetest/scope /dependency /dependencies四、集成MyBatis基础版MyBatis是一款优秀的持久层框架通过XML或注解方式映射SQL语句灵活度高。下面完成MyBatis与Spring Boot的整合。4.1 添加MyBatis依赖在pom.xml中添加MyBatis整合Spring Boot的 Starter 依赖!-- MyBatis整合Spring Boot Starter -- dependency groupIdorg.mybatis.spring.boot/groupId artifactIdmybatis-spring-boot-starter/artifactId version2.3.2/versiongt; !-- 适配Spring Boot 3.x版本需匹配 -- /dependency4.2 配置application.ymlSpring Boot默认支持application.properties和application.yml两种配置文件yml格式更清晰这里使用yml。删除默认的application.properties创建application.yml配置数据库连接和MyBatis核心参数spring: # 数据库配置 datasource: url: jdbc:mysql://localhost:3306/spring_boot_demo?useSSLfalseserverTimezoneAsia/ShanghaiallowPublicKeyRetrievaltrue username: root password: root123456 # 替换为你的MySQL密码 driver-class-name: com.mysql.cj.jdbc.Driver # MySQL 8.0驱动类名5.7为com.mysql.jdbc.Driver # MyBatis配置 mybatis: mapper-locations: classpath:mapper/*.xml # 指定Mapper XML文件存放路径 type-aliases-package: com.example.springbootmybatisdemo.entity # 实体类包名简化XML中的类全限定名 configuration: map-underscore-to-camel-case: true # 开启下划线转驼峰如数据库字段create_time映射为实体类createTime log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 打印SQL日志开发环境推荐开启便于调试注意事项1. url中的serverTimezone必须指定为Asia/Shanghai否则会出现时区错误2. useSSLfalse开发环境关闭SSL生产环境需开启3. allowPublicKeyRetrievaltrue解决MySQL 8.0连接时的公钥验证问题。4.3 编写核心代码按「实体类→Mapper接口→Mapper XML→Service→Controller」的顺序编写代码分层清晰便于维护。4.3.1 实体类Entity创建com.example.springbootmybatisdemo.entity包编写User实体类对应数据库user表使用Lombok简化getter/setter/构造方法package com.example.springbootmybatisdemo.entity; import lombok.Data; import java.time.LocalDateTime; Data // Lombok注解自动生成getter、setter、toString等方法 public class User { private Long id; // 对应数据库id字段 private String username; // 对应username字段 private Integer age; // 对应age字段 private String email; // 对应email字段 private LocalDateTime createTime; // 对应create_time字段下划线转驼峰 }4.3.2 Mapper接口创建com.example.springbootmybatisdemo.mapper包编写UserMapper接口MyBatis的Mapper接口无需实现类由框架动态代理生成package com.example.springbootmybatisdemo.mapper; import com.example.springbootmybatisdemo.entity.User; import org.apache.ibatis.annotations.Mapper; import java.util.List; Mapper // 标识该接口为MyBatis的Mapper接口Spring Boot会自动扫描 public interface UserMapper { // 查询所有用户 ListUser listAll(); // 根据ID查询用户 User getById(Long id); // 新增用户 int insert(User user); // 更新用户 int update(User user); // 删除用户 int deleteById(Long id); }4.3.3 Mapper XML文件在resources目录下创建mapper文件夹编写UserMapper.xml与UserMapper接口对应存放SQL语句?xml version1.0 encodingUTF-8 ? !DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN https://mybatis.org/dtd/mybatis-3-mapper.dtd !-- namespace必须与Mapper接口全限定名一致 -- mapper namespacecom.example.springbootmybatisdemo.mapper.UserMapper !-- 结果集映射可选若字段名与实体类属性名完全匹配可省略 -- resultMap idUserResultMap typeUser id columnid propertyid/ result columnusername propertyusername/ result columnage propertyage/ result columnemail propertyemail/ result columncreate_time propertycreateTime/ /resultMap !-- 查询所有用户对应UserMapper.listAll() -- select idlistAll resultMapUserResultMap SELECT id, username, age, email, create_time FROM user /select !-- 根据ID查询对应UserMapper.getById() -- select idgetById parameterTypeLong resultMapUserResultMap SELECT id, username, age, email, create_time FROM user WHERE id #{id} /select !-- 新增用户对应UserMapper.insert() -- insert idinsert parameterTypeUser useGeneratedKeystrue keyPropertyid INSERT INTO user (username, age, email) VALUES (#{username}, #{age}, #{email}) /insert !-- 更新用户对应UserMapper.update() -- update idupdate parameterTypeUser UPDATE user SET username #{username}, age #{age}, email #{email} WHERE id #{id} /update !-- 删除用户对应UserMapper.deleteById() -- delete iddeleteById parameterTypeLong DELETE FROM user WHERE id #{id} /delete /mapper4.3.4 Service层业务逻辑层创建com.example.springbootmybatisdemo.service包编写UserService接口和实现类封装业务逻辑// UserService接口 package com.example.springbootmybatisdemo.service; import com.example.springbootmybatisdemo.entity.User; import java.util.List; public interface UserService { ListUser listAll(); User getById(Long id); boolean save(User user); boolean update(User user); boolean removeById(Long id); }// UserService实现类 package com.example.springbootmybatisdemo.service.impl; import com.example.springbootmybatisdemo.entity.User; import com.example.springbootmybatisdemo.mapper.UserMapper; import com.example.springbootmybatisdemo.service.UserService; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; Service // 标识为服务层组件Spring会自动管理 public class UserServiceImpl implements UserService { Resource // 注入UserMapper也可使用Autowired private UserMapper userMapper; Override public ListUser listAll() { return userMapper.listAll(); } Override public User getById(Long id) { return userMapper.getById(id); } Override public boolean save(User user) { return userMapper.insert(user) 0; } Override public boolean update(User user) { return userMapper.update(user) 0; } Override public boolean removeById(Long id) { return userMapper.deleteById(id) 0; } }4.3.5 Controller层接口层创建com.example.springbootmybatisdemo.controller包编写UserController提供RESTful接口供测试package com.example.springbootmybatisdemo.controller; import com.example.springbootmybatisdemo.entity.User; import com.example.springbootmybatisdemo.service.UserService; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.List; RestController // 标识为REST接口控制器返回JSON数据 RequestMapping(/user) // 接口统一前缀 public class UserController { Resource private UserService userService; // 查询所有用户GET /user/list GetMapping(/list) public ListUser listAll() { return userService.listAll(); } // 根据ID查询GET /user/{id} GetMapping(/{id}) public User getById(PathVariable Long id) { return userService.getById(id); } // 新增用户POST /user/save PostMapping(/save) public boolean save(RequestBody User user) { return userService.save(user); } // 更新用户PUT /user/update PutMapping(/update) public boolean update(RequestBody User user) { return userService.update(user); } // 删除用户DELETE /user/delete/{id} DeleteMapping(/delete/{id}) public boolean removeById(PathVariable Long id) { return userService.removeById(id); } }4.4 测试验证启动项目运行SpringBootMybatisDemoApplication类的main方法若控制台无报错且出现「Tomcat started on port(s): 8080」说明项目启动成功。接口测试推荐使用Postman或浏览器新增用户POST请求 http://localhost:8080/user/save请求体JSON{username:张三,age:20,email:zhangsantest.com}返回true表示成功。查询所有用户GET请求 http://localhost:8080/user/list可看到新增的用户数据。其他接口查询单个、更新、删除类似按对应请求方式和参数测试即可。五、集成MyBatis-Plus进阶版MyBatis-Plus简称MP是MyBatis的增强工具在MyBatis基础上只做增强不做改变提供了「CRUD操作自动生成」「条件构造器」「代码生成器」等功能能大幅减少重复代码提高开发效率。5.1 替换依赖移除MyBatis添加MyBatis-PlusMyBatis-Plus已包含MyBatis的核心功能无需重复依赖。修改pom.xml移除MyBatis依赖添加MyBatis-Plus Starter!-- 移除原MyBatis依赖 -- !-- dependency groupIdorg.mybatis.spring.boot/groupId artifactIdmybatis-spring-boot-starter/artifactId version2.3.2/versiongt; lt;/dependencygt; -- !-- 添加MyBatis-Plus Starter -- dependency groupIdcom.baomidou/groupId artifactIdmybatis-plus-boot-starter/artifactId version3.5.5/versiongt; !-- 适配Spring Boot 3.x -- /dependency5.2 调整application.yml配置MyBatis-Plus的配置与MyBatis兼容只需将mybatis前缀改为mybatis-plus即可若需保留原MyBatis配置也可兼容# MyBatis-Plus配置替换原MyBatis配置 mybatis-plus: mapper-locations: classpath:mapper/*.xml type-aliases-package: com.example.springbootmybatisdemo.entity configuration: map-underscore-to-camel-case: true log-impl: org.apache.ibatis.logging.stdout.StdOutImpl global-config: db-config: id-type: AUTO # 主键自增策略与数据库AUTO_INCREMENT匹配 table-prefix: t_ # 表名前缀若数据库表名有前缀如t_user可配置此参数实体类无需写前缀5.3 简化代码利用MP的CRUD自动生成MyBatis-Plus提供了BaseMapper接口包含了常用的CRUD方法只需让UserMapper继承BaseMapper即可无需编写任何方法和XML直接使用CRUD功能。5.3.1 改造UserMapperpackage com.example.springbootmybatisdemo.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.example.springbootmybatisdemo.entity.User; import org.apache.ibatis.annotations.Mapper; Mapper public interface UserMapper extends BaseMapperUser { // 无需编写任何方法BaseMapper已包含listAll、getById、insert等CRUD方法 }5.3.2 改造UserServiceMyBatis-Plus还提供了IService接口和ServiceImpl实现类进一步封装了Service层的CRUD操作简化Service代码// UserService接口继承IService package com.example.springbootmybatisdemo.service; import com.baomidou.mybatisplus.extension.service.IService; import com.example.springbootmybatisdemo.entity.User; public interface UserService extends IServiceUser { // 如需自定义业务方法在此添加基础CRUD方法已由IService提供 }// UserService实现类继承ServiceImpl package com.example.springbootmybatisdemo.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.example.springbootmybatisdemo.entity.User; import com.example.springbootmybatisdemo.mapper.UserMapper; import com.example.springbootmybatisdemo.service.UserService; import org.springframework.stereotype.Service; Service public class UserServiceImpl extends ServiceImplUserMapper, User implements UserService { // 无需编写任何基础CRUD实现ServiceImpl已实现IService的所有方法 }5.3.3 测试MP的增强功能修改UserController测试MP提供的增强方法如条件查询、批量操作package com.example.springbootmybatisdemo.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.example.springbootmybatisdemo.entity.User; import com.example.springbootmybatisdemo.service.UserService; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.List; RestController RequestMapping(/user) public class UserController { Resource private UserService userService; // 条件查询查询年龄大于18的用户 GetMapping(/list/age) public ListUser listByAge() { LambdaQueryWrapperUser queryWrapper new LambdaQueryWrapper(); queryWrapper.gt(User::getAge, 18); // gt表示大于greater than return userService.list(queryWrapper); } // 批量新增 PostMapping(/save/batch) public boolean saveBatch(RequestBody ListUser userList) { return userService.saveBatch(userList); } // 其他原有接口无需修改直接可用 }5.4 可选使用MP代码生成器一键生成全代码对于复杂项目MP提供了代码生成器可根据数据库表结构一键生成Entity、Mapper、Service、Controller、XML等全套代码彻底解放双手。步骤如下5.4.1 添加代码生成器依赖!-- MyBatis-Plus代码生成器 -- dependency groupIdcom.baomidou/groupId artifactIdmybatis-plus-generator/artifactId lt;versiongt;3.5.5lt;/versiongt; lt;/dependencygt; !-- 模板引擎代码生成器需要模板默认使用Velocity -- dependency groupIdorg.apache.velocity/groupId artifactIdvelocity-engine-core/artifactId version2.3/version /dependency5.4.2 编写生成器代码创建com.example.springbootmybatisdemo.generator包编写CodeGenerator类package com.example.springbootmybatisdemo.generator; import com.baomidou.mybatisplus.generator.FastAutoGenerator; import com.baomidou.mybatisplus.generator.config.OutputFile; import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine; import java.util.Collections; public class CodeGenerator { public static void main(String[] args) { // 数据库连接信息 String url jdbc:mysql://localhost:3306/spring_boot_demo?useSSLfalseserverTimezoneAsia/ShanghaiallowPublicKeyRetrievaltrue; String username root; String password root123456; FastAutoGenerator.create(url, username, password) // 全局配置 .globalConfig(builder - { builder.author(your-name) // 设置作者 .outputDir(System.getProperty(user.dir) /src/main/java) // 生成文件输出路径 .disableOpenDir() // 生成后不打开文件夹 .commentDate(yyyy-MM-dd HH:mm:ss); // 注释日期格式 }) // 包配置 .packageConfig(builder - { builder.parent(com.example.springbootmybatisdemo) // 父包名 .moduleName() // 模块名无则空 .entity(entity) // 实体类包名 .mapper(mapper) // Mapper接口包名 .service(service) // Service包名 .serviceImpl(service.impl) // Service实现类包名 .controller(controller) // Controller包名 .xml(mapper) // Mapper XML包名resources下 .pathInfo(Collections.singletonMap(OutputFile.xml, System.getProperty(user.dir) /src/main/resources/mapper)); }) // 策略配置 .strategyConfig(builder - { builder.addInclude(user) // 要生成代码的数据库表名多个表用addInclude添加 .addTablePrefix(t_) // 表名前缀若表名有前缀生成实体类时会去掉前缀 // 实体类策略 .entityBuilder() .enableLombok() // 开启Lombok .enableTableFieldAnnotation() // 为字段添加注解TableField .idType(com.baomidou.mybatisplus.generator.config.rules.IdType.AUTO) // 主键策略 // Controller策略 .controllerBuilder() .enableRestStyle() // 开启RESTful风格接口使用RestController .enableHyphenStyle() // 接口地址使用连字符如/user/list-all // Mapper策略 .mapperBuilder() .enableBaseResultMap() // 生成基础ResultMap .enableBaseColumnList(); // 生成基础ColumnList }) // 模板引擎配置默认Velocity .templateEngine(new VelocityTemplateEngine()) // 执行生成 .execute(); } }5.4.3 生成代码运行CodeGenerator的main方法即可一键生成全套代码生成后可直接使用无需手动编写基础CRUD代码。六、常见问题排查搭建过程中可能遇到以下问题整理了解决方案供参考问题1数据库连接失败No suitable driver found→ 解决方案检查MySQL驱动依赖是否添加driver-class-name是否正确8.0为com.mysql.cj.jdbc.Driver。问题2时区错误The server time zone value is unrecognized→ 解决方案在数据库url中添加serverTimezoneAsia/Shanghai。问题3Mapper接口无法注入No qualifying bean of type→ 解决方案确保Mapper接口添加了Mapper注解或在启动类上添加MapperScan(com.example.springbootmybatisdemo.mapper)扫描包。问题4下划线转驼峰失效→ 解决方案在application.yml中开启mybatis-plus.configuration.map-underscore-to-camel-casetrue。问题5SQL语句报错Column xxx not found→ 解决方案检查实体类属性名与数据库字段名是否匹配或是否正确配置了ResultMap。七、总结本文从零开始完成了「MySQL安装→Spring Boot项目初始化→MyBatis集成→MyBatis-Plus进阶」的全流程实战核心要点如下环境准备是基础需确保JDK、MySQL、Maven版本兼容。MyBatis适合需要灵活控制SQL的场景需手动编写Mapper接口和XML。MyBatis-Plus是MyBatis的增强工具通过BaseMapper和IService大幅减少重复代码代码生成器可进一步提升开发效率。配置文件中的数据库连接信息、Mapper路径、下划线转驼峰等参数是关键需仔细核对。后续可继续学习MyBatis-Plus的高级功能如分页插件、乐观锁、逻辑删除等进一步优化项目。如果本文对你有帮助欢迎点赞收藏