关于ibatis的介绍、优缺点,以及ibatis和hibernate的比较再此不在赘述,可参阅其他资料。

一、准备工作

1、下载ibatis软件包http://download.csdn.net/detail/itmyhome/7473661

所需jar包为:ibatis-xxx.jar,mysql-connector-java-xxx-bin.jar

2、创建测试数据库,并新建user表,其中包含三个字段:

id(int)
   name(varchar)
   age(int)

ps:以mysql数据库为例

create table user(
id int,
name varchar(50),
age int
);

二、构建ibatis基础代码

ibatis基础代码包括:

1、ibatis实例配置

一个典型的配置文件如下

<?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"
enhancementEnabled="true"
lazyLoadingEnabled="true"
errorTracingEnabled="true"
maxRequests="32"
maxSessions="10"
maxTransactions="5"
useStatementNamespaces="false" />
<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="com.mysql.jdbc.Driver" />
<property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost:3306/ibatis" />
<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="Pool.TimeToWait" value="500" />
<property name="Pool.PingQuery" value="select 1 from ACCOUNT" />
<property name="Pool.PingEnabled" value="false" />
<property name="Pool.PingConnectionsOlderThan" value="1" />
<property name="Pool.PingConnectionsNotUsedFor" value="1" />
</dataSource>
</transactionManager>
<sqlMap resource="com/itmyhome/User.xml" />
</sqlMapConfig>

ibatis配置文件各节点简单说明:

(1)Settings节点

参数 描述
cacheModelsEnabled 是否启用 SqlMapClient 上的缓存机制。
建议设为"true"
enhancementEnabled 是否针对POJO启用字节码增强机制以提升
getter/setter 的调用效能,避免使用Java
Reflect 所带来的性能开销。
同时,这也为Lazy Loading带来了极大的性能
提升。建议设为"true"
errorTracingEnabled 是否启用错误日志,在开发期间建议设为"true"
以方便调试
lazyLoadingEnabled 是否启用延迟加载机制,建议设为"true"
maxRequests 最大并发请求数(Statement并发数)
maxTransactions 最大并发事务数
maxSessions 最大Session数.即当前最大允许的并发SqlMapClient数
maxSessions设定必须介于
maxTransactions和maxRequests之间,即
maxTransactions<maxSessions=< maxRequests
useStatementNamespaces 是否使用Statement命名空间。
这里的命名空间指的是映射文件中,sqlMap节点
的namespace属性,如在上例中针对user
表的映射文件sqlMap节点:
<sqlMap namespace="User">
这里,指定了此sqlMap节点下定义的操作均从
属于"User"命名空间。
在useStatementNamespaces="true"的情况下,
Statement调用需追加命名空间,如:
sqlMap.update("User.updateUser",user);
否则直接通过Statement名称调用即可,如:
sqlMap.update("updateUser",user);
但请注意此时需要保证所有映射文件中,
Statement定义无重名

(2)transactionManager节点

transactionManager节点定义了ibatis的事务管理器,目前提供了以下几种选择:
   1)  JDBC
   通过传统 JDBC Connection.commit/rollback实现事务支持。
   2)  JTA
   使用容器提供的JTA服务实现全局事务管理。
   3)  EXTERNAL
   外部事务管理,如在EJB中使用ibatis,通过EJB的部署配置即可实现自动的事务管理机制。

此时ibatis将把所有事务委托给外部容器进行管理。此外,通过Spring等轻量级容器实现事务的配置化管理也是一个不错的选

择。关于结合容器实现事务管理,参见“高级特性”中的描述。

(3)dataSource节点

dataSource从属于transactionManager节点,用于设定ibatis运行期使用的DataSource属性。

type属性:dataSource节点的type属性指定了dataSource的实现类型。

可选项目:

1)  SIMPLE:

SIMPLE是ibatis内置的dataSource实现,其中实现了一个简单的数据库连接池机制,对应ibatis实现类为

com.ibatis.sqlmap.engine.datasource.SimpleDataSourceFactory。

3)  DBCP:

基于Apache DBCP连接池组件实现的DataSource封装,当无容器提

供DataSource服务时,建议使用该选项,对应ibatis实现类为com.ibatis.sqlmap.engine.datasource.DbcpDataSourceFactory。

3)  JNDI:

使用J2EE容器提供的DataSource实现,DataSource将通过指定

的JNDI Name从容器中获取.对应ibatis实现类为com.ibatis.sqlmap.engine.datasource.JndiDataSourceFactory。

dataSource的子节点说明(SIMPLE&DBCP):

JDBC.Driver JDBC驱动.如:com.mysql.jdbc.Driver
JDBC.ConnectionURL 数据库URL。如:jdbc:mysql://localhost:3306/ibatis
如果用的是SQLServer JDBC Driver,需要
在url后追加SelectMethod=Cursor以获得
JDBC事务的多Statement支持。
JDBC.Username 数据库用户名
JDBC.Password 数据库用户密码
Pool.MaximumActiveConnections 数据库连接池可维持的最大容量。
Pool.MaximumIdleConnections 数据库连接池中允许的挂起(idle)连接数。

