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

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

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

方法核心思路适用场景与说明
SqlRunner使用MyBatis Plus提供的工具类,无需Mapper。快速简单,适用于临时执行SQL,无需编写Mapper接口或XML。需在配置中启用。
@Select注解将SQL语句直接写在Mapper接口的方法上。推荐用于固定SQL,代码简洁。SQL较长时可能影响可读性。
XML映射文件将SQL语句写在XML文件中,通过Mapper接口调用。推荐用于复杂SQL或动态SQL,利于维护和管理较长、较复杂的SQL。
自定义Mapper方法在Mapper接口中定义方法,使用**${nativeSql}**接收SQL字符串。💡 高度灵活,但存在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 {@Autowiredprivate 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-mapper.dtd">
    <mapper namespace="com.yourpackage.mapper.WindTurbineMapper"><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<Map<String, Object>>,需要通过Map的键(即查询中的别名,如"标段名称")来获取值。
  • SQL注入:使用SqlRunner@Select注解时,请确保SQL语句是固定可控的,不要直接拼接用户输入,以防SQL注入攻击。如果SQL条件需要动态变化,请考虑使用MyBatis Plus的条件构造器配合XML,或者使用MyBatis的动态SQL功能。
  • 配置扫描:确保MyBatis Plus配置正确扫描到了Mapper接口和XML文件。如果XML文件不在默认位置,可能需要在配置文件中指定mybatis-plus.mapper-locations
http://www.dtcms.com/a/602769.html

相关文章:

  • 网站开发干啥的苏州工业园区外国语学校
  • 德胜门网站建设网站开通支付宝接口
  • phonegap wordpress嘉兴市做网站优化
  • 网站在线开发极简个人网站模板
  • 做网站联盟hmm船公司网站
  • Python是编译语言吗 | 深入分析Python的解释执行方式与编译模式
  • Linux 中断处理机制详解:上下半部、内核线程与中断线程化
  • PCB之电源完整性之电源网络的PDN仿真CST---09
  • 专业营销的网站建设公司排名网站建设的经验总结
  • 【动态规划】二维的背包问题、似包非包、卡特兰数
  • 接口管理工具PostIn,从安装到入门零基础教程
  • 批量删除广告文件删除指定文件小工具
  • 格式工厂5.20怎么安装?FormatFactory_v5_20.exe安装步骤详解(附安装包)
  • 青岛专业网站建设哪家好江苏省现代化实训基地建设网站
  • 网站建设企业云市场注册公司要多少资金起步
  • 基因组学是生命科学的基础
  • 易语言模块反编译工具|帮助开发者高效分析和优化易语言程序
  • watch监视特定属性
  • 43. LINUX网络编程(1)
  • LLMops与MLOps
  • 织梦本地安装网站wordpress 迁移 ip
  • 网站建设 目标网站怎么做落款
  • 贵阳做网站kuhugz网站结构图怎么做
  • 攻击链重构的具体实现思路和分析报告
  • 免费软件下载网站app交易网站建设具体方案
  • 怎么做非法彩票网站西安搜建站科技网站
  • 怎样做农产品交易平台网站asp网站开发环境
  • 从混沌中见你所见——文生图的逆向浪漫
  • 啊里云服务器怎么做网站建筑设计师要学什么专业
  • 11月12日numpy学习总结——numpy的广播规则