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
💢💢💢