news 2026/5/6 18:11:19

SpringBoot 2.5 + MyBatis-Plus 3.4.1 整合 PostgreSQL 保姆级教程(附代码生成器配置)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SpringBoot 2.5 + MyBatis-Plus 3.4.1 整合 PostgreSQL 保姆级教程(附代码生成器配置)

SpringBoot 2.5 + MyBatis-Plus 3.4.1 整合 PostgreSQL 保姆级教程(附代码生成器配置)

PostgreSQL作为一款功能强大的开源关系型数据库,在企业级应用中越来越受欢迎。而SpringBoot和MyBatis-Plus的组合,则为Java开发者提供了快速构建数据访问层的利器。本文将带你从零开始,一步步完成SpringBoot 2.5与MyBatis-Plus 3.4.1对PostgreSQL的整合,并详细介绍代码生成器的配置方法。

1. 环境准备与数据库配置

在开始编码之前,我们需要确保开发环境已经准备就绪。这里假设你已经安装了Java 8或更高版本,以及Maven构建工具。

首先,我们需要安装PostgreSQL数据库。推荐使用PostgreSQL 12或更高版本,可以从官网下载对应操作系统的安装包。安装过程中,记住你设置的管理员密码,这将在后续连接数据库时用到。

安装完成后,创建一个测试数据库。可以使用PostgreSQL自带的psql命令行工具:

CREATE DATABASE springboot_demo;

对于数据库可视化工具,除了Navicat外,还可以考虑使用DBeaver或pgAdmin。这些工具对PostgreSQL的支持都很好,且社区版免费。如果遇到连接问题,通常检查以下几点:

  • PostgreSQL服务是否已启动
  • 连接地址、端口是否正确(默认5432)
  • 用户名密码是否正确
  • pg_hba.conf文件是否配置了允许远程连接

2. 创建SpringBoot项目并配置依赖

使用Spring Initializr创建一个新的SpringBoot项目,选择以下依赖:

  • Spring Web
  • Spring Data JPA (虽然我们用MyBatis-Plus,但某些场景可能需要)
  • PostgreSQL Driver

然后在pom.xml中添加MyBatis-Plus相关依赖:

<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.1</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.4.1</version> </dependency> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>2.2</version> </dependency>

注意版本兼容性,SpringBoot 2.5.x与MyBatis-Plus 3.4.1配合良好。如果使用其他版本,可能需要调整配置。

3. 数据库连接与MyBatis-Plus配置

在application.yml中配置数据库连接和MyBatis-Plus相关设置:

spring: datasource: driver-class-name: org.postgresql.Driver url: jdbc:postgresql://localhost:5432/springboot_demo username: postgres password: your_password mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 开启SQL日志 global-config: db-config: id-type: auto # 主键策略 logic-delete-field: deleted # 逻辑删除字段名 logic-delete-value: 1 # 逻辑已删除值 logic-not-delete-value: 0 # 逻辑未删除值

这里配置了逻辑删除功能,这是MyBatis-Plus提供的一个实用特性。当你在实体类中添加deleted字段并加上@TableLogic注解后,删除操作将自动变为更新操作,将deleted字段设为1。

4. 代码生成器配置与使用

MyBatis-Plus的代码生成器可以极大提高开发效率。下面是一个完整的代码生成器配置示例:

public class CodeGenerator { public static void main(String[] args) { // 代码生成器 AutoGenerator mpg = new AutoGenerator(); // 全局配置 GlobalConfig gc = new GlobalConfig(); String projectPath = System.getProperty("user.dir"); gc.setOutputDir(projectPath + "/src/main/java"); gc.setAuthor("your_name"); gc.setOpen(false); gc.setFileOverride(true); // 是否覆盖已有文件 gc.setServiceName("%sService"); // 去除Service接口的首字母I gc.setIdType(IdType.AUTO); // 主键策略 gc.setDateType(DateType.ONLY_DATE); // 定义生成的实体类中日期类型 gc.setSwagger2(true); // 开启Swagger2注解 mpg.setGlobalConfig(gc); // 数据源配置 DataSourceConfig dsc = new DataSourceConfig(); dsc.setUrl("jdbc:postgresql://localhost:5432/springboot_demo"); dsc.setDriverName("org.postgresql.Driver"); dsc.setUsername("postgres"); dsc.setPassword("your_password"); dsc.setDbType(DbType.POSTGRE_SQL); mpg.setDataSource(dsc); // 包配置 PackageConfig pc = new PackageConfig(); pc.setParent("com.example.demo"); pc.setEntity("entity"); pc.setMapper("mapper"); pc.setService("service"); pc.setController("controller"); mpg.setPackageInfo(pc); // 策略配置 StrategyConfig strategy = new StrategyConfig(); strategy.setNaming(NamingStrategy.underline_to_camel); strategy.setColumnNaming(NamingStrategy.underline_to_camel); strategy.setEntityLombokModel(true); strategy.setRestControllerStyle(true); strategy.setInclude("user", "role"); // 需要生成的表名 strategy.setControllerMappingHyphenStyle(true); strategy.setTablePrefix("t_"); // 表前缀过滤 mpg.setStrategy(strategy); // 执行生成 mpg.execute(); } }

运行此代码生成器后,你将获得完整的CRUD代码,包括实体类、Mapper接口、Service层和Controller层。

5. 常见问题与解决方案

在实际开发中,可能会遇到以下问题:

