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 ...
随机推荐
- [BZOJ1061][Noi2008]志愿者招募 线性规划+费用流
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1061 根据题意列方程,然后用网络流解线性规划. 题解直接贴ByVoid的吧,太神了:htt ...
- 前端--1、HTML基础
web服务 处于应用层的http协议负责的数据传输与解析.位于socket上层,用socket传输http数据时需要在消息开头处声明是http协议/相应http版本 状态码 状态码含义 \r\n\r\ ...
- CentOS 7 配置本地yum 源
1. 加载 CentOS的ISO镜像并挂载: [root@localhost files]# mount /media/files/CentOS-7-x86_64-DVD-1611.iso /mnt/ ...
- Android(java)学习笔记189:ContentProvider使用(银行数据库创建和增删改查的案例)
1. Android的四大组件: (1)Activity 用户交互的UI界面 (2)Service 后台运行的服务 (3)BroadcastReceiver 广播接收者 (4)ContentPro ...
- group by 和 聚合函数的使用
有这样一个表数据: 学生姓名,学生手机号,上课日期,上课科目 科目分: 语文.数学.英语.计算机 要求统计一个这样子的结果: 学生姓名,学生手机号,第一次上课日期,迄今一共上了多少节课,上的最多的科目 ...
- php生成订单号-当天从1开始自增
/** * 生成订单号 * -当天从1开始自增 * -订单号模样:20190604000001 * @param Client $redis * @param $key * @param $back: ...
- 15数据库与ADO.Net
数据库与ADO.Net 数据库与ADO.Net 8.1 数据库基本概念 数据库提供了一种将信息集合在一起的方法.数据库应用系统主要由三部分组成:数据库管理系统(DBMS),是针对所有应用的,例如A ...
- PyQt5实现第一个桌面应用程序
import sysfrom PyQt5.QtWidgets import QApplication,QWidget,QDialogfrom PyQt5.QtCore import Qt if __n ...
- 第2节 hive基本操作:12、hive当中的hql语法
3.2. hive查询语法 3.2.1.SELECT https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Select 基本 ...
- 四、spring中高级装配(2)
这个是接着上一篇写的,这章内容较多,分开来记录一下... 三.处理自动装配的歧义性 自动装配让spring完全负责bean引用注入到构造参数和属性中,不过,仅有一个bean匹配所需的结果时,自动装配才 ...