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

mybatisplus 通过xml 定义接口

在 MyBatis-Plus 中,虽然它极大地简化了 CRUD 操作,提供了许多注解方式(如 @Select@Insert@Update@Delete)来直接在 Mapper 接口上定义 SQL 语句,但 MyBatis-Plus 仍然支持传统的 MyBatis 风格的 XML 配置方式来定义 SQL 语句。这种方式提供了更大的灵活性和复杂 SQL 的处理能力。

1. 创建 Mapper 接口

首先,你需要创建一个 Mapper 接口,这个接口会包含你需要执行的数据库操作方法。比如,你有一个 UserMapper 接口来操作用户表。

package com.example.mapper;  import com.baomidou.mybatisplus.core.mapper.BaseMapper;  
import com.example.entity.User;  
import org.apache.ibatis.annotations.Mapper;  @Mapper  
public interface UserMapper {  // 这里可以定义你自己的方法,然后通过 XML 映射 SQL  User selectUserById(Long id);  
}

2. 创建 XML 映射文件

然后,你需要为上述的 Mapper 接口创建一个 XML 映射文件。这个文件通常与 Mapper 接口在同一个包路径下,但位于 resources 目录下的 mapper 文件夹中(这个文件夹的路径可以根据你的项目配置来调整)。

例如,如果你的 Mapper 接口在 com.example.mapper 包下,那么 XML 文件可能位于 src/main/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">  <!-- 根据ID查询用户 -->  <select id="selectUserById" resultType="com.example.entity.User">  SELECT * FROM user WHERE id = #{id}  </select>  </mapper>

3. 配置 MyBatis-Plus

确保你的 MyBatis-Plus 配置已经正确设置了 mapper 文件的路径。如果你使用的是 Spring Boot 集成 MyBatis-Plus,那么通常这个配置会在 application.properties 或 application.yml 文件中自动配置好,因为 Spring Boot 会根据约定大于配置的原则来寻找 mapper 接口和 XML 文件。

但是,如果你需要手动配置,确保 MyBatis 的配置文件(如 mybatis-config.xml)中包含了 mapper 文件的路径,或者你的 Spring Boot 应用通过 @MapperScan 注解指定了 mapper 接口的扫描路径。

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

4. 使用 Mapper

一旦 Mapper 接口和 XML 文件配置完成,你就可以在你的服务层或控制器中注入 UserMapper 并调用其方法来执行数据库操作了。

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

这就是在 MyBatis-Plus 中通过 XML 文件定义 Mapper 接口的 SQL 语句的基本步骤。这种方式让你能够编写复杂的 SQL 语句,同时享受 MyBatis-Plus 提供的强大功能。

如果报错 Invalid bound statement (not found)  请参考

https://www.cnblogs.com/zhoushiya/p/12797240.html

相关文章:

  • 2024河南萌新联赛第五场 C小美想收集(并查集拓展域,2-sat)
  • 前端 uniapp 多端条件编译
  • polarctf靶场【四方密码题】【CRYPTO】不一样的四四方方、四个正方形
  • 海绵城市雨水监测系统简介
  • 2024年好用的4款电脑录屏工具清单。
  • 自制项目镜像并拉取
  • centos7突然掉电后启动报错/dev/mapper/centos-root does not exist
  • 利用MongoDB进行数据治理,防范构建生成式AI应用程序时的潜在安全风险
  • PAM软连接提权
  • 从菜鸟到高手:掌握Python推导式,让代码飞起来,列表、集合、字典,一网打尽,用Python推导式优雅地重构你的数据操作
  • STM32之继电器与震动传感器的使用,实现震动灯
  • Docker的安装与镜像配置
  • Oracle开始严查Java许可!
  • flink+flinkcdc+同步(MYSQL到MYSQL)实践
  • git restore对工作区及暂存区文件的影响
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • CentOS 7 防火墙操作
  • CSS相对定位
  • download使用浅析
  • ECS应用管理最佳实践
  • Linux Process Manage
  • MySQL QA
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • React-flux杂记
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • Spring声明式事务管理之一:五大属性分析
  • vue--为什么data属性必须是一个函数
  • 半理解系列--Promise的进化史
  • 电商搜索引擎的架构设计和性能优化
  • 力扣(LeetCode)965
  • 码农张的Bug人生 - 初来乍到
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 数组的操作
  • 延迟脚本的方式
  • 一些关于Rust在2019年的思考
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • ​​​​​​​开发面试“八股文”:助力还是阻力?
  • "无招胜有招"nbsp;史上最全的互…
  • # centos7下FFmpeg环境部署记录
  • #java学习笔记(面向对象)----(未完结)
  • #职场发展#其他
  • $LayoutParams cannot be cast to android.widget.RelativeLayout$LayoutParams
  • (2024最新)CentOS 7上在线安装MySQL 5.7|喂饭级教程
  • (Java企业 / 公司项目)点赞业务系统设计-批量查询点赞状态(二)
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (windows2012共享文件夹和防火墙设置
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (论文阅读40-45)图像描述1
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)