MyBatis Plus中执行原生SQL语句方法常见方案

2025-11-14 06:50

本文主要是介绍MyBatis Plus中执行原生SQL语句方法常见方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《MyBatisPlus中执行原生SQL语句方法常见方案》MyBatisPlus提供了多种执行原生SQL语句的方法,包括使用SqlRunner工具类、@Select注解和XML映射文件,每种方法都有...

在MyBATis Plus中执行原生SQL语句,可以根据项目配置、个人偏好以及SQL的复杂程度选择不同的方法。下面的表格对比了几种常见方案:

方法核心思路适用China编程场景与说明
SqlRunner使用MyBatis Plus提供的工具类,无需Mapper。快速简单,适用于临时执行SQL,无需编写Mapper接口或XML。需在配置中启用。
@Select注解将SQL语句直接写在Mapper接口的方法上。推荐用于固定SQL,代码简洁。SQL较长时可能影响可读性。
XML映射文件将SQL语句写在XML文件中,通过Mapper接口调用。推荐用于复杂SQL动态SQL,利于维护和管理较长、较复杂的SQL。
自定义Mapper方法在Mapper接口中定义方法,使用**${nativeSql}**接收SQ编程L字符串。 高度灵活,但存在SQL注入风险,除非必要,一般不推荐使用。

如何使用这些方法

下面详细说明前三种推荐方法的具体使用步骤。

1. 使用 SqlRunner 工具类

如果只是想快速执行一个SQL,不希望定义额外的Mapper接口和XML文件,SqlRunner是一个很方便的选择。

第一步:启用SqlRunner
application.yml配置文件中开启SqlRunner

mybatis-plus:
  global-config:
    enable-sql-runner: true

如果使用的是application.properties,则添加:

mybatis-plus.global-config.enable-sql-runner=true

第二步:编写Java代码
在Service或Controller中直接调用:

import com.baomidou.mybatisplus.extension.toolkit.SqlRunner;
import java.util.List;
import java.util.Map;
public class YourService {
    public void executeSQL() {
        String sql = "SELECT section_name AS 标段名称, company_name AS 公司名称, equipment_quote AS 设备报价 FROM wind_turbine_project_quote_detail";
        // 执行查询,返回一个Map列表,每个Map对应一行数据
        List<Map<String, Object>> resultList = SqlRunner.db().selectList(sql);
        // 遍历结果
        for (Map<String, Object> row : resultList) {
            System.out.println("标段名称: " + row.get("标段名称"));
            System.out.println("公司名称: " + row.get("公司名称"));
            System.out.println("设备报价: " + row.get("设备报价"));
        }
    }
}

2. 使用 @Select 注解

对于固定的SQL,这是一种非常简洁的方式。

在Mapper接口中定义方法
在Mapper接口(例如WindTurbineMapper)中,使用@Select注解:

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
import java.util.Map;
@Mapper
public interface WindTurbineMapper {
    @Select("SELECT section_name AS \"标段名称\", company_name AS \"公司名称\", equipment_quote AS \"设备报价\" FROM wind_turbine_project_quote_detail")
    List<Map<String, Object>> selectQuoteDetail();
}

注意:如果别名是中文,建议使用转义的双引号\"括起来。

在Service中调用

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
@Service
public class WindTurbineService {
    @Autowired
    private WindTurbineMapper windTurbineMapper;
    public void getQuoteDetail() {
        List<Map<String, Object>> resultList = windTurbineMapper.selectQuoteDetail();
        // ... 处理结果
    }
}

3. 使用 XML 映射文件

这是管理复杂SQL的传统且强大的方式。

第一步:创建Mapper接口

import org.apache.ibatis.annotations.Mapper;
import java.util.List;
import java.util.Map;
@Mapper
public interface WindTurbineMapper {
    List<Map<String, Object>> selectQuoteDetail();
}

第二步:创建XML映射文件
resources/mapper目录(如果没有请手动创建)下,创建一个对应的XML文件,例如WindTurbineMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-maChina编程pper.dtd">
<mapper namespace="com.yourpackage.mapper.WindTurbineMappjser">
    <select id="selectQuoteDetail" resultType="java.util.Map">
        SELECT 
            section_name AS "标段名称",
            company_name AS "公司名称", 
            equipment_quote AS "设备报价"
        FROM wind_turbine_project_quote_detail
    </select>
</mapper>

注意namespace必须填写Mapper接口的全限定名(包括包名),id是接口中的方法名。

第三步:在Service中调用
调用方式与使用@Select注解的例子完全相同。

