Ibatis已经提提升为apache的开源一级项目,是作为j2ee持久层框架实现的一个开源的项目。有两个版本,一个是forjava,一个是fornet。
本身还有一个jpetstore的实例,使用了struts+ibatis来实现
http://www.ibatis.org
2 Ibatis-dao
Dao-database access object 数据库访问对象,是业务层和持久层的中间层,提供了访问数据库的接口,而不用考虑具体的持久层是用什么来实现的。。
Dao.xml
<daoConfig>
<context>
<transactionManager type="SQLMAP">
<property name="SqlMapConfigResource" value="com/aspire/ibatis/persistence/sqlmapdao/sql/sqlMapConfig.xml" />
</transactionManager>
<dao inter implementation="com.aspire.ibatis.persistence.sqlmapdao.UserSqlMapDao" />
</context>
</daoConfig>
目录结构
Com.aspire.ibatis //存放dao.xml以及daoConfig.java文件
Com.asprie.ibatis.iface //存放dao的接口文件
Com.aspire.ibatis.sqlmapdao//实现了dao接口文件类
baseSqlMapDao extends SqlMapDaoTemplate
3 Ibatis-sqlmap
SqlmapApi能使开发人员很轻易的将javabean,parameter,等映射成为perparedstatement的参数,并轻松返回result结果集合
Sqlmap的流程图
3.1 sqlmapconfig。Xml配置文件
<sqlmapconfig
>
<proerties>//
用来在配置文件中查找标准的
java
属性文件
name=value
</sqlmapconfig>.
<settings //
用来配置和优化
sqlmapclient
的实例的选项
cacheModelsEnabled="true" //
全局性的启动或者关闭
sqlmapclient
的所有
cache
enhancementEnabled="true" //
全局性的启动或者关闭运行时字节码增强的功能
,建议
true
lazyLoadingEnabled="true" //
全局性的启用或者关闭
sqlmapclient
的延迟加载
maxRequests="32" //
同时执行
sql
语句的最大现成数,大于这个值的线程将阻塞直到另一个线程执行完成,通常这个数值应该是
maxtransction
的
10
倍,并且大于
maxtranstion
和
maxsession
,减少这个数可以提高性能
maxSessions="10" //
同一活动时间内的最大
session
的数,
maxtranstion<maxsession<maxrequest,
较少可以降低内存的使用
maxTransactions="5" //
同时进入
sqlmapclient
。
startTranscation
的最大数量,减少这个数可以提高性能
useStatementNamespaces="false"//
启用本属性必须使用全局限定名来引用
mappedstatement
/>
<typealias> //别名
在sqlmap中预定义了别名
JDBC com.ibatis.sqlmap.engine.transaction.jdbc.JdbcTransactionConfig
JTA com.ibatis.sqlmap.engine.transaction.jta.JtaTransactionConfig
EXTERNAL com.ibatis.sqlmap.engine.transaction.external.ExternalTransactionConfig
SIMPLE com.ibatis.sqlmap.engine.datasource.SimpleDataSourceFactory
DBCP com.ibatis.sqlmap.engine.datasource.DbcpDataSourceFactory
JNDI com.ibatis.sqlmap.engine.datasource.JndiDataSourceFactory
<transactionManager> //用来配置事务管理,三种事务管理的类型JDBC,JTA,EXTERNAL
<datasource>//提供三种datasourceFactory
1. SIMPLE
基于ibatis的simpledatasource连接池实现
JDBC.Driver
JDBC.connectionURL
JDBC.UserName
JDBC.Password
Pool.MaximunActionConnections
Pool.MaximunIdleConnections
Pool.MaxnumCheckOutTime
Pool.TimeToWait
Pool.PingQuery
Pool.PingEnabled
Pool.PingConnectionsOlderThan
Pool.PingConnectionsNotUserdFor
2. DBCP
JDBC.Driver
JDBC.ConnectionURL
JDBC.Username
JDBC.Password
Pool.MaximumActionConections
Pool.MaximumIdleConnections
Pool.MaximumWait
3. JNDI
</datasource>
</transactionmanager>
<sqlmap resource=””> //指定sqlmap所在的路径
3.2 Sqlmap
Parameterclass
Parametermap
Inline parameter
如果在内镶的parameter中指定null的替代值,必须指定类型#parameter:type:替代值#
Resultclass
Resultmap
Property对应的javabean的get方法
Column对应的数据库的字段名
columnIndex用户resultset赋值费javabean字段的顺序号
jdbctype resultset中用于赋值javabean的数据库字段类型
javatype
nullvalue
select用于描述对象之间的关系
cacheModel /定义了mappedstatement的缓存方案
readonly标识缓存是否可修改
serialize标识可读写缓存
缓存的类型:MEMORY,LRUFIFO,OSCACHE
<select resultClass=”xml” xmlResultName=”root”>//将返回一个xml文档,root是根节点
3.3 动态mapstatement
<dynamic>
Prepend的父的属性可以覆盖子的prepend的属性,使用$parameter$
二元条件
<isEqual>
<isNotEqual>
<isGreaterThan>
<isGreaterEquals>
<isLessThan>
<isLessEqual>
一元条件
<isPropertyAvaliable>
<isNotPropertyAvaliable>
<isNull>
<isNotNull>
<isEmpty>
<isNotEmpty>
Other
<isParameterPresent>
<isNotParameterPresent>
<iterate>
3.4 sqlmapApi
queryforList的三个版本
1.直接返回查询结果
2.可以允许跳过结果的数目,以及返回结果的最大数目
3.可以让你使用结果对象,而不是数据表的行和列来逐行的处理结果集,
4 Others
Log4j来配置ibatis
Log4j.rootLogger=ERROR,stdout
Log4j.logger.com.ibatis=DEBUG
Log4j.logger.com.ibatis.common.jdbc.SimDataSource=DEBUG
Log4j.logger.com.ibatis.Common.jdbc.ScriptRunner=DEBUG
Log4j.logger.com.ibatis.sqlmap.engine.impl.sqlmapClientDelegate=DEBUG
Log4j.logger.java.sql.Connection=DEBUG
Log4j.logger.java.sql.Statement=DEBUG
Log4j.logger.java.sql.PreparedStatement=DEBUG
Log4j.logger.java.sqlResultSet=DEBUG
Log4j.appender.stdout=org.apache.log4j.ConsoleAppender
Log4j.appender.stdout.layout=org.apache.log4j.PatternLayOut
Log4j.appender.stdout.layout.ConversionPattern=%5p[%t]-%m%n
其他开源项目
Log4j
JMock – 用于单元测试
Junit
struts