  1. PostgreSQL序列问题: PostgreSQL使用序列(Sequence)来实现自增主键。确保你的表主键设置了正确的序列:

    CREATE SEQUENCE user_id_seq START 1; ALTER TABLE user ALTER COLUMN id SET DEFAULT nextval('user_id_seq');
  2. 时区问题: 在application.yml中添加时区配置:

    spring: datasource: url: jdbc:postgresql://localhost:5432/springboot_demo?useSSL=false&serverTimezone=Asia/Shanghai
  3. MyBatis-Plus分页插件配置: 添加分页插件配置类:

    @Configuration public class MybatisPlusConfig { @Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); } }
  4. JSON字段处理: PostgreSQL支持JSON类型字段,可以通过以下方式处理:

    @TableField(typeHandler = JacksonTypeHandler.class) private Map<String, Object> attributes;

6. 高级功能与最佳实践

除了基本的CRUD操作外,MyBatis-Plus还提供了许多高级功能:

  1. 条件构造器: 使用QueryWrapper或LambdaQueryWrapper构建复杂查询条件:

    QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.like("name", "张") .between("age", 20, 30) .orderByDesc("create_time"); userService.list(queryWrapper);
  2. 自动填充功能: 实现MetaObjectHandler接口,自动填充创建时间和更新时间:

    @Component public class MyMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); } @Override public void updateFill(MetaObject metaObject) { this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); } }
  3. 多数据源配置: 如果需要连接多个数据库,可以使用dynamic-datasource-spring-boot-starter:

    <dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <version>3.5.0</version> </dependency>
  4. 性能优化建议

    • 合理使用二级缓存
    • 避免N+1查询问题
    • 批量操作使用executeBatch
    • 复杂查询考虑使用原生SQL

7. 测试与验证

编写单元测试验证整合是否成功:

@SpringBootTest class UserMapperTest { @Autowired private UserMapper userMapper; @Test void testInsert() { User user = new User(); user.setName("测试用户"); user.setAge(25); user.setEmail("test@example.com"); int result = userMapper.insert(user); assertEquals(1, result); } @Test void testSelect() { List<User> users = userMapper.selectList(null); assertFalse(users.isEmpty()); } }

对于更复杂的业务场景,可以结合Mockito等框架进行模拟测试。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/6 18:07:04

ChanlunX:让缠论分析从复杂理论走向直观实践的专业工具

ChanlunX&#xff1a;让缠论分析从复杂理论走向直观实践的专业工具 【免费下载链接】ChanlunX 缠中说禅炒股缠论可视化插件 项目地址: https://gitcode.com/gh_mirrors/ch/ChanlunX 你是否曾经面对复杂的缠论分析感到无从下手&#xff1f;是否在手动绘制笔、段、中枢时耗…

作者头像 李华
网站建设 2026/5/6 18:03:31

3步告别RGB软件混乱:OpenRGB统一控制全攻略

3步告别RGB软件混乱&#xff1a;OpenRGB统一控制全攻略 【免费下载链接】OpenRGB Open source RGB lighting control that doesnt depend on manufacturer software. Supports Windows, Linux, MacOS. Mirror of https://gitlab.com/CalcProgrammer1/OpenRGB. Releases can be …

作者头像 李华
网站建设 2026/5/6 18:03:29

CANoe自动化测试效率翻倍:手把手教你用XML配置驱动已有的CAPL脚本库

CANoe自动化测试效率翻倍&#xff1a;XML配置驱动CAPL脚本库实战指南 在汽车电子测试领域&#xff0c;CAPL脚本长期以来都是CANoe环境中不可或缺的测试工具。然而随着测试用例数量的增长&#xff0c;许多团队都会遇到一个共同的困境&#xff1a;积累了数百个CAPL测试脚本后&…

作者头像 李华
网站建设 2026/5/6 17:57:11

Spatial-TTT:测试时训练在视觉空间智能中的应用

1. 项目概述&#xff1a;当视觉空间智能遇上测试时训练在计算机视觉领域&#xff0c;我们一直在追求让AI系统像人类一样理解三维空间关系。传统方法通常依赖大量标注数据和固定模型参数&#xff0c;而"Spatial-TTT"提出了一种全新的思路——让模型在测试阶段也能持续…

作者头像 李华
网站建设 2026/5/6 17:53:54

FramePack实战指南:5分钟掌握AI舞蹈视频制作全流程

FramePack实战指南&#xff1a;5分钟掌握AI舞蹈视频制作全流程 【免费下载链接】FramePack Lets make video diffusion practical! 项目地址: https://gitcode.com/gh_mirrors/fr/FramePack 想要用AI技术创作令人惊艳的舞蹈视频吗&#xff1f;FramePack作为一款革命性的…

作者头像 李华
网站建设 2026/5/6 17:49:07

实战指南:手把手教你使用奥比中光Astra SDK与OpenNI进行深度图像处理

实战指南&#xff1a;手把手教你使用奥比中光Astra SDK与OpenNI进行深度图像处理 深度视觉技术正在重塑人机交互的边界。作为国内3D传感领域的先行者&#xff0c;奥比中光Astra系列相机凭借其紧凑的工业设计和稳定的深度输出&#xff0c;已成为开发者构建空间感知应用的首选硬件…

作者头像 李华