Mybatis-plus中自定义的sql语句调用QueryWrapper实现查询及分页IPage使用

Mybatis-plus中自定义的sql语句调用QueryWrapper实现查询及分页IPage使用一 引言 MP 自带的条件构造器虽然很强大 有时候也避免不了写稍微复杂一点业务的 sql 那

一、引言

MP自带的条件构造器虽然很强大,有时候也避免不了写稍微复杂一点业务的sql,那么那么今天说说MP怎么自定义sql语句吧。另外,除了下文提到的通过queryWrapper实现筛选以外,调用查询时,如果你需要做分页,通过mybatisPlus提供的分页接口IPage,能够避免自己手写分页的sql语句,这么好用的东西,你还不入坑吗?详情点击:Mybatis-plus多表关联查询,多表分页查询

二、配置

自定义的sql当然是写在XML文件中的啦,那么首先来定义xml文件的位置,在yml配置文件如下

mybatis-plus: # 如果是放在src/main/java目录下  classpath:/com/*/*/mapper/*Mapper.xml # 如果是放在resource目录  classpath:/mapper/.xml mapper-locations: classpath:/mapper/.xml 

三、具体实现

使用注解实现:

在我们Mapper接口中定义自定义方法即可。

/ * @Date: 2019/6/10 14:40 * @Description: User对象持久层 */ public interface UserMapper extends BaseMapper<User> { 
    / * 如果自定义的方法还希望能够使用MP提供的Wrapper条件构造器,则需要如下写法 * @param userWrapper */ @Select("SELECT * FROM user ${ew.customSqlSegment}") List<User> selectByMyWrapper(@Param(Constants.WRAPPER)Wrapper<User> userWrapper); / * 和Mybatis使用方法一致 * @param name * @return */ @Select("SELECT * FROM user where name = #{name}") List<User> selectByName(@Param("name") String name); } 

使用xml文件实现:

使用xml一定要指定xml文件所在位置

/ * @Date: 2019/6/10 14:40 * @Description: User对象持久层 */ public interface UserMapper extends BaseMapper<User> { 
    / * * 如果自定义的方法还希望能够使用MP提供的Wrapper条件构造器,则需要如下写法 * * @param userWrapper * @return */ List<User> selectByMyWrapper(@Param(Constants.WRAPPER) Wrapper<User> userWrapper); / * 和Mybatis使用方法一致 * @param name * @return */ List<User> selectByName(@Param("name") String name); } 
<?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.demo.mapper.UserMapper"> <select id="selectByName" resultType="com.example.demo.model.User"> SELECT * FROM user where name = #{ 
   name} </select> <select id="selectByMyWrapper" resultType="com.example.demo.model.User"> SELECT * FROM user ${ 
   ew.customSqlSegment} </select> </mapper> 

测试测试:

 / * 自定义sql查询语句 */ @Test public void selectByMySelect() { 
    List<User> users = userMapper.selectByName("王天风"); users.forEach(System.out::println); } / * 自定义sql使用Wrapper */ @Test public void selectByMyWrapper() { 
    QueryWrapper<User> wrapper = new QueryWrapper(); wrapper.like("name", "雨").lt("age", 40); List<User> users = userMapper.selectByMyWrapper(wrapper); users.forEach(System.out::println); } 

四、回答评论区提问

提问一:能否提供自定义Update语句与Wrapper的整合使用呢?

/ * 

* 用户 Mapper 接口 *

* * @since 2019-06-14 */
public interface UserMapper extends BaseMapper<User> { / * 自定Wrapper修改 * * @param userWrapper 条件构造器 * @param user 修改的对象参数 * @return */ int updateByMyWrapper(@Param(Constants.WRAPPER) Wrapper<User> userWrapper, @Param("user") User user); }
<?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.demo.mapper.UserMapper"> <update id="updateByMyWrapper"> UPDATE user SET email = #{ 
   user.email} ${ 
   ew.customSqlSegment} </update> </mapper> 
 @Test public void updateByMyWrapper() { 
    // 条件构造器 QueryWrapper<User> wrapper = new QueryWrapper(); wrapper.eq("name", "admin"); // 修改后的对象 User user = new User(); user.setEmail(""); userMapper.updateByMyWrapper(wrapper, user); } 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/202535.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午11:54
下一篇 2026年3月19日 下午11:55


相关推荐

  • 《算法导论》 — Chapter 7 高速排序[通俗易懂]

    《算法导论》 — Chapter 7 高速排序

    2022年1月21日
    47
  • pycharm 安装Jupyter Notebook

    pycharm 安装Jupyter NotebookJupyterNoteb 此前被称为 IPythonnoteb 是一个交互式笔记本 支持运行 40 多种编程语言 在本文中 我们将介绍 Jupyternoteb 的主要特性 以及为什么对于希望编写漂亮的交互式文档的人来说是一个强大工具 在开始使用 notebook 之前 我们先需要安装该库 你可以在 nbsp Jupyter 官网上找到完整的步骤 译者注 其实只要 pipi

    2026年3月27日
    1
  • Java AbstractMethodError 原因分析

    Java AbstractMethodError 原因分析背景AbstractMethodError异常对于我来说还是比较不常遇见的,最近有幸遇到,并侥幸的解决了,在这里把此种场景剖析一番,进入正题,下面是AbstractMethodError在Java的异常机制中所处的位置:现在明确了AbstractMethodError所具有的特性:1.它是Error的子类,Error类及其子类都是被划分在非检查异常之列的,就是说这些异常不能在编译阶…

    2022年6月2日
    38
  • Dos攻击原理_防止xss攻击方法

    Dos攻击原理_防止xss攻击方法Technorati标签: DoS,攻击,网络防御,TCP,SYN_FloodTCP/IP协议的权限DoS(拒绝服务攻击)—–DenialofService该攻击的原理是利用TCP报文头来做的文章.下面是TCP数据段头格式。SourcePort和DestinationPort:是本地端口和目标端口SequenceNu

    2022年10月1日
    5
  • xml格式化 java_Java XML格式化程序

    xml格式化 java_Java XML格式化程序xml格式化javaeXtensiveMarkupLanguage(XML)isoneofthepopularmediumformessagingandcommunicationbetweendifferentapplications.SinceXMLisopensourceandprovidescontroloverdataformatv…

    2022年7月16日
    19
  • form表单如何提交数据(表单中提交请求默认方式)

    Form表单提交数据的几种方式一、submit提交在form标签中添加Action(提交的地址)和method(post),且有一个submit按钮()就可以进行数据的提交,每一个input标签都需要有一个name属性,才能进行提交。当点击登陆时,向数据库发生的数据是:username=username&password=password.

    2022年4月12日
    82

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号