ibatis实战之基础环境搭建

关于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 数据库username
JDBC.Password 数据库用户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中所需的username參数,"#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)

项目project图例如以下:

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

作者:itmyhome

转载请注明出处:http://blog.csdn.net/itmyhome1990/article/details/28267901

时间: 2025-01-16 11:46:12

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

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

[注] 1.该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取: 2.Spark编译与部署将以CentOS 64位操作系统为基础,主要是考虑到实际应用一般使用64位操作系统,内容分为三部分:基础环境搭建.Hadoop编译安装和Spark编译安装,该环境作为后续实验基础: 3.文章演示了Hadoop.Spark的编译过程,同时附属资源提供了编译好的安装包,觉得编译费时间可以直接使用这些编译好的安装包进行部署. 1.运行环境说明 1.1 硬软件环境 l  主机

Grails 基础环境搭建及HelloWorld

Grails 基础环境搭建及HelloWorld Grails的介绍: Grails 为您提供 Rails 风格的开发体验,同时以可靠的 Java 技术作为坚强后盾. 但是 Grails 不仅仅是 Rails 通往 Java 平台的简单入口.Grails 吸取了 Rails 的经验,并将它们与现代 Java 开发的意识相结合. 可以认为 Grails 是受 Rails 启发,而不是由 Rails 转化而来. Groovy 的威力 就像 Rails 与 Ruby 编程语言联系非常紧密一样,Grai

IOS开发基础环境搭建

一.目的 本文的目的是windows下IOS开发基础环境搭建做了对应的介绍,大家可根据文档步骤进行mac环境部署: 二.安装虚拟机 下载虚拟机安装文件绿色版,点击如下文件安装 获取安装包:          百度网盘:链接:http://pan.baidu.com/s/1c28EkpE 密码:93tl 解压后如下,点击如下脚本进行安装:按提示进行: 服务配置(按需配置): 这里仅限配置网络功能即可:选择1 回车-选择桥接模式 选择2启用桥接服务 三.安装macos虚拟机 注意:查看本机cup类型

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

iOS开发——实战OC篇&环境搭建之Xib(玩转UINavigationController与UITabBarController) 前面我们介绍了StoryBoard这个新技术,和纯技术编程的代码创建界面,本篇我们将介绍一个老的技术,但是在很多的公司或者库里面还是使用这个技术,既然如此它肯定有他的好处,至于好处这里我就不一一介绍了.在Xcode5之前是只能使用Xib或者代码的,而代码又对于很多初学者来说算是一个难题.毕竟不知道怎么下手.所以我就总结了一下这段时间自己编写程序的一个实例来说明怎么

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

iOS开发——实战OC篇&环境搭建之纯代码(玩转UINavigationController与UITabBarController) 这里我们就直接上实例: 一:新建一个项目singleView Controller,命名未iCocos 二:由于我们使用的纯代码实现的,所以删除其中的StoryBoard和Viewtroller的两个文件 三:新建一个继承自TabBar Controller的类,我们命名问iCocos ViewController 三:在Appdelegate的实现文件中导入刚刚

【Hadoop基础教程】1、Hadoop之服务器基础环境搭建

本blog以K-Master服务器基础环境配置为例分别演示用户配置.sudo权限配置.网路配置.关闭防火墙.安装JDK工具等.用户需参照以下步骤完成KVMSlave1~KVMSlave3服务器的基础环境配置. 开发环境 硬件环境:Centos 6.5 服务器4台(一台为Master节点,三台为Slave节点) 软件环境:Java 1.7.0_45.hadoop-1.2.1 1.安装环境 硬件环境:Centos 6.5 服务器4台(一台为Master节点,三台为Slave节点) 软件环境:Java

S2SH开发环境搭建、框架整合、项目基础环境搭建

S2SH开发环境搭建.框架整合.项目基础环境搭建 1.S2SH框架整合 新建项目s2sh: 1.1添加jar包 1.1.1添加Struts的jar包 添加如下的jar包: commons-fileupload-1.2.2.jar commons-io-2.0.1.jar freemarker-2.3.19.jar ognl-3.0.5.jar struts2-core-2.3.4.1.jar xwork-core-2.3.4.1.jar 疑惑:这些jar可以从哪里获得呢? 对于一个框架来说,别人

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

在学习和开发hyperledger fabric的时候遇到了一些坑,现将自己的一些总结和心得整理如下,以期对大家有所帮助.本次使用的宿主机环境:ubuntu,版本:Ubuntu 16.04.3 LTS.运行hyperledger fabric,建议至少4GB的内存. 更改aptget源:初装ubuntu的Aptget源很慢,国内提供的源有很多,可以找一个适合自己的,我采用的是阿里的源.更改aptget阿里源的方法:1 复制原文件备份 sudo cp /etc/apt/sources.list /

hadoop3.1.0 window win7 基础环境搭建

https://blog.csdn.net/wsh596823919/article/details/80774805 hadoop3.1.0 window win7 基础环境搭建 前言:在windows上部署hadoop默认都是安装了java环境的哈. 1.下载hadoop3.1.0 https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common 2.下载之后解压到某个目录 3.配置hadoop_home 新建HADOOP_HOME,指向ha