一、常见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
以上配置基本上在项目确定后,改动很少,需要开发者手写的映射文件,单独总结一篇日志。