第十一篇:一点一滴学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队列 上节课回顾 进程: 进程的诞生时为了处理多任务,资源的隔离, ...
随机推荐
- WPS Office for Mac如何修改Word文档文字排列?WPS office修改Word文档文字排列方向教程
Word文档如何改变文字的排列方向?最新版WPS Office for Mac修复了文字排版相关的细节问题,可以更快捷的进行Word编辑,WPS Office在苹果电脑中如何修改Word文档文字排列方 ...
- 关于使用vue时的个人规范
js文件: 公共功能文件:common_功能名.js 例:common_ajax.js 页面级功能文件(在不同页面复用):page_功能名.js 放置在html文件中加载的js文件命名:app_htm ...
- CRI 与 ShimV2:一种 Kubernetes 集成容器运行时的新思路
摘要: 关于 Kubernetes 接口化设计.CRI.容器运行时.shimv2.RuntimeClass 等关键技术特性的设计与实现. Kubernetes 项目目前的重点发展方向,是为开发 ...
- hibernate(一对多关系)
代码 public class Main { public static void main(String[] args) { SessionFactory sty = HibernateUtil ...
- Windows路径操作API函数学习【转载】
文章出自https://www.cnblogs.com/MakeView660/p/6644838.html 前言 在VC++开发过程中,经常需要用到一些路径操作,比如拼需要的文件路径,搜索路径中的内 ...
- 全面解读PHP面试
php面试考察点 1.PHP基础知识 引用变量 常量及数据类型 运算符及流程控制 自定义函数及内部函数 正则表达式 文件及目录处理 会话控制 面向对象 网络协议 开发环境相关考点 2.JavaS ...
- 关于idea中,web项目启动tomcat,访问资源报错404
背景: web项目启动tomcat,访问相应的资源,报错404,前提资源路径是没错的. 原因: 1.确定是不是web项目 不是的话: 配置web-inf的路径和webroot(web根目录)的路径 2 ...
- 牛客练习赛26 A 平面(结论题)
题目链接:https://ac.nowcoder.com/acm/contest/907/A 思路:结论题,当做2n条直线,参考资料https://blog.csdn.net/qq_34131212/ ...
- 读取.properties配置文件(转载)
读取.properties 文件 配置文件的一种,内容以键值对的形式存在,且每个键值对独占一行.#号作为行注释的起始标志,中文注释会自动进行unicode编码.示例: # ip and port of ...
- 协方差及matlib绘制
转自http://www.cnblogs.com/chaosimple/p/3182157.html 一.统计学的基本概念 统计学里最基本的概念就是样本的均值.方差.标准差.首先,我们给定一个含有n个 ...