SpringBoot+MyBatis+MySQL开发环境搭建与项目实战

发布时间:2026/7/4 2:51:15
SpringBoot+MyBatis+MySQL开发环境搭建与项目实战 1. 开发环境准备与工具选型在开始构建SpringBootMyBatisMySQL项目前我们需要先搭建完整的开发环境。作为Java开发者我强烈推荐使用IntelliJ IDEA作为集成开发环境IDE它不仅对Spring生态有深度支持还能显著提升开发效率。1.1 JDK版本选择与配置当前主流选择是JDK 1.8或JDK 11这两个LTS版本在企业级开发中应用最广泛。以JDK 1.8为例安装后需要确认环境变量配置正确# 检查Java版本 java -version # 输出应类似java version 1.8.0_301提示如果同时安装多个JDK版本建议使用JEnv或IDE内置的SDK管理工具进行版本切换避免环境变量冲突。1.2 IntelliJ IDEA的优化配置安装完IDEA后有几个关键设置需要调整Maven配置修改默认的Maven仓库路径避免C盘爆满!-- settings.xml中修改本地仓库位置 -- localRepositoryD:\maven_repo/localRepository插件安装必备插件包括Lombok减少样板代码MyBatisXMyBatis专用增强Database Tools数据库连接管理VM参数调整在idea64.exe.vmoptions中增加内存配置-Xms1024m -Xmx2048m1.3 MySQL安装与基础配置推荐使用MySQL 5.7或8.0版本安装时注意设置root密码强度策略开发环境可设为LOW配置默认字符集为utf8mb4支持完整Unicode开启binlog方便后续数据同步安装完成后创建测试数据库CREATE DATABASE demo_db CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;2. 项目初始化与框架集成2.1 使用Spring Initializr创建项目在IDEA中通过Spring Initializr创建项目时关键依赖选择WebSpring WebSQLMySQL Driver MyBatis FrameworkDevToolsSpring Boot DevTools热部署生成的pom.xml应包含类似配置dependencies dependency groupIdorg.mybatis.spring.boot/groupId artifactIdmybatis-spring-boot-starter/artifactId version2.2.2/version /dependency dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId scoperuntime/scope /dependency /dependencies2.2 项目结构规范推荐的标准项目结构src/ ├── main/ │ ├── java/ │ │ └── com/ │ │ └── demo/ │ │ ├── config/ # 配置类 │ │ ├── controller/ # 控制器 │ │ ├── entity/ # 实体类 │ │ ├── mapper/ # MyBatis接口 │ │ └── service/ # 业务层 │ └── resources/ │ ├── static/ # 静态资源 │ ├── templates/ # 模板文件 │ ├── application.yml # 主配置文件 │ └── mapper/ # XML映射文件 └── test/ # 测试代码2.3 数据库连接配置application.yml的典型配置spring: datasource: url: jdbc:mysql://localhost:3306/demo_db?useSSLfalseserverTimezoneUTC username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver mybatis: mapper-locations: classpath:mapper/*.xml configuration: map-underscore-to-camel-case: true # 自动驼峰转换注意生产环境务必使用加密方式存储密码推荐使用Jasypt等工具加密。3. MyBatis集成与高级配置3.1 实体类与Mapper接口开发使用Lombok简化实体类Data Table(name user) public class User { Id GeneratedValue(strategy GenerationType.IDENTITY) private Long id; private String username; private String email; // getters/setters由Lombok自动生成 }Mapper接口示例Mapper public interface UserMapper { Select(SELECT * FROM user WHERE id #{id}) User selectById(Long id); Insert(INSERT INTO user(username,email) VALUES(#{username},#{email})) Options(useGeneratedKeys true, keyProperty id) int insert(User user); }3.2 XML映射文件编写在resources/mapper/UserMapper.xml中?xml version1.0 encodingUTF-8? !DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd mapper namespacecom.demo.mapper.UserMapper resultMap idBaseResultMap typecom.demo.entity.User id columnid propertyid/ result columnusername propertyusername/ /resultMap select idselectByCondition resultMapBaseResultMap SELECT * FROM user where if testusername ! null AND username LIKE CONCAT(%,#{username},%) /if /where /select /mapper3.3 事务管理与分页实现Spring Boot中启用事务Service Transactional public class UserService { Autowired private UserMapper userMapper; public void createUser(User user) { userMapper.insert(user); // 其他数据库操作... } }整合PageHelper分页Configuration public class MyBatisConfig { Bean public PageInterceptor pageInterceptor() { return new PageInterceptor(); } } // 使用示例 public PageInfoUser getUsers(int pageNum, int pageSize) { PageHelper.startPage(pageNum, pageSize); ListUser users userMapper.selectAll(); return new PageInfo(users); }4. 常见问题排查与性能优化4.1 典型错误解决方案问题1Mapper接口无法注入检查点主类是否有MapperScan(com.demo.mapper)Mapper接口是否有Mapper注解XML文件路径是否匹配mapper-locations配置问题2数据库连接超时spring: datasource: hikari: connection-timeout: 30000 maximum-pool-size: 104.2 SQL性能优化建议启用MyBatis二级缓存慎用mybatis: configuration: cache-enabled: true使用批处理操作Insert(script INSERT INTO user(username,email) VALUES foreach collectionlist itemitem separator, (#{item.username},#{item.email}) /foreach /script) void batchInsert(ListUser users);4.3 日志配置技巧application.yml中添加logging: level: com.demo.mapper: DEBUG # 输出SQL日志 org.springframework.jdbc.datasource: INFO在开发阶段可以开启MyBatis的SQL格式化mybatis: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl log-prefix: \n SQL \n5. 项目扩展与进阶实践5.1 多数据源配置对于需要连接多个数据库的场景Configuration MapperScan(basePackages com.demo.mapper.db1, sqlSessionFactoryRef db1SqlSessionFactory) public class Db1DataSourceConfig { Bean ConfigurationProperties(spring.datasource.db1) public DataSource db1DataSource() { return DataSourceBuilder.create().build(); } Bean public SqlSessionFactory db1SqlSessionFactory(Qualifier(db1DataSource) DataSource dataSource) throws Exception { SqlSessionFactoryBean bean new SqlSessionFactoryBean(); bean.setDataSource(dataSource); bean.setMapperLocations(new PathMatchingResourcePatternResolver() .getResources(classpath:mapper/db1/*.xml)); return bean.getObject(); } }5.2 MyBatis-Plus整合相比原生MyBatisMyBatis-Plus提供了更多便利功能修改pom.xmldependency groupIdcom.baomidou/groupId artifactIdmybatis-plus-boot-starter/artifactId version3.5.3.1/version /dependency实体类注解增强Data TableName(user) public class User { TableId(type IdType.AUTO) private Long id; TableField(user_name) private String username; }通用Service实现public interface UserService extends IServiceUser {} Service public class UserServiceImpl extends ServiceImplUserMapper, User implements UserService {}5.3 单元测试策略Spring Boot测试示例SpringBootTest Transactional Rollback class UserMapperTest { Autowired private UserMapper userMapper; Test void testInsert() { User user new User(); user.setUsername(test); assertEquals(1, userMapper.insert(user)); assertNotNull(user.getId()); } }对于复杂SQL的测试可以使用H2内存数据库spring: datasource: url: jdbc:h2:mem:testdb driver-class-name: org.h2.Driver username: sa password: sql.init.mode: always # 启动时执行schema.sql6. 部署与监控方案6.1 打包与运行使用Maven打包可执行JARmvn clean package -DskipTests生产环境启动建议nohup java -Xms512m -Xmx1024m -jar demo.jar \ --spring.profiles.activeprod app.log 21 6.2 Actuator健康监控添加依赖dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-actuator/artifactId /dependency配置开放端点management: endpoints: web: exposure: include: health,info,metrics endpoint: health: show-details: always6.3 数据库连接池监控结合Druid实现Configuration public class DruidConfig { Bean public ServletRegistrationBeanStatViewServlet druidServlet() { ServletRegistrationBeanStatViewServlet bean new ServletRegistrationBean(new StatViewServlet(), /druid/*); bean.addInitParameter(loginUsername, admin); bean.addInitParameter(loginPassword, 123456); return bean; } }在开发过程中我特别推荐使用IDEA的Database工具直接连接数据库配合MyBatisX插件可以实现快速跳转接口与XMLSQL语句自动补全结果集直接转实体类可视化执行计划分析对于团队协作项目建议统一代码风格EditorConfig Git提交规范这些都可以在IDEA中通过插件实现自动化检查。