当前位置: 首页 > news >正文

数据访问:MyBatisMybatis-Plus

Spring Boot集成MyBatis

Spring Boot集成MyBatis的步骤

添加依赖pom.xml文件中添加MyBatis和数据库驱动依赖。以MySQL为例:

<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.0</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency>

配置数据源application.propertiesapplication.yml中配置数据库连接信息:

spring.datasource.url=jdbc:mysql://localhost:3306/your_database spring.datasource.username=your_username spring.datasource.password=your_password spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

创建实体类定义与数据库表对应的实体类:

public class User { private Long id; private String name; private Integer age; // getters and setters }

创建Mapper接口使用注解或XML方式编写Mapper接口。注解方式示例:

@Mapper public interface UserMapper { @Select("SELECT * FROM user WHERE id = #{id}") User findById(Long id); @Insert("INSERT INTO user(name, age) VALUES(#{name}, #{age})") int insert(User user); }

启用Mapper扫描在启动类上添加@MapperScan注解扫描Mapper接口:

@SpringBootApplication @MapperScan("com.example.mapper") public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }

XML配置方式(可选)如果需要使用XML配置SQL,在application.properties中指定XML路径:

mybatis.mapper-locations=classpath:mapper/*.xml

测试使用在Service或Controller中注入Mapper进行测试:

@RestController public class UserController { @Autowired private UserMapper userMapper; @GetMapping("/user/{id}") public User getUser(@PathVariable Long id) { return userMapper.findById(id); } }

常见问题解决

TypeHandler配置如需自定义类型处理器,可通过以下配置:

mybatis.type-handlers-package=com.example.handler

驼峰命名转换启用数据库字段到实体类的自动驼峰转换:

mybatis.configuration.map-underscore-to-camel-case=true

多数据源配置需额外配置多个DataSource和SqlSessionFactory,并使用@Qualifier区分不同Bean。

MyBatis-Spring-Boot-Starter 简介

MyBatis-Spring-Boot-Starter 是 MyBatis 官方为 Spring Boot 提供的快速集成依赖,简化了 MyBatis 与 Spring Boot 的配置和整合过程。通过自动配置和默认约定,开发者可以快速实现数据库操作。

核心功能

  • 自动配置:自动配置SqlSessionFactorySqlSessionTemplate,无需手动编写 XML 配置。
  • Mapper 扫描:支持自动扫描 Mapper 接口并注册为 Spring Bean。
  • 事务管理:与 Spring 事务管理无缝集成,支持@Transactional注解。

依赖配置

pom.xml中添加以下依赖(以 Maven 为例):

<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>3.0.3</version> <!-- 使用最新版本 --> </dependency>

需配合数据库驱动(如 MySQL):

<dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <scope>runtime</scope> </dependency>

基础配置

application.propertiesapplication.yml中配置数据源和 MyBatis 属性:

# 数据源配置 spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # MyBatis 配置 mybatis.mapper-locations=classpath:mapper/*.xml # XML 映射文件路径 mybatis.type-aliases-package=com.example.model # 实体类别名包

使用示例

  1. 定义 Mapper 接口
    使用@Mapper注解标记接口:

    @Mapper public interface UserMapper { @Select("SELECT * FROM user WHERE id = #{id}") User findById(Long id); }
  2. 实体类定义

    public class User { private Long id; private String name; // Getter/Setter 省略 }
  3. Service 层调用

    @Service public class UserService { @Autowired private UserMapper userMapper; public User getUserById(Long id) { return userMapper.findById(id); } }

高级配置

  • XML 映射文件
    若使用 XML 编写 SQL,需在resources/mapper目录下创建文件(如UserMapper.xml):

    <?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.mapper.UserMapper"> <select id="findById" resultType="User"> SELECT * FROM user WHERE id = #{id} </select> </mapper>
  • 多数据源支持
    需手动配置多个SqlSessionFactoryDataSource,并通过@Qualifier指定 Bean。

常见问题

  • Mapper 扫描失败
    确保启动类添加@MapperScan("com.example.mapper")或 Mapper 接口标注@Mapper
  • 事务不生效
    检查是否启用事务管理(默认已启用)并在方法上添加@Transactional

版本兼容性

  • Spring Boot 3.x:需使用 MyBatis-Spring-Boot-Starter 3.x。
  • Spring Boot 2.x:兼容 Starter 2.x 版本。

通过上述配置和示例,可以快速完成 MyBatis 在 Spring Boot 中的集成与开发。

SpringBoot集成MyBatis-Plus

MyBatis-Plus概述

MyBatis-Plus(简称MP)是一款基于MyBatis的增强工具,旨在简化开发、提高效率。它在不改变MyBatis原有功能的基础上,提供了通用的CRUD操作、条件构造器、分页插件等特性,显著减少手动编写SQL的工作量。

核心特性

内置通用CRUD
通过继承BaseMapper接口,可直接实现单表的增删改查操作,无需编写XML或注解SQL。例如:

userMapper.insert(user); // 插入 userMapper.selectById(1); // 查询

条件构造器
提供QueryWrapperUpdateWrapper等工具,支持链式调用构建复杂查询条件:

QueryWrapper<User> wrapper = new QueryWrapper<>(); wrapper.lambda().eq(User::getName, "Alice").gt(User::getAge, 20); userMapper.selectList(wrapper);

分页插件
通过PaginationInterceptor实现物理分页,与条件构造器无缝集成:

Page<User> page = new Page<>(1, 10); // 当前页, 每页数量 userMapper.selectPage(page, wrapper);

代码生成器
支持通过模板引擎自动生成Entity、Mapper、Service等代码,快速搭建项目基础结构。

优势与适用场景

  • 减少样板代码:自动生成SQL,降低手写错误风险。
  • 与MyBatis兼容:原有MyBatis功能可正常使用,无侵入性。
  • 适合快速开发:尤其适用于后台管理系统、标准化业务模块开发。

扩展功能

  • 乐观锁:通过@Version注解实现并发控制。
  • 逻辑删除:配置@TableLogic注解标记软删除字段。
  • 动态表名:支持运行时动态解析表名,适用于分表场景。

MyBatis-Plus通过简化持久层操作,显著提升开发效率,是MyBatis生态中的高效补充工具。

Lombok概述

Lombok是一个Java库,通过注解方式简化代码编写,自动生成getter/setter、构造方法、日志变量等样板代码,减少冗余代码量,提升开发效率。

核心功能

@Getter/@Setter
自动生成字段的getter和setter方法,支持类级别或字段级别使用。

@ToString
生成包含所有字段的toString()方法,可通过exclude参数排除特定字段。

@EqualsAndHashCode
自动实现equals()hashCode()方法,基于字段值比较。

@NoArgsConstructor/@AllArgsConstructor
生成无参构造方法和全参构造方法。

@Data
组合注解,包含@Getter@Setter@ToString@EqualsAndHashCode@RequiredArgsConstructor的功能。

@Slf4j/@Log4j
自动为类注入日志对象(如log),支持多种日志框架。

使用示例

@Data @AllArgsConstructor @NoArgsConstructor public class User { private String name; private int age; } // 自动生成getter/setter、toString、equals/hashCode及构造方法 User user = new User("Alice", 30); System.out.println(user.getName());

集成方式

  1. Maven依赖
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.24</version> <scope>provided</scope> </dependency>
  1. IDE插件
    安装Lombok插件(如IntelliJ IDEA需通过插件市场安装),确保注解生效。

注意事项

  • 编译时依赖:Lombok在编译阶段生成代码,无需运行时依赖。
  • 反射问题:部分框架(如Hibernate)可能依赖getter/setter,需确认兼容性。
  • 代码可读性:过度使用可能降低代码显式逻辑的清晰度。
http://www.jsqmd.com/news/100216/

相关文章:

  • 中小企业的营销“暖心伙伴”——北京易美之尚,让增长不再难
  • openFuyao AI推理加速方案深度解析
  • 2025年安徽靠谱交通事故律师事务所排行榜,口碑好的交通事故 - mypinpai
  • 钢铁厂除氧供气 / 炉门驱动用工业级螺杆空压机​选型注意
  • PaddlePaddle模型服务化部署:配合HTML界面实现可视化推理
  • 如何提升银包铜的抗氧化性?
  • 博客管理系统测试报告
  • HC32F460 DMA的链式传输(SPI从机+DMA发送/接收)
  • 毅硕HPC | NVIDIA DGX Spark 万字硬核评测:将AI超级工厂带上桌面
  • 大模型Agent强化学习完全指南:从PPO到GRPO的工具使用技术解析
  • 新国标电动车爬坡困境:当限速25km/h遭遇安全危机,无责伤亡谁来买单?
  • 腾讯云国际站代理商的定制化技术支持服务的成功案例有哪些?
  • VonaJS是如何做到文件级别精确HMR(热更新)的?
  • 41、FreeBSD 用户资源与常用命令指南
  • 一文搞懂AI大语言模型工作原理,初中生都能看懂
  • UVa 1396 Most Distant Point from the Sea
  • YT29B凿岩机吕梁精准检测稳定性能解析
  • RuoYi v1.2.0 全端开发神器:让多端适配从未如此简单!
  • 自定义重载运算符--《python语言程序设计》2018版--第8章20题使用Rational类求和数列之一
  • LobeChat能否申请基金?开源项目融资渠道
  • 爱舞功小程序+SaaS管理系统项目平台介绍说明书
  • VonaJS: Election
  • HunyuanVideo-Foley:高保真拟音生成扩散模型
  • 认知导向即面向服务——规避未来AI发展路径上的拟人化陷阱
  • 少儿编程Scratch3.0教程——03 外观积木(基础知识)
  • 电脑实用软件
  • 2025高温保护气氛箱式炉厂家TOP5权威推荐:超高温箱式炉 - 工业推荐榜
  • Docker与本地PaddleOCR环境配置指南
  • HLS的ready无法随机握手解决办法
  • 2025年天津十大保安服务联营合作企业推荐:知名的保安服务联 - myqiye