一、常见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

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

第十一篇:一点一滴学ibatis(一)的更多相关文章

  1. 第十三篇:一点一滴学ibatis(二)映射文件

       首先给出一个常见的映射文件局部模板 <?xml version="1.0" encoding="utf-8" ?><!DOCTYPE s ...

  2. 跟我学SpringCloud | 第十一篇:使用Spring Cloud Sleuth和Zipkin进行分布式链路跟踪

    SpringCloud系列教程 | 第十一篇:使用Spring Cloud Sleuth和Zipkin进行分布式链路跟踪 Springboot: 2.1.6.RELEASE SpringCloud: ...

  3. (十三) [终篇] 一起学 Unix 环境高级编程 (APUE) 之 网络 IPC:套接字

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  4. 第十一篇 SQL Server安全审核

    本篇文章是SQL Server安全系列的第十一篇,详细内容请参考原文. SQL Server审核SQL Server审核是指你可以在数据库或服务器实例监控事件.审核日志包含你选择捕获的事件的列表,在服 ...

  5. 【译】第十一篇 SQL Server安全审核

    本篇文章是SQL Server安全系列的第十一篇,详细内容请参考原文. SQL Server审核SQL Server审核是指你可以在数据库或服务器实例监控事件.审核日志包含你选择捕获的事件的列表,在服 ...

  6. 解剖SQLSERVER 第十一篇 对SQLSERVER的多个版本进行自动化测试(译)

    解剖SQLSERVER 第十一篇    对SQLSERVER的多个版本进行自动化测试(译) http://improve.dk/automated-testing-of-orcamdf-against ...

  7. 第十一篇 SQL Server代理维护计划

    本篇文章是SQL Server代理系列的第十一篇,详细内容请参考原文 在这一系列的上一篇,我们看了使用代理帐户模仿Windows安全上下文完成作业步骤的工作.大多数子系统支持代理账户,同时子系统限制代 ...

  8. 第十一篇 Integration Services:日志记录

    本篇文章是Integration Services系列的第十一篇,详细内容请参考原文. 简介在前一篇,我们讨论了事件行为.我们分享了操纵事件冒泡默认行为的方法,介绍了父子模式.在这一篇,我们会配置SS ...

  9. 【python自动化第十一篇】

    [python自动化第十一篇:] 课程简介 gevent协程 select/poll/epoll/异步IO/事件驱动 RabbitMQ队列 上节课回顾 进程: 进程的诞生时为了处理多任务,资源的隔离, ...

随机推荐

  1. 判断有向无环图(DAG)

    1.拓扑排序 bfs 所有入度为0的先入选. 2.tarjan 1个点1个集合 3.暴力 一个点不能重新到达自己

  2. CF16E Fish(状压+期望dp)

    [传送门[(https://www.luogu.org/problemnew/show/CF16E) 解题思路 比较简单的状压+期望.设\(f[S]\)表示\(S\)这个状态的期望,转移时挑两条活着的 ...

  3. hdu多校第六场1008 (hdu6641)TDL 暴力

    题意: 设f(n,m)为比n大的第m个和n互质的数,给定一个k=(f(n,m)-n)xor n和m,求最小的n 题解: 对于给定的m而言,一个k周围合法的n分布的很密,因此在k的邻域暴力搜索即可. # ...

  4. (转)python常用模块(模块和包的解释,time模块,sys模块,random模块,os模块,json和pickle序列化模块)

    阅读目录 1.1.1导入模块 1.1.2__name__ 1.1模块 什么是模块: 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代 ...

  5. 永久修改 putty字体大小

    修改前: 修改操作: 1. Window -> Appearance -> Font settings  -> Change 修改 修改 2.  返回登陆主界面  Session   ...

  6. 拾遗:Git 基础

    http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/ 一.参数配置 $ git con ...

  7. ECMAScript1.4 对象 | 简单数据类型与复杂数据类型 | 内置对象 | 基本包装类型 | String

    对象 函数和对象的区别: 函数:封装代码 对象:封装属性和方法 创建对象的方法: 1,对象字面量{} // 模拟创建一只dog var dog = { // 属性 name: 'puppy', age ...

  8. Harry and magic string HDU - 5157 记录不相交的回文串对数

    题意: 记录不相交的回文串对数 题解: 正着反着都来一遍回文树 用sum1[i] 表示到 i 位置,出现的回文串个数的前缀和 sun2[i]表示反着的个数 ans+=sum1[i-1]*sum2[i] ...

  9. [每日一个小技巧] CentOS 下使用yum安装一类软件包

    版权声明:本文为博主原创文章,欢迎转载,转载请注明出处. https://blog.csdn.net/robertsong2004/article/details/37775313 yum 提供了丰富 ...

  10. 三层(3-tier architecture)基础

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/lhc2207221755/article/details/24802053     之前看过非常多关 ...