第十一篇:一点一滴学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
以上配置基本上在项目确定后,改动很少,需要开发者手写的映射文件,单独总结一篇日志。
第十一篇:一点一滴学ibatis(一)的更多相关文章
- 第十三篇:一点一滴学ibatis(二)映射文件
首先给出一个常见的映射文件局部模板 <?xml version="1.0" encoding="utf-8" ?><!DOCTYPE s ...
- 跟我学SpringCloud | 第十一篇:使用Spring Cloud Sleuth和Zipkin进行分布式链路跟踪
SpringCloud系列教程 | 第十一篇:使用Spring Cloud Sleuth和Zipkin进行分布式链路跟踪 Springboot: 2.1.6.RELEASE SpringCloud: ...
- (十三) [终篇] 一起学 Unix 环境高级编程 (APUE) 之 网络 IPC:套接字
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
- 第十一篇 SQL Server安全审核
本篇文章是SQL Server安全系列的第十一篇,详细内容请参考原文. SQL Server审核SQL Server审核是指你可以在数据库或服务器实例监控事件.审核日志包含你选择捕获的事件的列表,在服 ...
- 【译】第十一篇 SQL Server安全审核
本篇文章是SQL Server安全系列的第十一篇,详细内容请参考原文. SQL Server审核SQL Server审核是指你可以在数据库或服务器实例监控事件.审核日志包含你选择捕获的事件的列表,在服 ...
- 解剖SQLSERVER 第十一篇 对SQLSERVER的多个版本进行自动化测试(译)
解剖SQLSERVER 第十一篇 对SQLSERVER的多个版本进行自动化测试(译) http://improve.dk/automated-testing-of-orcamdf-against ...
- 第十一篇 SQL Server代理维护计划
本篇文章是SQL Server代理系列的第十一篇,详细内容请参考原文 在这一系列的上一篇,我们看了使用代理帐户模仿Windows安全上下文完成作业步骤的工作.大多数子系统支持代理账户,同时子系统限制代 ...
- 第十一篇 Integration Services:日志记录
本篇文章是Integration Services系列的第十一篇,详细内容请参考原文. 简介在前一篇,我们讨论了事件行为.我们分享了操纵事件冒泡默认行为的方法,介绍了父子模式.在这一篇,我们会配置SS ...
- 【python自动化第十一篇】
[python自动化第十一篇:] 课程简介 gevent协程 select/poll/epoll/异步IO/事件驱动 RabbitMQ队列 上节课回顾 进程: 进程的诞生时为了处理多任务,资源的隔离, ...
随机推荐
- ThinkPHP框架数组定义
PHP数组定义 ThinkPHP框架中所有配置文件的定义格式均采用返回PHP数组的方式,格式为: //项目配置文件 return array( 'DEFAULT_MODULE' => 'Inde ...
- JS对象的可枚举属性和不可枚举属性
昨天在写文章(转载)的时候发现了有些对象的方法是分可枚举性和不可枚举性的.简单的查了一下资料,今天来捋一捋啥是对象的可枚举啥是不可枚举. 可枚举性: 对象的每一个属性都有一个描述对象,用来描述和控制该 ...
- (转)元类metaclass
阅读目录 一 前言 二 什么是元类 三 class关键字创建类的流程分析 五 自定义元类控制类OldboyTeacher的创建 六 自定义元类控制类OldboyTeacher的调用 六 再看属性查找 ...
- 2019 牛客多校第一场 A Equivalent Prefixes
题目链接:https://ac.nowcoder.com/acm/contest/881/A 题目大意 定义 RMQ(u, L, R) 为 u 数组在区间 [L, R] 上最小值的下标. 如果有 2 ...
- 剑指offer——20删除链表中重复的结点
题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后 ...
- 实现读取文本数据,在将数据导入mysql
import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.File; import java ...
- Codeforces 479【B】div3
题目链接: http://codeforces.com/problemset/problem/977/B 题意:字符串,找固定长度为2的重复子串出现次数最多的. 题解:我暴力做的.暴力出奇迹. #in ...
- [转]从客户端中检测到有潜在危险的 Request.Form 值。
参考资料: ASP.NET 4.0中使用FreeTextBox和FCKeditor遇到安全问题警告的解决办法关于问题出现的原因说的很清楚 引言 本人在.NET 4.0+VS2010环境下调试一个ASP ...
- Erlang学习记录:语法和特性
特性 大下排序:number < atom < reference < fun < port < pid < tuple < list < bit st ...
- 全球轮3——cf1148
c——贪心构造题 /* 1 [n/2+1,n] 2 [n/2+2,n] ... n/2 [n,n] n/2+1 [1,1] n/2+2 [1,2] ... n [1,n/2] ai要换到位置ai上,用 ...