(4)sqlMap节点

sqlMap节点指定了映射文件的位置,配置中可出现多个sqlMap节点,以指定

项目内所包含的所有映射文件。

2、POJO

下面是我们用作示例的一个POJO

public class User implements Serializable {

	private static final long serialVersionUID = 1L;
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}


3、映射文件

与Hibernate不同,因为需要人工编写sql代码 ibatis的映射文件一般采用手动编写

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap
PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap namespace="User">
<typeAlias alias="user" type="com.itmyhome.User" />
<!-- 查询 -->
<select id="getUser" parameterClass="java.lang.Integer" resultClass="user">
<![CDATA[
select name,age from user where id = #id#
]]>
</select>
<!-- 插入 -->
<insert id="insertUser" parameterClass="user">
insert into user values(#id#,#name#,#age#)
</insert>
<!-- 更新 -->
<update id="updateUser"
parameterClass="user">
<![CDATA[
update user
SET name=#name#, age=#age#
WHERE id = #id#
]]>
</update>
<!-- 删除 -->
<delete id="deleteUser" parameterClass="java.lang.Integer">
delete from user where id = #id#
</delete>
</sqlMap>

从上面的映射文件可以看出,通过<insert>、<delete>、<update>、

<select>四个节点,我们分别定义了针对User对象的增删改查操作。在这

四个节点中,我们指定了对应的SQL语句,以update节点为例:

<update id="updateUser"                        (1
parameterClass="user"> (2
<![CDATA[ (3
update user (4
SET name=#name#, age=#age# (5
WHERE id = #id#
]]>
</update>

⑴ID

指定了操作ID,之后我们可以在代码中通过指定操作id来执行此节点所定义的操作,如:

sqlMap.update("updateUser",user);

ID设定使得在一个配置文件中定义两个同名节点成为可能(两个update节点,以不同id区分)

⑵ parameterClass

指定了操作所需的参数类型,此例中update操作以

com.itmyhome.User 类型的对象作为参数,目标是将提供的User实例更新到数据库。

parameterClass="user"中,user为"com.itmyhome.User"类的别名,别名可通过typeAlias节点指定,

如示例配置文件中的:<typeAlias alias="user" type="com.itmyhome.User"/>

⑶  <![CDATA[… ]]>

通过<![CDATA[… ]]>节点,可以避免SQL中与XML规范相冲突的字符对XML映射文件的合法性造成影响。

⑷执行更新操的SQL,这里的SQL即实际数据库支持的SQL语句,将由ibatis填入参数后交给数据库执行。

⑸ SQL中所需的用户名参数,"#name#"在运行期会由传入的user对象的name属性填充。(其他参数同)

对于这个示例,ibatis在运行期会读取id为"updateUser"的update节点

的SQL定义,并调用指定的user对象的对应getter方法获取属性值,并用此

属性值,对SQL中的参数进行填充后提交数据库执行。

好了,我们完成了所有的配置文件和映射文件,就剩下应用的编码工作了。

首先要设置SQL Map,读入刚创建好的SQL Map XML配置文件。为简化这个工作,可以使用

SQL Map架构中提供的Resources类。

Stringresource ="SqlMapConfig.xml";
Readerreader=Resources.getResourceAsReader(resource);
SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);

以上的SqlMapClient对象是线程安全,并且应持久生存。对于一个特定的应用,只需

进行一次SqlMap配置。因此,它可以作为基类的一个静态对象(即DAO对象的基类),或

者,如果您想让它有更大的作用范围,可以把它封装在方便使用的类中。例如:

public class MyAppSqlConfig {
private static final SqlMapClient sqlMap;
static {
try {
String resource = "SqlMapConfig.xml";
Reader reader = Resources.getResourceAsReader(resource);
sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("Error initializing MyAppSqlConfig class. Cause: " + e);
}
}
public static SqlMapClient getSqlMapInstance() {
return sqlMap;
}
}


从数据库读取对象

既然SqlMap对象已完成初始化,那么就可以方便地使用它了。首先我们用它

从数据库中读取一个User对象(本例中 先假设User表中一村庄N条记录,id从i到N)

要从数据库中得到一个User对象,只需要SqlMap实例,让我们读入id为1的User对象

SqlMapClient sqlMap = MyAppSqlConfig.getSqlMapInstance();
User user = (User)sqlMap.queryForObject ("getUser", 1);

把对象写入数据库

User u = new User();
u.setId(2);
u.setName("wangwu");
u.setAge(23);
sqlMap.insert("insertUser",u);

更新对象

User u = new User();
u.setId(3);
u.setName("itmyhome");
u.setAge(25);
sqlMap.update("updateUser",u)

删除对象

sqlMap.delete("deleteUser", 1)

项目工程图如下:

项目源码下载:http://download.csdn.net/detail/itmyhome/7473721

ibatis实战之基础环境搭建的更多相关文章

  1. Spark入门实战系列--2.Spark编译与部署(上)--基础环境搭建

    [注] 1.该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取: 2.Spark编译与部署将以CentOS 64位操作系统为基础,主要是考虑到实际应用 ...

  2. iOS开发——实战OC篇&环境搭建之Xib(玩转UINavigationController与UITabBarController)

    iOS开发——实战OC篇&环境搭建之Xib(玩转UINavigationController与UITabBarController)   前面我们介绍了StoryBoard这个新技术,和纯技术 ...

  3. iOS开发——实战OC篇&环境搭建之纯代码(玩转UINavigationController与UITabBarController)

    iOS开发——实战OC篇&环境搭建之纯代码(玩转UINavigationController与UITabBarController)   这里我们就直接上实例: 一:新建一个项目singleV ...

  4. EXT 基础环境搭建

    EXT 基础环境搭建使用 Sencha CMD 下载地址 https://www.sencha.com/products/extjs/cmd-download/ Sencha CMD 常用命令 API ...

  5. IOS开发基础环境搭建

    一.目的 本文的目的是windows下IOS开发基础环境搭建做了对应的介绍,大家可根据文档步骤进行mac环境部署: 二.安装虚拟机 下载虚拟机安装文件绿色版,点击如下文件安装 获取安装包:       ...

  6. Spark环境搭建(上)——基础环境搭建

    Spark摘说 Spark的环境搭建涉及三个部分,一是linux系统基础环境搭建,二是Hadoop集群安装,三是Spark集群安装.在这里,主要介绍Spark在Centos系统上的准备工作--linu ...

  7. 【1】windows下IOS开发基础环境搭建

    一.目的 本文的目的是windows下IOS开发基础环境搭建做了对应的介绍,大家可根据文档步骤进行mac环境部署: 二.安装虚拟机 下载虚拟机安装文件绿色版,点击如下文件安装 获取安装包:       ...

  8. Maven 学习笔记(一) 基础环境搭建

    在Java的世界里,项目的管理与构建,有两大常用工具,一个是Maven,另一个是Gradle,当然,还有一个正在淡出的Ant.Maven 和 Gradle 都是非常出色的工具,排除个人喜好,用哪个工具 ...

  9. (一)Hyperledger Fabric 1.1安装部署-基础环境搭建

    在学习和开发hyperledger fabric的时候遇到了一些坑,现将自己的一些总结和心得整理如下,以期对大家有所帮助.本次使用的宿主机环境:ubuntu,版本:Ubuntu 16.04.3 LTS ...

随机推荐

  1. SpringMVC4 + Spring + MyBatis3

    SpringMVC4 + Spring + MyBatis3 本文使用最新版本(4.1.5)的springmvc+spring+mybatis,采用最间的配置方式来进行搭建. 1. web.xml 我 ...

  2. Postman 是一个非常棒的Chrome扩展,提供功能强大的API & HTTP 请求调试

    Postman 是一个非常棒的Chrome扩展,提供功能强大的API & HTTP 请求调试   需要FQ才能安装,使用时应该不用FQ了,除非使用postman的历史记录功能:   非常棒的C ...

  3. Tair LDB基于Prefixkey找到如何提取一系列性能优化项目key的prefix_size

    眼下项目已快截止,编码任务也基本完毕.如今主要是性能測试. 项目是依照"Tair LDB基于Prefixkey的范围查找性能优化项目提议方案"的步骤一步步完毕的,首先先介绍第一个关 ...

  4. iOS开发的一些奇巧淫技2

    能不能只用一个pan手势来代替UISwipegesture的各个方向? - (void)pan:(UIPanGestureRecognizer *)sender { typedef NS_ENUM(N ...

  5. NGUI使用教程(2) 使用NGUI创建2D场景而且加入标签和button

    1.创建2D场景 要使用NGUI创建2D场景,首先咱们必须新建一个项目,而且导入NGUI作为这个项目的插件,相信假设看过上一篇教程都知道怎么导入NGUI了,这里就不赘述,假设有疑问的能够去看上一篇教程 ...

  6. 设置CentOS开机连接网络 Centos 开机启动网卡的设置方法

    我们开机网卡不能启动所以只能使用 ifup eth0 (eth0指的网卡) 来启动了,但是每一次都这样感觉不方便希望开机自动启动网卡 后来百度搜索了一下发现可以通过修改网卡( ifcfg-eth0)参 ...

  7. s2sh三大框架整合过程(仅供参考)

    三大框架顾名思义就是非常有名的Struts2 ,Hibernate,Spring, 框架整合的方法很多,现在我写一个非常简单的整合过程,相信大家一看就会! 这里使用的struts-2.2.1.1.hi ...

  8. C语言库函数大全及应用实例四

    原文:C语言库函数大全及应用实例四                                    [编程资料]C语言库函数大全及应用实例四 couble fmod (double x, dou ...

  9. JS获取浏览器型号

    /**********************************浏览器型号搜集start*************************************/ var userAgent ...

  10. JS模块与命名空间的介绍二

    区别一: