zoukankan      html  css  js  c++  java
  • mybatisplus @TableField 与 @Select 合并使用的理解

    缘由

    昨晚撸码,要使用 MyISAM全文索引,mybatis-plus 目前没有该内容的写法,所以就只能自己写sql,奈何个人懒得写xml, 就使用@Select 注解进行了实现,然后问题出现了;

    问题

    Model内容

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    @TableName("test")
    public class TestModel {
       /**
         * 主键
         */
        @TableId(type = IdType.ASSIGN_UUID)
        private String id;
    
        /**
         * 名称
         */
        @TableField(value = "the_name")
        private String theUserName;
    }
    

    mapper 内容

    @Mapper
    public interface TestMapper extends BaseMapper<TestModel> {
    
       @Select("SELECT id,the_name FROM  test WHERE  MATCH(the_name ) AGAINST (CONCAT('*',#{tag},'*')  IN BOOLEAN MODE ) LIMIT 10 ;")
        List<TestModel> listByTag(@Param("tag") String tag);
    }
    

    使用 mybatis-plus 的list()方法查询,能够正确返回结果,而使用自己写的这个却不能返回正确结果,条数、{id}存在,而 theUserName 却是个null

    //mybatis-plus list() 方法结果
    [
      {"id":"aaadf3","theUserName":"hello"
    ] 
    //自写 listByTag 方法结果
    [
      {"id":"aaadf3","theUserName":null
    ]
    

    查找问题

    打印了这两个方法执行的sql

    -- mybatis-plus list() sql 
    SELECT id,the_name AS theUserName FROM test 
    --自写 listByTag sql
    SELECT id,the_name FROM test WHERE  MATCH(the_name ) AGAINST (CONCAT('*',?,'*')  IN BOOLEAN MODE ) LIMIT 10 ;
    

    再去看 @TableField 源码 value 属性 到底是干啥
    发现 在 SELECT的sql生成脚本中 是一个 AS 的存在,而自己写@Select 将不会对其做处理了。

    解决方法

    自己 写 AS

  • 相关阅读:
    个人介绍
    C++ 之 第四课 C++中的运算符、表达式
    Delphi 之 第六课 过程与函数
    Delphi 之 第五课 流程语句
    VB 之 第三课 VB API 字体函数的应用
    C++ 之 第三课 C++数据类型
    Delphi 之 第四讲 自定义数据类型
    Delphi 之 第三课 详解数据类型
    C++ 之 第二课 C++类、函数的讲解
    VB API 第二课 之 字符串大小写转换
  • 原文地址:https://www.cnblogs.com/akashicbrother/p/14484907.html
Copyright © 2011-2022 走看看