MyBatis封装类属性与数据表列名

一般MyBatis数据封装类的属性都要和数据库中的表的列名相同,这样便于在映射配置文件中写SQL语句时引起不必要的麻烦,但是如果封装类的属性和表的列名不同,也仍然有办法让程序正确运行。
假如数据库中,有一张表,其中的列名分别为:

id
name
address
email

一般情况下,会将封装类的属性写成如下形式:

private id;
private name;
private address;
private email;

但是现在, 如果将上述属性改为下面这种形式:

private userId;
private userName;
private userAddress;
private userEmail;

这样在映射配置文件中的SQL语句如果还是按原来的写法不做改动,那么从数据库读取到的数据就无法直接封装到类属性中。为了解决这种问题,有以下两种方法。(表的名称为user,封装类为User)

为表的列名起一个别名

若原本的xml文件中的SQL语句如下:


则应改为如下形式:


这样就相当于为表的列名起了别名,在封装过程中,列名与类属性可以对应起来,就能正确的封装数据。

配置列名和类属性的对应关系

这种方法不需要更改SQL语句,但是需要在映射配置文件中添加resultMap标签属性,如下:


        
        
        
        
        
        

上述xml文件中的resultMap标签中的id是一个唯一标志,可以自己定义,type表示对应的实体类的全限定类名。
resultMap标签中的元素,就是各列的对应关系,property是类属性名,column是表的列名。
然后在查询标签中将resultType属性更改为reslutMap属性,并且reslutMap属性的值就是自定义的值,这里的值就是userMap,如下:


这个属性的意思就是将查询的结果以reslutMap的映射关系封装到实体类中。

注意点

  • 第一种方式执行的效率更快,第二种方式由于多了一层映射关系,执行效率会有所下降。
  • 第二种方式的复用性更好,可以直接在其他标签中添加resultMap属性。第一种方法需要每次都写很长的SQL语句。
  • 由于Mysql数据库在Linux下区分大小写,在Windows下不区分大小写。所有如果表的列名为username,类属性为userName,这种写法在Windows下也是可以正确封装数据的。
  • 在配置列名和类属性的对应关系时,property对应类属性,是严格区分大小写的;column对应MySQL列名,是不区分大小写的。

你可能感兴趣的:(MyBatis封装类属性与数据表列名)