在此,首先说明一点任何持久性框架都需要解决一个问题,那就是Java实体类的字段一般来说基本上会与数据库表中字段不一致,那么它们是如何解决的呢?咱们以Hibernate和SpringJDBC为例说明一下;
1、Hibernate中一般通过XML映射和注解的方式解决不一致问题,看下面两个简单例子,
注解方式:
- @Entity
- @Table(name = "ACCOUNT")
- public class Account implements Serializable {
- private static final long serialVersionUID = 1L;
- @Id
- @GeneratedValue
- private int id;
- @Column(name="fld_number")
- private String number;
- @OneToMany(mappedBy="account")
- private Set<Client> clients;
- private double balance;
- }
- <?xml version="1.0"?>
- <!DOCTYPE hibernate-mapping PUBLIC
- "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
- <hibernate-mapping>
- <class name="org.hibernate.test.domain.Account" table="ACCOUNT" lazy="false">
- <id name="id" column="ACCOUNT_ID">
- <generator class="native"/>
- </id>
- <many-to-one name="person" class="org.hibernate.test.domain.Person" cascade="save-update,lock"
- column="person_id"
- unique="true"
- not-null="true"/>
- </class>
- </hibernate-mapping>
好的,了解完上述两种方式,咱们再来看看对于同样的问题,MyBatis是如何处理的?
对于这种问题,MyBatis主要提供了两种方式用来解决该问题;
一、通过对查询SQL采用字段别名的方式
1、新建表和插入数据
- DROP TABLE IF EXISTS `sl_company`;
- CREATE TABLE `sl_company` (
- `company_id` int(11) NOT NULL AUTO_INCREMENT,
- `company_name` varchar(50) DEFAULT NULL,
- `full_name` varchar(100) DEFAULT NULL,
- `address` varchar(100) DEFAULT NULL,
- `post_code` varchar(45) DEFAULT NULL,
- PRIMARY KEY (`company_id`)
- ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
- -- ----------------------------
- -- Records of sl_company
- -- ----------------------------
- INSERT INTO `sl_company` VALUES ('1', '锐客科技', '上海锐客科技股份有限公司', '上海市浦东新区峨山路91弄97号陆家嘴软件园5号楼3层', '200127');