当使用tk.mybatis时,自定义SQL过程中用到了resultMap的collection映射,但是在使用Generator生成的Bean里添加自定义的List后,在Mapper文件中如下映射会报错:
表结构:
A:user_id user_name user_age
B:Role_id Role_name Role_path
Bean:
public class User{
@Column("USER_ID")
private String userId;
@Column("USER_NAME")
private String userName;
@Column("USER_AGE")
private String userAge;
private List<Role> roles;
//getter and setter
}
public class Role{
@Column("ROLE_ID")
private String roleId;
@Column("ROLE_NAME")
private String roleName;
@Column("ROLE_PATH")
private String rolePath;
//getter and setter
}
mapper.xml:
<resultMap id="userMap" type="com.XXX.model.User">
<result property="userId" jdbcType="VARCHAR" column="USER_ID"/>
<result property="userName" jdbcType="VARCHAR" column="USER_NAME"/>
<result property="userAge" jdbcType="VARCHAR" column="USER_AGE"/>
<collection property="roles" resultMap="roleMap"/>
</resultMap>
<resultMap id="roleMap" type="com.XXX.model.Role">
<result property="roleId" jdbcType="VARCHAR" column="ROLE_ID"/>
<result property="roleName" jdbcType="VARCHAR" column="ROLE_NAME"/>
<result property="rolePath" jdbcType="VARCHAR" column="ROLE_PATH"/>
</resultMap>
此时启动项目会报错:
Caused by: java.lang.IllegalStateException: No typehandler found for property roles
此时需要为我们在User类中自定义的roles添加注解@javax.persistence.Transient来忽略此字段,使其使用我们自定义的map就好了。
详见:https://github.com/abel533/MyBatis-Spring-Boot/issues/4