# spring-mybatis **Repository Path**: java-lesson/spring-mybatis ## Basic Information - **Project Name**: spring-mybatis - **Description**: No description available - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-10 - **Last Updated**: 2026-04-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Spring MyBatis Demo 基于 Spring Framework + MyBatis + H2 数据库的示例项目,演示 MyBatis 的核心功能。 ## 技术栈 - **JDK**: 26 - **Spring Framework**: 7.0.2 - **MyBatis**: 3.5.19 - **MyBatis-Spring**: 3.0.4 - **H2 Database**: 2.3.232 - **HikariCP**: 5.1.0(高性能连接池) ## 项目特性 - ✅ 使用 Java Config 替代 XML 配置 - ✅ 支持多环境配置(开发/生产) - ✅ HikariCP 高性能数据库连接池 - ✅ MyBatis 注解与 XML 混合使用 - ✅ 动态 SQL 查询(多条件组合) - ✅ 分页查询支持 - ✅ 事务管理 - ✅ Mapper 接口扫描 ## 项目结构 ``` spring-mybatis/ ├── src/main/java/com/example/ │ ├── config/ │ │ └── AppConfig.java # Spring 配置类 │ ├── mapper/ │ │ └── UserMapper.java # MyBatis Mapper 接口 │ ├── model/ │ │ ├── User.java # 用户实体类 │ │ ├── PageQuery.java # 分页查询参数 │ │ └── PageResult.java # 分页结果封装 │ ├── service/ │ │ └── UserService.java # 用户服务层 │ └── Application.java # 主应用程序入口 ├── src/main/resources/ │ ├── mappers/ │ │ └── UserMapper.xml # MyBatis XML 映射文件 │ ├── application.properties # 主配置文件 │ ├── application-dev.properties # 开发环境配置 │ ├── application-prod.properties # 生产环境配置 │ └── schema.sql # 数据库初始化脚本 ├── data/dev/ # H2 数据库文件目录 ├── pom.xml # Maven 配置文件 └── .gitignore # Git 忽略配置 ``` ## 快速开始 ### 前置要求 - JDK 26 或更高版本 - Maven 3.6+ ### 运行项目 1. **克隆项目** ```bash git clone cd spring-mybatis ``` 2. **编译项目** ```bash mvn clean compile ``` 3. **运行应用** ```bash mvn exec:java -Dexec.mainClass="com.example.Application" ``` 或者直接运行主类: ```bash java -cp target/classes:$(mvn dependency:build-classpath -q -Dmdep.outputFile=/dev/stdout) com.example.Application ``` ### 切换环境 默认使用开发环境(dev),可通过以下方式切换: ```bash # 使用生产环境配置 java -Dspring.profiles.active=prod -cp target/classes:... com.example.Application ``` 或在 `application.properties` 中修改: ```properties spring.profiles.active=prod ``` ## 功能演示 运行程序后将演示以下功能: 1. **根据 ID 查询用户** - 单条记录查询 2. **插入新用户** - 数据插入与主键回填 3. **更新用户** - 数据更新操作 4. **删除用户** - 数据删除操作 5. **综合查询(带分页)** - 多条件动态 SQL + 分页查询 ### 示例输出 ``` ========== MyBatis 功能演示 ========== 【根据 ID 查询用户】(Find User by ID): 用户 ID=1: User{id=1, username='张三', email='zhangsan@example.com', age=25, ...} 【插入新用户】(Insert New User): 插入成功,生成的 ID: 4 新用户信息: User{id=4, username='赵六', ...} 【更新用户】(Update User): 更新前: User{id=2, username='李四', ...} 更新结果: 成功 更新后: User{id=2, username='李四', email='lisi_updated@example.com', ...} 【删除用户】(Delete User): 创建临时用户: User{id=5, username='临时用户', ...} 删除结果: 成功 验证删除 - 查询该用户: null 【综合查询演示 - 带分页】(Search with Pagination): 查询条件: 年龄 25-35 岁 分页参数: 第 1 页,每页 3 条 总记录数: 4 总页数: 2 当前页: 1 是否有下一页: true 数据列表: User{id=1, username='张三', ...} User{id=2, username='李四', ...} User{id=3, username='王五', ...} --- 第 2 页 --- 当前页: 2 数据列表: User{id=4, username='赵六', ...} ========== 演示结束 ========== ``` ## 配置说明 ### 数据库配置 **开发环境** (`application-dev.properties`) - 使用 H2 文件模式数据库 - 数据持久化到 `./data/dev/develop` - 自动执行 `schema.sql` 初始化表结构和测试数据 **生产环境** (`application-prod.properties`) - 使用 MySQL 数据库 - 支持通过环境变量覆盖敏感信息: - `DB_USERNAME`: 数据库用户名 - `DB_PASSWORD`: 数据库密码 ### MyBatis 配置 在 `application.properties` 中统一配置: ```properties mybatis.mapper-locations=classpath:mappers/*.xml mybatis.type-aliases-package=com.example.model ``` ## 核心代码说明 ### 1. Spring 配置类 (AppConfig.java) 使用 Java Config 方式配置: - 数据源(HikariCP 连接池) - SqlSessionFactory - 事务管理器 - 组件扫描和 Mapper 扫描 ### 2. Mapper 接口 (UserMapper.java) 演示 MyBatis 的核心功能: - 动态 SQL 查询(``、`` 标签) - 分页查询(LIMIT/OFFSET) - 主键回填(useGeneratedKeys) ### 3. 服务层 (UserService.java) 业务逻辑封装: - 用户 CRUD 操作 - 分页查询服务 - 事务支持 ### 4. 分页模型 - `PageQuery`: 分页查询参数(页码、每页大小) - `PageResult`: 分页结果封装(数据列表、总数、总页数等) ## 注意事项 1. **H2 数据库文件**: `data/` 目录包含本地开发的 H2 数据库文件,已在 `.gitignore` 中忽略 2. **端口占用**: 如果使用 H2 的 AUTO_SERVER 模式,确保没有其他进程占用 3. **生产环境**: 部署到生产环境时,请切换到 prod 配置并设置正确的数据库凭据 ## 许可证 本项目仅用于学习和演示目的。