zoukankan      html  css  js  c++  java
  • 第十一篇:一点一滴学ibatis(一)

    一、常见ORM框架
    1、原生的JDBC。自己写的JDBC,基本上就只够程序跑起来,缺陷和漏洞一堆堆。回顾下jdbc的几个操作,加载驱动,建立连接,预处理语句,执行,结果集遍历。这个过程中,因为连接Connection要不断关闭和打开,频繁操作,于是有了连接池ConnectionPool。预处理语句的sql要重复编写和设置参数,于是有了xml一站式配置文件,结果集要不断遍历于是也有了xml去自动映射。
    2、JPA。全称是java Persistence API。这是一个标准的ORM规范。因为orm框架很多,大家就遵守一个统一的规范吧。注意这只是一个规范,不是实现。具体实现的产品,常见的Hibernate,MyBatis(前身IBatis) 等等。其他的没接触暂时不考虑
    3、Hibernate。以下摘抄他和MyBatis的区别,详细的以后总结。
    (1)mybatis手写SQL,而hibernate提供映射机制,开发人员无需关心 
    (2)mybatis控制更细粒度,但可移植性差,hibernate开发DAO很简单,可移植性好 
    (3)mybatis容易上手学习,hibernate难度稍大 
    (4)hibernate提供了面向对象的SQL语句HQL,也能使用普通的SQL,但mybatis只能使用普通的SQL。 

    二、 它属于web开发的哪一层?
    很明显,持久层,也即是DAL:数据访问层

    三、与MyBatis的区别
    iBatis的优点:
    (1)封装了很多JDBC的模板,开发时只需要关注sql语句。不需要关注驱动加载,Connection建立和关闭
    (2)上手容易,会jdbc的话学的会很快
    (3)进化了一下,就成了MyBatis,现在iBatis使用已经很少了。但是最近的项目正在用,还是学一学吧
    (4)支持存储过程,对于没法接触存储过程的童鞋这是个机会入手

    四、配置哪些文件
    1、全局的配置文件
    用于指定数据源,事物属性和其他参数配置信息 ,通常叫sqlMapConfig.xml
    2、映射文件
    就是一般的数据库物理表和java实体类映射的xml文件 
    注意:iBatis的一些元素如根元素<sqlMapConfig> ,指定映射文件的元素<sqlMap>,以及<SqlMapClient >等,在MyBatis中已经用
    Mapper、Session、Configuration这些名字代替,这些名字也是orm框架中常用的名字 

    五、配置文件详解
    1、sqlMapConfig.xml示例和详解

    <? xml version="1.0" encoding="UTF-8" ?>  

    <! DOCTYPE sqlMapConfig   PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"   "http://www.ibatis.com/dtd/sql-map-config-2.dtd>  

    < sqlMapConfig>(根元素)

         < settings    

         cacheModelsEnabled ="true"     <!--是否启用SqlMapClient上的缓存机制,建议true-- >  

         lazyLoadingEnabled="true"        <!-- 是否启用延迟加载机制,建议true -->  

         enhancementEnabled="true"     <!-- 是否针对POJO启用字节码增强机制,getter,setter调用功能,建议true -->  

         errorTracingEnabled="true"       <!-- 是否启用错误日志,开发期间建议true -->  
         maxRequests="32"                    <!-- 最大并发请求数,Statement并发数 -->  
         maxSessions="10"                     <!-- 最大Session数 -->  

         maxTransactions="5"                 <!-- 最大并发事务数 ,即当前最大允许的SqlMapClient数-->  

         useStatementNamespaces="true"<!-- 是否启用命名空间 -->
         />  
        < transactionManager type ="JDBC" >     <!-- 定义了ibatis的事务管理器有3种(JDBC,JTA,EXTERNAL) -->
             < dataSource type ="DBCP" >             <!-- type属性指定了数据源的连接类型,也有3种类型(SIMPLE,DBCP,JNDI) -->
                  < property name ="JDBC.Driver" value ="com.mysql.jdbc.Driver" /> 
                  < property name ="JDBC.ConnectionURL" value ="jdbc:mysql://localhost/test" /> 
                  < property name ="JDBC.Username" value ="root" /> 
                  < property name ="JDBC.Password" value ="root" /> 
                  < property name ="Pool.MaximumActiveConnections" value ="10" />      <!-- 连接池维持的最大容量 -->
                  < property name ="Pool.MaximumIdleConnections" value ="5" />            <!-- 连接池允许挂起的最大连接 --> 
                  < property name ="Pool.MaximumCheckoutTime" value ="120000" />     <!-- 连接被某个任务所允许占用的最大时间 -->
                  < property name ="TimeToWait" value ="500" />                                       <!-- 线程允许等待的最大时间 -->
             </ dataSource >
       </ transactionManager >
       < sqlMap resource ="com/yb/ibatis/userMap.xml" /> 

    </sqlMapConfig> 

    三个节点解析:
     transactionManager节点 :指定事务管理器
    JDBC:传统的JDBC Connection的commit,rollback实现事物支持
    JTA:使用容器提供的JTA服务实现全局事物管理(没用到,不懂)
    EXTERNAL:外部事物管理。比如spring来托管事物的管理很不错

    dataSource节点:type属性指定dataSource的实现方式
    SIMPLE:SIMPLE 是 ibatis 内置的 dataSource 实现,其中实现了一个简单的数据库连接池机制,对应 ibatis 实现类为
    com.ibatis.sqlmap.engine.datasource.SimpleDataSourceFactory.
    DBCP:基于Apache DBCP连接池组件实现的DataSource封装,当没有容器提供DataSource服务时,建议使用该选项,对应ibatis实现类为
    com.ibatis.sqlmap.engine.datasource.DbcpDataSourceFactory.  

    JNDI: 使用J2EE容器提供的DataSource实现, DataSource将通过指定的JNDI Name从容器中获取.对应ibatis实现类为

    com.ibatis.sqlmap.engine.datasource.JndiDataSourceFactory.

    sqlMap节点:指定映射文件的位置,可以有多个,来指定项目中所有的映射文件
    SqlMapClient实例创建的过程:

    String resource    = " com/ibatis/sample/SqlMapConfig.xml " ;  
    Reader reader; 

    reader    =    Resources.getResourceAsReader(resource); 

    XmlSqlMapClientBuilder  xmlBuilder = new  XmlSqlMapClientBuilder(); 

    SqlMapClient   sqlMap = xmlBuilder.buildSqlMap(reader); //获取到SqlMapClient实例

    常见操作:
    insert,delete,update
    queryForObject
    queryForMap
    queryForList

    以上配置基本上在项目确定后,改动很少,需要开发者手写的映射文件,单独总结一篇日志。

  • 相关阅读:
    微信小程序获取用户绑定手机号码完整版
    SQL读取当天的数据
    Android 百度离线地图(由apk文件转入手机内部存储)
    解决windows家庭版系统不支持远程桌面功能问题
    微信小程序携参跳转页面
    微信小程序 websocket 封装
    微信小程序HTTP请求封装
    Ionic项目打包Android在9版本以上不能进行HTTP通信问题
    Ionic 使用 MQTT
    Ionic HTTP 请求
  • 原文地址:https://www.cnblogs.com/yb38156/p/9821937.html
Copyright © 2011-2022 走看看