ibatis的初识
在工作中,服务端的框架基本上是struts+spring+ibatis+velocity。ibatis曾经没有接触到,而曾经使用的hibernate在公司居然没碰着。同样都是数据库封装,为什么没有选择hibernate,这是当时疑惑的地方。
1、ibatis与hibernate的不同之处
Hibernate 对数据库进行了全面的封装,全自动的实现了POJO与数据库表的映射。使用hibernate,只需要定义POJO,及POJO与数据库表的映射文件,就能实现自动生成表,而hibernate对jdbc的封装,使得我们不需要去关心sql语句,这些都由hibernate封装成方法供调用了。但对于对性能要求苛刻的系统来说,hibernate可能就无法满足要求。相对与hibernate,ibatis就半自动化得多。ibatis需要手动的写sql语句,在这点上就能提供系统的性能。
2、使用ibatis时的一些配置含义
曾经自己简单的实现了个例子,采用的是struts2+spring+ibatis+velocity。虽然跑通了,但部分的配置还是不太理解,现在看了下ibatis,豁然开朗。
2.1 sqlmap-config 的配置意义
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd"> <sqlMapConfig>
<settings
cacheModelsEnabled="true"
enhancementEnabled="true"
lazyLoadingEnabled="true"
errorTracingEnabled="true"
maxRequests="32"
maxSessions="10"
maxTransactions="5"
useStatementNamespaces="false"
/> <sqlMap resource="MyFile.xml"/> </sqlMapConfig>
在settings的标签中,各个属性的含义:
cacheModelsEnabled: 是否启用 SqlMapClient 上的缓存机制。建议设为"true";
enhancementEnabled: 是否针对 POJO 启用字节码增强机制以提升getter/setter 的调用效能,避免使用 Java Reflect 所带来的性能开销。同时,这也为 Lazy Loading 带来了极大的性能提升。建议设为"true";
lazyLoadingEnabled: 是否启用延迟加载机制,建议设为"true";
errorTracingEnabled: 是否启用错误日志,在开发期间建议设为"true",以方便调试;
maxRequests: 最大并发请求数(Statement 并发数);
maxSessions: 最大 Session 数。即当前最大允许的并发SqlMapClient 数。
maxTransactions: 最大 Session 数。即当前最大允许的并发SqlMapClient 数。maxSessions 设定必须介于maxTransactions 和 maxRequests 之间,即maxTransactions<maxSessions=< maxRequests;
useStatementNamespaces:是否使用 Statement 命名空间。这里的命名空间指的是映射文件中, sqlMap 节点的 namespace 属性,如在上例中针对 t_user表的映射文件 sqlMap 节点:<sqlMap namespace="User"> 这里,指定了此 sqlMap 节点下定义的操作均从属于"User"命名空间。在 useStatementNamespaces="true"的情况下,Statement 调用需追加命名空间,如:sqlMap.update("User.updateUser",user); 否则直接通过 Statement 名称调用即可,如:sqlMap.update("updateUser",user); 但请注意此时需要保证所有映射文件中,Statement 定义无重名。
另外,指定的<sqlMap resource="MyFile.xml"/> 会从CLASSPATH中寻找,如果MyFile.xml放的位置不正确,会报FileNotFoundException.
2.2 MyFile.xml的配置
<sqlMap namespace="MyFile">
<typeAlias alias="MyFile" type="com.jd.training.domain.MyFile"></typeAlias>
<resultMap id="MyFileMap" class="MyFile">
<result property="id" column="id" />
<result property="name" column="name"/>
<result property="gmtCreate" column="gmt_create" />
</resultMap> <select id="findAll" resultMap="MyFileMap">
select id,name,gmt_create from my_file
</select>
</sqlMap>
2.3 调用 findAll
public List<MyFile> findAll() {
try{
List<MyFile> fs = getSqlMapClientTemplate().queryForList("findAll");
return fs;
}
catch(Exception e){
e.printStackTrace();
}
return null;
}
按照上面的useStatementNamespaces,如果值为true,则findAll前面需要加上MyFile。而我设置的为false,所以这里直接是findAll.
2.4 SqlMapClient
SqlMapClient 是 ibatis 运的核心, 所有操作均通过 SqlMapClient实例完成。
在spring中,SqlMapClient的配置:
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="/WEB-INF/sqlmap-config.xml"/>
<property name="dataSource" ref="dataSource"/>
</bean>
ibatis的初识的更多相关文章
- 初识iBatis
在JAVA EE应用程序中,持久层框架常用的有:Hibernate和IBATIS(或MyBatis),Hibernate是全自动的,IBatis是半自动的. IBatis的主要的作用是把SQL语句从我 ...
- mybatis入门--初识mybatis
初识mybatis 今天,一起来说说mybits这个框架吧.这是一个持久层的框架.之前叫做ibatis.所以,在它的代码中出现ibatis这个词的时候,不要感到惊讶.不是写错了,它确实就是这个样子的. ...
- MyBatis 框架系列之基础初识
MyBatis 框架系列之基础初识 1.什么是 MyBatis MyBatis 本是 apache 的一个开源项目 iBatis,后改名为 MyBatis,它 是一个优秀的持久层框架,对 jdbc 的 ...
- MyBatis For .NET学习- 初识MyBatis
MyBatis的框架. Introduction MyBatis本是apache的一个开源项目iBatis,2010年这个项目由 apache software foundation迁移到了googl ...
- 初识Mybatis之工程搭建
简介:MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单的 ...
- MyBatis学习01(初识MyBatis和CRUD操作实现)
1.初识MyBatis 环境说明: jdk 8 + MySQL 5.7.19 maven-3.6.1 IDEA 学习前需要掌握: JDBC MySQL Java 基础 Maven Junit 什么是M ...
- 值得注意的ibatis动态sql语法格式
一.Ibatis常用动态sql语法,简单粗暴用一例子 <select id="iBatisSelectList" parameterClass="java.util ...
- org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): da.huying.usermanag ...
- Android动画效果之初识Property Animation(属性动画)
前言: 前面两篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画).Frame Animation(逐帧动画)Andr ...
随机推荐
- for循环的两种写法哪个快
结果如下: 其实工作中,也没有这么多数据需要遍历,基本上用foreach
- Android 7.0 因为file://引起的FileUriExposedException异常
最近作者又碰到因为android 7.0 引起的兼容问题了. 在7.0以前的版本: //创建临时图片 File photoOutputFile = SDPath.getFile("temp. ...
- JavaScript线程
JavaScript的setTimeout与setInterval是两个很容易欺骗别人感情的方法,因为我们开始常常以为调用了就会按既定的方式执行, 我想不少人都深有同感, 例如 setTimeout( ...
- vue2.0自定义事件
我们知道父组件是使用props传递数据给子组件,如果子组件要把数据传递回去,怎么办? 那就是要自定义事件!使用v-on绑定自定义事件 每个Vue实例都实现了事件接口(Events interface) ...
- java规范与标准?
所谓规范,即指由很多人同时遵守的行为或理论. java的规范并不是指其中一种,而是有很多种,比如java编码规范,java命名规范,java虚拟机规范等等,甚至于一个编码规范都有很多种,不同的公司.组 ...
- How to Configure YUM to Install Packages From Installation ISO (RHEL)
1. Mount RHEL Installation ISO mkdir /media/dvd mount /dev/cdrom /media/dvd 2. Get Media ID with the ...
- uiviewcontroller顶级布局控制
@available(iOS 7.0, *) open var edgesForExtendedLayout: UIRectEdge // Defaults to UIRectEdgeAll @ava ...
- Linux 的 Spinlock 在 MIPS 多核处理器中的设计与实现
引言 随着科技的发展,尤其是在嵌入式领域,高性能.低功耗的处理器成为众多厂商追逐的目标,但是由于技术和工艺的瓶颈,试图在单核处理器上达到这样的目标变得越发困难,于是人们提出了多核处理器的概念.多核处理 ...
- lua 之 and or not
and是与运算,返回值如下 如果前者为false或者nil,则返回前者,否则后者 A and B 类似如下语句 if not A then return A else return B end 总结: ...
- mysql5大引擎之间的区别和优劣之分
数据库引擎介绍 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎,就必须重新编译MYSQL.在缺省情况下,MYSQL支持三个引擎:ISAM.MYISAM和HEAP.另 ...