MyBatis由浅入深学习总结之二:MyBatis解决Java实体类和数据库表字段不一致方法总结

在此,首先说明一点任何持久性框架都需要解决一个问题,那就是Java实体类的字段一般来说基本上会与数据库表中字段不一致,那么它们是如何解决的呢?咱们以Hibernate和SpringJDBC为例说明一下;

1、Hibernate中一般通过XML映射和注解的方式解决不一致问题,看下面两个简单例子,

注解方式:

[java] view plain copy
  1. @Entity  
  2. @Table(name = "ACCOUNT")  
  3. public class Account implements Serializable {  
  4.     private static final long serialVersionUID = 1L;  
  5.   
  6.     @Id  
  7.     @GeneratedValue  
  8.     private int id;  
  9.   
  10.     @Column(name="fld_number")  
  11.     private String number;  
  12.       
  13.     @OneToMany(mappedBy="account")  
  14.     private Set<Client> clients;  
  15.       
  16.     private double balance;  
  17.   
  18. }  
XML映射文件配置方式:

[html] view plain copy
  1. <?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC  
  3.         "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  4.         "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  5.   
  6. <hibernate-mapping>  
  7.   
  8.     <class name="org.hibernate.test.domain.Account" table="ACCOUNT" lazy="false">  
  9.         <id name="id" column="ACCOUNT_ID">  
  10.             <generator class="native"/>  
  11.         </id>  
  12.   
  13.         <many-to-one name="person" class="org.hibernate.test.domain.Person" cascade="save-update,lock"  
  14.                      column="person_id"  
  15.                      unique="true"  
  16.                      not-null="true"/>  
  17.     </class>  
  18.   
  19. </hibernate-mapping>  
2、Spring JDBC一般通过使用RowCallbackHandler和RowMapper,编写回调函数的方式处理不一致,各种方法如下所示:

MyBatis由浅入深学习总结之二:MyBatis解决Java实体类和数据库表字段不一致方法总结
好的,了解完上述两种方式,咱们再来看看对于同样的问题,MyBatis是如何处理的?

对于这种问题,MyBatis主要提供了两种方式用来解决该问题;

一、通过对查询SQL采用字段别名的方式

1、新建表和插入数据

[html] view plain copy
  1. DROP TABLE IF EXISTS `sl_company`;  
  2. CREATE TABLE `sl_company` (  
  3.   `company_id` int(11) NOT NULL AUTO_INCREMENT,  
  4.   `company_name` varchar(50) DEFAULT NULL,  
  5.   `full_name` varchar(100) DEFAULT NULL,  
  6.   `address` varchar(100) DEFAULT NULL,  
  7.   `post_code` varchar(45) DEFAULT NULL,  
  8.    PRIMARY KEY (`company_id`)  
  9. ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;  
  10.   
  11. -- ----------------------------  
  12. -- Records of sl_company  
  13. -- ----------------------------  
  14. INSERT INTO `sl_company` VALUES ('1', '锐客科技', '上海锐客科技股份有限公司', '上海市浦东新区峨山路91弄97号陆家嘴软件园5号楼3层', '200127');  
2、创建对应的实体类

[java] view plain copy
<ol start="1" class="dp-j" style="box-sizing: border-box; margin: 0px 0px 1px 45px !important; padding: 0px; font-weight: normal; list-style: decimal; border-top: none; border-right: 1px solid rgb(231, 229, 220); border-b