写在前面
写了几个项目,无一例外每个项目中都用到了Mybatis,但是由于Mybatis中的很多配置基本都是相同的或者大差不差的,因此平时使用过程中都是直接copy过来的,久而久之对于Mybatis中的配置尤其是关于字段的映射的存在感就会淡化,对于为什么直接在xml中resultType传过来一个实体类select之后就能自动封装上去并返回实体类的对象的问题,只会觉得是理所当然的,那么多项目中都是那么写的,并没有过多的思考。
今天在高铁上无聊想到了这个问题,于是便记录下来,以供参考学习。
正文
Mybatis中实体属性与数据库字段的映射我总结为以下三种方式,有补充或者不严谨的地方欢迎大家指正。
方式一:在SQL语句中为字段起别名
我们都知道,SQL语句中可以对数据库中的字段取别名(取别名是不是MySQL的方言其实我也不太清楚),因此我们可以通过这种方式来实现数据库中的字段与实体类属性名的一致。
但是这种方式的缺点也很明显:不可复用、过于繁琐。因此实际开发中使用这种方式很少几乎没有。方式一示例如下:
其中方框中的字段为取的别名,与实体类中属性一致。数据库字段与别名之间的“as”可以省略。
方式二:通过resultMap标签自定义映射关系
resultMap是Mybatis返回操作结果的一个标签,用于将查询的结果集中的列一一映射到实体类对象的各个属性,因此我们可以在xml中通过这样一个标签声明映射关系。
这种方式通用性比较高,使用也比较多。方式二示例如下:
其中方框中的字段为取的别名,与实体类中属性一致。
方式三:配置mapUnderscoreToCamelCase
mapUnderscoreToCamelCase:
类型:boolean
默认值:true
开启自动驼峰命名规则(camel case)映射,开启后会自动将符合驼峰命名规范的实体类属性映射到对应的数据库命名规范字段,比如orderTime自动映射到order_time。
Mybatis中配置mapUnderscoreToCamelCase可以在mybatis-config.xml中配置,如果是SpringBoot项目可以在.yml或者.properties中的Mybatis的全局配置中开启。
mybatis-config.xml中配置如下:
application.yml中配置如下:
因为是全局配置,所以这种方式省去了很多重复多余的代码,但是也有缺陷:对于实体类属性名与数据库字段的命名有严格限制。
总结
Mybatis中的实体属性与数据库字段的映射方式有多种,根据不同的业务场景选择不同的配置方式是coder们的基本能力要求。
方式一:在SQL语句中为字段起别名;
方式二:通过resultMap标签自定义映射关系;
方式三:配置mapUnderscoreToCamelCase。
有任何补充或者建议欢迎在评论区点评指正。