1.实体类和表的映射
如果表的设计是这样的:
table_name : unit
字段1:unit_id (主键)
字段2:unit_name
而实体类是这样的:
@Table(name = "unit")
public class Unit {
@Id
private Integer unit_id;
private String unit_name;
}
此时,实体类的属性和字段是一一对应的,这样实体类Unit直接映射到了表unit,
如果此时,表字段的命名方式为驼峰式:
table_name : unit
字段1:unitId (主键)
字段2:unitName
而实体类依然按照和表字段一一对应的写法即:
@Table(name = "unit")
public class Unit {
@Id
private Integer unitId;
private String unitName;
}
此时程序运行会出现BadSql的异常,查看官方文档(https://gitee.com/free/Mapper/wikis/2.2-mapping?sort_id=208202),原来是tk-mybatis会默认将实体类中驼峰式命名的字段转换为_再进行映射(即camelhump的方式),如果要解决此问题,可在实体类上使用@NameStyle(Style.camelhumpAndUppercase)注解来决定使用何种方式,提供的转换方式有:
“通用 Mapper 中,默认情况下是将实体类字段按照驼峰转下划线形式的表名列名进行转换。
例如:
实体类的 userName 可以映射到表的 user_name 上。
如果想要修改默认的转换方式,可以在后续的配置中,修改 style 全局配置。”
这个注解可以在类上进行配置,优先级高于对应的 style 全局配置。
注解支持以下几个选项:
normal, //原值
camelhump, //驼峰转下划线
uppercase, //转换为大写
lowercase, //转换为小写
camelhumpAndUppercase, //驼峰转下划线大写形式
camelhumpAndLowercase, //驼峰转下划线小写形式
使用时,直接在类上配置即可,例如:
@NameStyle(Style.camelhumpAndUppercase)
public class Country
因此可使用@NameStyle(Style.normal)来表示类的字段与表字段对应,应注意字段的类型和名称与表保持一致,此时运行程序就不会出现sql映射出错的问题啦!
@Table(name = "unit")
@NameStyle(Style.normal)
public class Unit {
@Id
private Integer unitId;
private String unitName;
}