一、常见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. springboot连接mysql数据库,JdbcTemplate和spring JPA方式

    SQL部分 CREATE TABLE test( id ) primary key, name ) not null, age ), address ) ); ,,'bj'); ,,'sh'); ,, ...

  2. js基础用法 ,基础语法

    js用法: HTML 中的脚本必须位于 <script> 与 </script> 标签之间. 脚本可被放置在 HTML 页面的 <body> 和 <head& ...

  3. hibernate(一对多关系)

    代码   public class Main { public static void main(String[] args) { SessionFactory sty = HibernateUtil ...

  4. CF696B Puzzles(期望dp)

    传送门 解题思路 比较有意思的一道题.首先假如这个点\(x\)只有\(1\)个儿子\(u\),那么显然可得\(dp[u]=dp[x]+1\).继续如果多加一个儿子\(p\),那么\(p\)在\(u\) ...

  5. HDU6447 YJJ's Salesman-2018CCPC网络赛-线段树求区间最值+离散化+dp

    目录 Catalog Solution: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 Catalog Problem:Portal传送门  原题目描述在最下面.  1e5个点,问 ...

  6. 数据结构C++版-队列

    一.概念 分类: 二.补充说明 1.<面向对象的队列设计>课程问答: 首先要明确数据结构和数据存储结构的概念. 数据结构是指数据对象之间的逻辑关系,例如二叉树,队列,栈等,而数据存储结构是 ...

  7. jquery preventDefault()事件

    定义和用法 preventDefault() 方法阻止元素发生默认的行为(例如,当点击提交按钮时阻止对表单的提交). 语法 event.preventDefault() 参数 描述 event 必需. ...

  8. project3_NeedToLoginCalculator(需要进行登陆确认的计算器)

    下列实现代码说明: 下列代码主要是实现计算器功能.由于之前在莫凡老师开设的<用 python 和 tkinter 做简单的窗口视窗>课程当中学习了tkinter的内容,在该课程的结束部分是 ...

  9. jquery操作html元素之( 尺寸)

    jQuery 提供多个处理尺寸的重要方法: width() height() innerWidth() innerHeight() outerWidth() outerHeight() jQuery ...

  10. java.sql.SQLException: validateConnection false

    -- :: --- [Create-] com.alibaba.druid.pool.DruidDataSource : create connection error java.sql.SQLExc ...