注解方式下
来源:黑马程序员
mybatis数据库列名与实体类列明不一致:
比如:
实体类:
数据库:
查出来的结果不能很好的使用User类的toString方法封装(username属性名和数据库列名一致,能封装好,其他的属性都不一致):
解决1:sql语句中起别名(不推荐)
解决2:
使用Results和Result两个注解,Result的id=true表示主键,默认是flase,Results的id可以用来表示当前定义的这个Results,方便其他的函数引用
/**
* 查找所有用户
* @return
*/
@Select(value = "select * from user")
@Results(id = "resultMap",value = {
@Result(id = true,column = "id",property = "userId"),
@Result(column = "sex",property = "userSex"),
@Result(column = "address",property = "userAddress"),
@Result(column = "address",property = "userAddress"),
@Result(column = "birthday",property = "userBirthday")
})
List<User2> findAll();
其他地方引用:
/**
* 根据ID查找用户
* @param id
* @return
*/
@Select("select * from user where id=#{id}")
@ResultMap(value = {"resultMap"})
User2 findByID(Integer id);
Results源码:
public @interface Results {
String id() default "";
Result[] value() default {};
}
Result的源码(跟xml配置很相似,都是id,column,property):
public @interface Result {
boolean id() default false;
String column() default "";
String property() default "";
Class<?> javaType() default void.class;
JdbcType jdbcType() default JdbcType.UNDEFINED;
Class<? extends TypeHandler> typeHandler() default UnknownTypeHandler.class;
One one() default @One;
Many many() default @Many;
}
ResultMap 源码,value就是用用的Results的id,可以同时引用多个:
public @interface ResultMap {
String[] value();
}