1、表某個字段不需要查詢返回時,可以使用以下屬性,默認為true
如果使用entity來接收返回結果,還是會以test=null返回,如果以Map來接收就不會返回
@TableField(select = false) private Integer test;
2、實體類某個變量並不對應表的字段時,可以使用以下屬性,默認為true
@TableField(exist = false) private Integer test;
3、指定表名,這樣實體類名字就不必一一對應表名
@TableName("mytest_stu") public class Stu implements Serializable {
4、MP默認實體類的id屬性對應表的主鍵,但是如果主鍵不叫id,且還想MP幫我們實現主鍵策略自動填充,那么只能使用注解,指定主鍵
@TableId() private String stuId;
5、也可以直接指定表的字段名
@TableField(value = "test") private Integer testNum;
6、實例化條件構造器時,是可以傳入實體entity的,默認會將entity的屬性轉為以“=”轉為條件
Stu test = new Stu(); test.setStuName("小明"); LambdaQueryWrapper<Stu> wrapperTest1 = new LambdaQueryWrapper<>(test); LambdaQueryWrapper<Stu> wrapperTest2 = Wrappers.lambdaQuery(test)
如上,在實例化條件構造器時,wrapperTest1和wrapperTest2等都會將條件轉為 (表字段)stu_name = '小明'
如果不想以 = 來拼接,可以使用以下注解
@TableField(condition = SqlCondition.LIKE) private String stuName;
下次使用實體類來構造參數時, 條件就會變成 stu_name like '%小明%'
我們也可以打開SqlCondition看看官方已經設定好的幾種條件
public class SqlCondition { public static final String EQUAL = "%s=#{%s}"; public static final String NOT_EQUAL = "%s<>#{%s}"; public static final String LIKE = "%s LIKE CONCAT('%%',#{%s},'%%')"; public static final String LIKE_LEFT = "%s LIKE CONCAT('%%',#{%s})"; public static final String LIKE_RIGHT = "%s LIKE CONCAT(#{%s},'%%')"; public SqlCondition() { } }
當上述都不滿足我們的要求時,我們也可以模擬上面的寫法,自行百度sql的各類符號轉碼
@TableField(condition = "%s > #{%s}") private Float score;
這樣,下次使用entity實例化條件構造器時,條件就會變成 score > XX