在工作中,服务端的框架基本上是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的初识的更多相关文章

  1. 初识iBatis

    在JAVA EE应用程序中,持久层框架常用的有:Hibernate和IBATIS(或MyBatis),Hibernate是全自动的,IBatis是半自动的. IBatis的主要的作用是把SQL语句从我 ...

  2. mybatis入门--初识mybatis

    初识mybatis 今天,一起来说说mybits这个框架吧.这是一个持久层的框架.之前叫做ibatis.所以,在它的代码中出现ibatis这个词的时候,不要感到惊讶.不是写错了,它确实就是这个样子的. ...

  3. MyBatis 框架系列之基础初识

    MyBatis 框架系列之基础初识 1.什么是 MyBatis MyBatis 本是 apache 的一个开源项目 iBatis,后改名为 MyBatis,它 是一个优秀的持久层框架,对 jdbc 的 ...

  4. MyBatis For .NET学习- 初识MyBatis

    MyBatis的框架. Introduction MyBatis本是apache的一个开源项目iBatis,2010年这个项目由 apache software foundation迁移到了googl ...

  5. 初识Mybatis之工程搭建

    简介:MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单的 ...

  6. MyBatis学习01(初识MyBatis和CRUD操作实现)

    1.初识MyBatis 环境说明: jdk 8 + MySQL 5.7.19 maven-3.6.1 IDEA 学习前需要掌握: JDBC MySQL Java 基础 Maven Junit 什么是M ...

  7. 值得注意的ibatis动态sql语法格式

    一.Ibatis常用动态sql语法,简单粗暴用一例子 <select id="iBatisSelectList" parameterClass="java.util ...

  8. org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):

    org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): da.huying.usermanag ...

  9. Android动画效果之初识Property Animation(属性动画)

    前言: 前面两篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画).Frame Animation(逐帧动画)Andr ...

随机推荐

  1. js promise 介绍和使用

    1.什么是promise js是单线程执行的. ajax是典型的异步操作,我们通常会在ajax的成功或者失败之后写上回掉函数.这中写法是一种嵌套的方式,如果回掉多了会造成代码复杂并且难以复用. pro ...

  2. 最实用解决tomcat startup.bat 一闪而过

    1.直接到tomcat 的解压路径中找到log日志,eg:D:\tomcat\apache-tomcat-7.0.73\logs 查看 catalina 这个日志文件,可以清除的定位错误原因:一般可能 ...

  3. 黑马程序员----java基础:String与StringBuffer及基本数据类型包装类

    ------- android培训.java培训.期待与您交流! ---------- java中一些基础类比如String.StringBuffer和基本数据类型包装类都是非常常见且使用非常频繁的类 ...

  4. Mybatis 分页插件 PageHelper

    话不多说,直接导入.部署流程. 1. 引入插件依赖包: maven工程中,pom.xml文件下,添加插件配置项: 2. 配置插件拦截器: webapp -> WEB-INF 下添加 .xml配置 ...

  5. JavaScript——blob、file、flieReader、createObjectURL

    https://blog.csdn.net/opengl_es/article/details/44336477 https://www.cnblogs.com/hhhyaaon/p/5928152. ...

  6. 数组(Arry)几个常用方法的详解

    join() 方法用于把数组中的所有元素放入一个字符串.元素是通过指定的分隔符进行分隔的. arrayObject.join(separator)separator 可选.指定要使用的分隔符.如果省略 ...

  7. 1、QQ装机部落---腾讯软件

    亲,赚钱快人一步,我给你推荐QQ装机部落!大品牌,口碑好,知名软件,绿色无毒,每天结算,回报高!到这里注册:http://zjbl.qq.com/#/?invid=476058088 返利网邀请码立即 ...

  8. C++模版完全解析

    模版 模版在C++中是一个很重要的概练,生活中的模版也是随处可见,比如制造工程师会 哪一个模子去构造出一个一个的工件,C++程序员能够用模版去实例化y有相同操作 不同类型的函数或者数据结构.简单的理解 ...

  9. (转)淘淘商城系列——SSM框架整合之表现层整合

    http://blog.csdn.net/yerenyuan_pku/article/details/72721120 上文我们一起学习了Service层的整合,本文将教大家如何整合表现层. 我们在t ...

  10. leetcode_Counting Bits_dp

    给定num,用O(num)的时间复杂度计算0--num中所有数的二进制表示中1的个数. vector<int> countBits(int num) { vector<,); ;i& ...