Be Extra Careful about Pitfalls of MyBatis-Plus 2.x
What an Unreliable Lad You Are @TableField
Mybatis-Plus introduces many powerful annotations for us to indicate the mapping between entity properties and table fields. It's a great coding experience working with those annotations and IService relevant helper class. However, it's actually not true in Mybatis-Plus 2.x. Why? @TableField
in 3.x could replace ResultMap
fully, even applied in customized Mapper select
statement like the example below.
package com.john.model;
@TableName("user")
public class User {
@TableId
private String id;
@TableField("user_name")
private String userName;
}
<mapper>
<select id="getUsers" resultType="com.john.model.User">
select * from user
</select>
</mapper>
Believe me gentles, 2.x would let you down definitely. @TableField
is out of work in above situation. What we have to do is declare the relations by ResultMap
, or keep the entity property name as the same as the table field which is case-sensitive.
<mapper>
<select id="getUsers" resultType="com.john.model.User">
select id
, user_name as userName
from user
</select>
</mapper>
The Pain I've Suffered from Pagination Plugin
Pagination plugin is another effective helper, but there are many differences between 3.x and 2.x. Listed as below.
-
TooManyResultExpression
throwed when declarePage
as return type of Mapper methods.List
is preference. -
The
current
property ofPage
which is used to indicate the current page to fetch starts from 1, not 0. What the heck:( -
Fill in the
records
property ofPage
by manual, while thetotal
property would be set automatically by Mybatis-Plus.public void selectUserPaging(Page<User> page) { List<User> users = dao.selectUserPaging(page); page.setRecords(users); return page; }
Conclusion
If this post could give you a favor, it's my pleasure 😃
欢迎添加我的公众号一起深入探讨技术手艺人的那些事!
如果您觉得本文的内容有趣就扫一下吧!捐赠互勉!