MyBatis-Plus--自定义SQL

时间:2025-03-19 07:45:24

原文网址:MyBatis-Plus--自定义SQL_IT利刃出鞘的博客-****博客

简介

说明

本文用实例介绍MybatisPlus如何自定义SQL。

使用

自定义的sql使用Wrapper对版本有要求:mybatis-plus版本需要大于或等于3.0.7。

含义

条件构造器(Wrapper)

所设置的列

要select的列

特殊语句

操作 实例 说明
TRUNCATE @Update("TRUNCATE xxx") 不要用@Delete
ALTER @Update("ALTER xxx")
DELETE @Delete("DELETE xxx")

源码

包里边定义好的常量。我们可以直接用这些常量。

mybatis-plus-core-3.3.\com\baomidou\mybatisplus\core\toolkit\

package ;

public interface Constants extends StringPool {
    String MYBATIS_PLUS = "mybatis-plus";
    String MD5 = "MD5";
    String AES = "AES";
    String AES_CBC_CIPHER = "AES/CBC/PKCS5Padding";
    String ENTITY = "et";
    String ENTITY_DOT = "et.";
    String WRAPPER = "ew";
    String WRAPPER_DOT = "ew.";
    String WRAPPER_ENTITY = "";
    String WRAPPER_SQLSEGMENT = "";
    String WRAPPER_EMPTYOFNORMAL = "";
    String WRAPPER_NONEMPTYOFNORMAL = "";
    String WRAPPER_NONEMPTYOFENTITY = "";
    String WRAPPER_EMPTYOFWHERE = "";
    String WRAPPER_NONEMPTYOFWHERE = "";
    String WRAPPER_ENTITY_DOT = ".";
    String U_WRAPPER_SQL_SET = "";
    String Q_WRAPPER_SQL_SELECT = "";
    String Q_WRAPPER_SQL_COMMENT = "";
    String Q_WRAPPER_SQL_FIRST = "";
    String COLUMN_MAP = "cm";
    String COLUMN_MAP_IS_EMPTY = "";
    String COLLECTION = "coll";
    String WHERE = "WHERE";
    String MP_OPTLOCK_INTERCEPTOR = "oli";
    String MP_OPTLOCK_VERSION_ORIGINAL = "MP_OPTLOCK_VERSION_ORIGINAL";
    String MP_OPTLOCK_VERSION_COLUMN = "MP_OPTLOCK_VERSION_COLUMN";
    String MP_OPTLOCK_ET_ORIGINAL = "MP_OPTLOCK_ET_ORIGINAL";
    String WRAPPER_PARAM = "MPGENVAL";
    String WRAPPER_PARAM_FORMAT = "#{%.%s}";
}

分页

代码

Mapper

package ;

import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;

@Repository
public interface UserMapper extends BaseMapper<User> {
    
    // 自定义SQL的分页
    @Select("SELECT * FROM t_user ${}")
    IPage<User> findUser(IPage<User> page, @Param() Wrapper wrapper);
}

Controller

package ;

import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;

import ;

@Api(tags = "分页")
@RestController
@RequestMapping("page")
public class PageController {

    // 我为了简单直接注入mapper,项目中controller要通过service调mapper
    @Autowired
    private UserMapper userMapper;

    @ApiOperation("自定义SQL")
    @GetMapping("customSQL")
    public IPage<User> customSQLPage(Page<User> page) {
        LambdaQueryWrapper<User> wrapper = ();
        (User::getNickName, "昵称");

        // 这样写会报错:MybatisPlusException: can not use this method for "getCustomSqlSegment"
        // LambdaQueryChainWrapper<User> wrapper = ()
        //         .eq(User::getUserName, "sky");

        return (page, wrapper);
    }
}

测试

访问http://localhost:8080/page/customSQL

上边是文章的部分内容,为便于维护,全文已转移到此网址:MyBatis-Plus-自定义SQL - 自学精灵