学习Mybatis源码

MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。 MyBatis 省略了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索。 MyBatis 可以使用简单的XML 或注解用于配置和原始映射,将接口和 Java 的 POJO( Plain Old Java Objects,普通的Java 对象)映射成数据库中的记录.

mybatis提供一种“半自动化”的ORM实现。
   这里的“半自动化”,是相对Hibernate等提供了全面的数据库封装机制的“全自动化”ORM实现而言,“全自动”ORM实现了POJO和数据库表之间的映射,以及 SQL 的自动生成和执行。

    而mybatis的着力点,则在于POJO与SQL之间的映射关系。

 xml
Annotation
Annotation和xml各自作为配置项的优点与缺点。

Annotation和xml各自作为配置项的优点与缺点。 
 一、Annotation 的优点 
  1、保存在 class 文件中,降低维护成本。 
  2、无需工具支持,无需解析。 
  3、编译期即可验证正确性,查错变得容易。 
  4、提升开发效率。 
 Annotation 缺点: 
  1、若要对配置项进行修改,不得不修改 Java 文件,重新编译打包应用。 
  2、配置项编码在 Java 文件中,可扩展性差。    
 二、XML 
  目前web应用中几乎都使用xml作为配置项,例如我们常用的框架Struts、Spring、Hibernate、IBatis等等都采用xml作为配置。 
  xml之所以这么流行,是因为它的很多优点是其它技术的配置所无法替代的。 
  1、xml作为可扩展标记语言最大的优势在于开发者能够为软件量身定制适用的标记,使代码更加通俗易懂。 
  2、利用xml配置能使软件更具扩展性。例如Spring将class间的依赖配置在xml中,最大限度地提升应用的可扩展性。 
  3、具有成熟的验证机制确保程序正确性。利用Schema或DTD可以对xml的正确性进行验证,避免了非法的配置导致应用程序出错。 
  4、修改配置而无需变动现有程序。
  虽然有如此多的好处,但毕竟没有什么万能的东西,xml也有自身的缺点。 
  1、需要解析工具或类库的支持。 
  2、解析xml势必会影响应用程序性能,占用系统资源。 
  3、配置文件过多导致管理变得困难。 
  4、编译期无法对其配置项的正确性进行验证,或要查错只能在运行期。 
  5、IDE无法验证配置项的正确性无能为力。 
  6、查错变得困难。往往配置的一个手误导致莫名其妙的错误。 
  7、开发人员不得不同时维护代码和配置文件,开发效率变得低下。 
  8、配置项与代码间存在潜规则。改变了任何一方都有可能影响另外一方。 


Mybatis属于半自动ORM,在使用这个框架中,工作量最大的就是书写Mapping的映射文件,由于手动书写很容易出错,我们可以利用Mybatis-Generator来帮我们自动生成文件。

generatorConfig.xml

<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE generatorConfiguration
   PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"   "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
  <generatorConfiguration>
      <!--数据库驱动-->
      <classPathEntry    location="mysql-connector-java-5.0.8-bin.jar"/>
      <context id="DB2Tables"    targetRuntime="MyBatis3">
          <commentGenerator>
             <property name="suppressDate" value="true"/>
             <property name="suppressAllComments" value="true"/>
         </commentGenerator>
         <!--数据库链接地址账号密码-->
         <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost/mymessages" userId="root" password="root">
         </jdbcConnection>
         <javaTypeResolver>
             <property name="forceBigDecimals" value="false"/>
         </javaTypeResolver>
         <!--生成Model类存放位置-->
         <javaModelGenerator targetPackage="lcw.model" targetProject="src">
             <property name="enableSubPackages" value="true"/>
             <property name="trimStrings" value="true"/>
         </javaModelGenerator>
         <!--生成映射文件存放位置-->
         <sqlMapGenerator targetPackage="lcw.mapping" targetProject="src">
             <property name="enableSubPackages" value="true"/>
         </sqlMapGenerator>
         <!--生成Dao类存放位置-->
         <javaClientGenerator type="XMLMAPPER" targetPackage="lcw.dao" targetProject="src">
             <property name="enableSubPackages" value="true"/>
         </javaClientGenerator>
         <!--生成对应表及类名-->
         <table tableName="message" domainObjectName="Messgae" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
     </context>
 </generatorConfiguration>

emplame 可以不要,对于



猜你喜欢

转载自blog.csdn.net/itdada/article/details/79596586