mybatis-plus @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 💢💢💢


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM