您的位置:首页 > 编程语言 > Java开发

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

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

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

注解方式:

[java] view
plain copy

@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映射文件配置方式:

[html] view
plain copy

<?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>  

2、Spring JDBC一般通过使用RowCallbackHandler和RowMapper,编写回调函数的方式处理不一致,各种方法如下所示:



好的,了解完上述两种方式,咱们再来看看对于同样的问题,MyBatis是如何处理的?

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

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

1、新建表和插入数据

[html] view
plain copy

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');  

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