⚠️ 注意事项

  • 结果处理:以上方法返回的都是List<php;Map<String, Object>>,需要通过Map的键(即查询中的别名,如"标段名称")来获取值。
  • SQL注入:使用SqlRunner@Select注解时,请确保SQL语句是固定可控的,不要直接拼接用户输入,以防SQL注入攻击。如果SQL条件需要动态变化,请考虑使用MyBatis Plus的条件构造器配合XML,或者使用MyBatis的动态SQL功能。
  • 配置扫描:确保MyBatis Plus配置正确扫描到了Mapper接口和XML文件。如果XML文件不在默认位置,可能需要在配置文件中指定mybatis-plus.mapper-locations

到此这篇关于MyBatis Plus中执行原生SQL语句方法的文章就介绍到这了,更多相关MyBatis Plus执行原生SQL内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于MyBatis Plus中执行原生SQL语句方法常见方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1156161

相关文章

检查 Nginx 是否启动的几种方法

《检查Nginx是否启动的几种方法》本文主要介绍了检查Nginx是否启动的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1. 使用 systemctl 命令(推荐)2. 使用 service 命令3. 检查进程是否存在4

Java方法重载与重写之同名方法的双面魔法(最新整理)

《Java方法重载与重写之同名方法的双面魔法(最新整理)》文章介绍了Java中的方法重载Overloading和方法重写Overriding的区别联系,方法重载是指在同一个类中,允许存在多个方法名相同... 目录Java方法重载与重写:同名方法的双面魔法方法重载(Overloading):同门师兄弟的不同绝

MySQL字符串转数值的方法全解析

《MySQL字符串转数值的方法全解析》在MySQL开发中,字符串与数值的转换是高频操作,本文从隐式转换原理、显式转换方法、典型场景案例、风险防控四个维度系统梳理,助您精准掌握这一核心技能,需要的朋友可... 目录一、隐式转换:自动但需警惕的&ld编程quo;双刃剑”二、显式转换:三大核心方法详解三、典型场景

MySQL中between and的基本用法、范围查询示例详解

《MySQL中betweenand的基本用法、范围查询示例详解》BETWEENAND操作符在MySQL中用于选择在两个值之间的数据,包括边界值,它支持数值和日期类型,示例展示了如何使用BETWEEN... 目录一、between and语法二、使用示例2.1、betwphpeen and数值查询2.2、be

MySQL快速复制一张表的四种核心方法(包括表结构和数据)

《MySQL快速复制一张表的四种核心方法(包括表结构和数据)》本文详细介绍了四种复制MySQL表(结构+数据)的方法,并对每种方法进行了对比分析,适用于不同场景和数据量的复制需求,特别是针对超大表(1... 目录一、mysql 复制表(结构+数据)的 4 种核心方法(面试结构化回答)方法 1:CREATE

详解C++ 存储二进制数据容器的几种方法

《详解C++存储二进制数据容器的几种方法》本文主要介绍了详解C++存储二进制数据容器,包括std::vector、std::array、std::string、std::bitset和std::ve... 目录1.std::vector<uint8_t>(最常用)特点:适用场景:示例:2.std::arra

springboot中配置logback-spring.xml的方法

《springboot中配置logback-spring.xml的方法》文章介绍了如何在SpringBoot项目中配置logback-spring.xml文件来进行日志管理,包括如何定义日志输出方式、... 目录一、在src/main/resources目录下,也就是在classpath路径下创建logba

SQL Server中行转列方法详细讲解

《SQLServer中行转列方法详细讲解》SQL行转列、列转行可以帮助我们更方便地处理数据,生成需要的报表和结果集,:本文主要介绍SQLServer中行转列方法的相关资料,需要的朋友可以参考下... 目录前言一、为什么需要行转列二、行转列的基本概念三、使用PIVOT运算符进行行转列1.创建示例数据表并插入数

MyBatis配置文件中最常用的设置

《MyBatis配置文件中最常用的设置》文章主要介绍了MyBatis配置的优化方法,包括引用外部的properties配置文件、配置外置以实现环境解耦、配置文件中最常用的6个核心设置以及三种常用的Ma... 目录MyBATis配置优化mybatis的配置中引用外部的propertis配置文件⚠️ 注意事项X

MyBatis中的两种参数传递类型详解(示例代码)

《MyBatis中的两种参数传递类型详解(示例代码)》文章介绍了MyBatis中传递多个参数的两种方式,使用Map和使用@Param注解或封装POJO,Map方式适用于动态、不固定的参数,但可读性和安... 目录✅ android方式一:使用Map<String, Object>✅ 方式二:使用@Param