Ibatis 入门

1.总体描述

以Eclipse为例说明ibatis用法,数据库为MSSQL2000,ibatis版本为2.0, jDK1.5, 以对一个用户信息表 user_info的插入、查询(单条记录),多记录查询为例说明itatis的用法。
<wbr><wbr><wbr><wbr><br> 说明:<br><wbr><wbr><wbr><wbr> 本文适合初次接触ibatis的读者。<br><wbr><wbr><wbr><wbr> 文章中如有不妥之处,欢迎指正。<br><wbr><wbr><wbr><wbr> 如国引用,请说明出处,谢谢。</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

2.<wbr>准备工作</wbr>

<!--[if !supportLists]-->1.<wbr><wbr><wbr><wbr><wbr><wbr> &lt;!--[endif]--&gt;安装Eclipse 3.0.1</wbr></wbr></wbr></wbr></wbr></wbr>

<!--[if !supportLists]-->2.<wbr><wbr><wbr><wbr><wbr><wbr> &lt;!--[endif]--&gt;安装jdk1.5</wbr></wbr></wbr></wbr></wbr></wbr>

<!--[if !supportLists]-->3.<wbr><wbr><wbr><wbr><wbr><wbr> &lt;!--[endif]--&gt;下载 ibatis 2.0 开发包<a href="http://www.ibatis.com/">http://www.ibatis.com/</a></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<!--[if !supportLists]-->4.<wbr><wbr><wbr><wbr><wbr><wbr> &lt;!--[endif]--&gt;下载MS SQL 的JDBC驱动包, MSJDBC3.0SP3</wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

<!--[if !supportLists]-->5.<wbr><wbr><wbr><wbr><wbr><wbr> &lt;!--[endif]--&gt;下载日志操作包 commons-logging.jar</wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

3.开发步骤

<!--[if !supportLists]-->1.<wbr><wbr><wbr><wbr><wbr><wbr> &lt;!--[endif]--&gt;新建J2EE工程 test</wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

<!--[if !supportLists]-->2.<wbr><wbr><wbr><wbr><wbr><wbr> &lt;!--[endif]--&gt;在test下建立包 cjs</wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<!--[if !supportLists]-->3.<wbr><wbr><wbr><wbr><wbr><wbr> &lt;!--[endif]--&gt;建立文件夹 sqlmap</wbr></wbr></wbr></wbr></wbr></wbr>

<!--[if !supportLists]-->4.<wbr><wbr><wbr><wbr><wbr><wbr> &lt;!--[endif]--&gt;建立文件夹 sqlmap.map</wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<!--[if !supportLists]-->5.<wbr><wbr><wbr><wbr><wbr><wbr> &lt;!--[endif]--&gt;在sqlmap.map 下建立三个文件:</wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

SqlMapConfigExample.properties

<wbr></wbr>

<wbr></wbr>

sql-map-config.xml

user.xml

<wbr></wbr>

文件内容如下:

<wbr></wbr>

<wbr></wbr>

SqlMapConfigExample.properties

-----------------------------------------------------------------------------------------------------------

<wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<wbr></wbr>

driver=com.microsoft.jdbc.sqlserver.SQLServerDriver

<wbr></wbr>

<wbr></wbr>

url=jdbc:microsoft:sqlserver://localhost:1433;

<wbr></wbr>

<wbr></wbr>

DatabaseName=java

username=sa

<wbr></wbr>

<wbr></wbr>

password=tn

-----------------------------------------------------------------------------------------------------------

<wbr></wbr>

<wbr></wbr>

sql-map-config.xml

<wbr></wbr>

<wbr></wbr>

-----------------------------------------------------------------------------------------------------------

<wbr></wbr>

<?xml version="1.0" encoding="UTF-8"?>

<wbr></wbr>

<wbr></wbr>

<!DOCTYPE sqlMapConfig

<wbr></wbr>

PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"

<wbr></wbr>

"http://www.ibatis.com/dtd/sql-map-config-2.dtd">

<wbr></wbr>

<sqlMapConfig>

<wbr></wbr>

<wbr></wbr>

<wbr><wbr> &lt;properties</wbr></wbr>

<wbr><wbr><wbr> resource="sqlmap/map/SqlMapConfigExample.properties" /&gt;</wbr></wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<wbr><wbr> &lt;settings</wbr></wbr>

<wbr><wbr><wbr> cacheModelsEnabled="true"</wbr></wbr></wbr>

<wbr></wbr>

<wbr><wbr><wbr> enhancementEnabled="true"</wbr></wbr></wbr>

<wbr></wbr>

<wbr><wbr><wbr> lazyLoadingEnabled="true"</wbr></wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<wbr><wbr><wbr> maxRequests="32"</wbr></wbr></wbr>

<wbr><wbr><wbr> maxSessions="10"</wbr></wbr></wbr>

<wbr><wbr><wbr> maxTransactions="5"</wbr></wbr></wbr>

<wbr><wbr><wbr> useStatementNamespaces="false" /&gt;</wbr></wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<wbr><wbr> &lt;transactionManager type="JDBC" &gt;</wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<wbr><wbr><wbr> &lt;dataSource type="SIMPLE"&gt;</wbr></wbr></wbr>

<wbr></wbr>

<wbr><wbr><wbr><wbr> &lt;property name="JDBC.Driver" value="${driver}"/&gt;</wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr> &lt;property name="JDBC.ConnectionURL" value="${url}"/&gt;</wbr></wbr></wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<wbr><wbr><wbr><wbr> &lt;property name="JDBC.Username" value="${username}"/&gt;</wbr></wbr></wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<wbr><wbr><wbr><wbr> &lt;property name="JDBC.Password" value="${password}"/&gt;</wbr></wbr></wbr></wbr>

<wbr><wbr><wbr> &lt;/dataSource&gt;</wbr></wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<wbr><wbr> &lt;/transactionManager&gt;</wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<wbr><wbr> &lt;sqlMap resource="sqlmap/map/User.xml" /&gt;</wbr></wbr>

</sqlMapConfig>

<wbr></wbr>

-----------------------------------------------------------------------------------------------------------

<wbr></wbr>

<wbr></wbr>

user.xml

<wbr></wbr>

<wbr></wbr>

-----------------------------------------------------------------------------------------------------------

<wbr></wbr>

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE sqlMap

<wbr></wbr>

PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"

<wbr></wbr>

<wbr></wbr>

"http://www.ibatis.com/dtd/sql-map-2.dtd">

<wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<sqlMap namespace="User">

<wbr></wbr>

<wbr><wbr><wbr> &lt;select id="getUser" parameterClass="java.lang.Integer"</wbr></wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr> resultClass="cjs.User"&gt;</wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr> SELECT * FROM user_info WHERE uid=#uid#</wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr> &lt;/select&gt;</wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<wbr><wbr><wbr> &lt;select id="getAllUser" resultClass="cjs.User"&gt;</wbr></wbr></wbr>

<wbr></wbr>

<wbr><wbr><wbr> select</wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> *from user_info</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<wbr><wbr><wbr> wherename = #value#</wbr></wbr></wbr>

<wbr></wbr>

</select>

<wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<insertid="insertUser" parameterClass="cjs.User">

<wbr></wbr>

<wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr> INSERTINTO</wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> user_info(name, sex, age, addr,zipcode)</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr> VALUES (#name#, #sex#, #age#,#addr#, #zipcode#)</wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr> &lt;/insert&gt;</wbr></wbr>

</sqlMap>

-----------------------------------------------------------------------------------------------------

<wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<!--[if !supportLists]-->6.<wbr><wbr><wbr><wbr><wbr><wbr> &lt;!--[endif]--&gt;在test上右键,点击导入,将</wbr></wbr></wbr></wbr></wbr></wbr>

commonslogging.jar

<wbr></wbr>

ibatis-common-2.jar

ibatis-dao-2.jar

ibatis-sqlmap-2.jar

<wbr></wbr>

<wbr></wbr>

msbase.jar

<wbr></wbr>

<wbr></wbr>

mssqlserver.jar

<wbr></wbr>

msutil.jar

导入到Lib文件夹中

<wbr></wbr>

<!--[if !supportLists]-->7.<wbr><wbr><wbr><wbr><wbr><wbr> &lt;!--[endif]--&gt;在项目-》属性-》构建路径中添加外部 jar的引用, 也就是上面几个 jar</wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<!--[if !supportLists]-->8.<wbr><wbr><wbr><wbr><wbr><wbr> &lt;!--[endif]--&gt;建立一个数据库 java,并执行下面脚本</wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

Table.sql

<wbr></wbr>

<wbr></wbr>

-----------------------------------------------------------------------------------------------------

<wbr></wbr>

CREATE TABLE user_info

<wbr></wbr>

(

uid int identity(1,1) primary key,

<wbr></wbr>

<wbr></wbr>

name varchar(20),

<wbr></wbr>

sex int,

age int,

addr varchar(50),

<wbr></wbr>

<wbr></wbr>

zipcode varchar(6),

<wbr></wbr>

<wbr></wbr>

);

-----------------------------------------------------------------------------------------------------

<wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<!--[if !supportLists]-->9.<wbr><wbr><wbr><wbr><wbr><wbr> &lt;!--[endif]--&gt;在cjs包下面编写类</wbr></wbr></wbr></wbr></wbr></wbr>

Myapp.java

Operates.java

User.java

<wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<wbr></wbr>

内容如下:

<wbr></wbr>

<wbr></wbr>

Myapp.java

<wbr></wbr>

<wbr></wbr>

-----------------------------------------------------------------------------------------------------------

<wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<wbr></wbr>

package cjs;

<wbr></wbr>

<wbr></wbr>

importjava.io.Reader;

<wbr></wbr>

importcom.ibatis.common.resources.Resources;

importcom.ibatis.sqlmap.client.SqlMapClient;

<wbr></wbr>

importcom.ibatis.sqlmap.client.SqlMapClientBuilder;

<wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<wbr></wbr>

public classMyapp {

<wbr><wbr><wbr> private static final SqlMapClient sqlMap;</wbr></wbr></wbr>

<wbr><wbr><wbr> static {</wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr> try {</wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> String resource ="sqlmap/map/sql-map-config.xml";</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> Reader reader =Resources.getResourceAsReader (resource);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr> }</wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr> catch (Exception e) {</wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> e.printStackTrace();<wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr> throw new RuntimeException ("Errorinitializing MyApp class. Cause:"+e);</wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr> }</wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

<wbr><wbr><wbr> }</wbr></wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<wbr><wbr><wbr> public static SqlMapClientgetSqlMapIns<wbr>tance () {</wbr></wbr></wbr></wbr>

<wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr> return sqlMap;</wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr> }</wbr></wbr></wbr>




一、ibatis教程之ibatis介绍:
ibatis是什么呢?相对于hibernate和apache ojb等“一站式”orm解决方案而言,ibatis是一种“半自动化”的orm实现。


这个框架将让你能够更好的在java应用中设计和实现实体层。这个框架有两个主要的组成部分,一个是sql maps,另一个是data access objects。另外还包括一些可能很有用的工具。
sql maps:
sql maps是这个框架中最激动人心的部分,它是整个ibatis database layer的核心价值所在。通过使用sql maps你可以显著的节约数据库操作的代码量。sql maps使用一个简单的xml文件来实现从javabean到sql statements的映射。跟其他的框架或者对象映射工具相比,sql maps最大的优势是简单。它需要学习的东西很少,在连接表或复杂查询时也不需要复杂的scheme(怎么翻complex scheme?),使用sql maps, 你可以自由的使用sql语句。
data access objects (dao)
当我们开发灵活的java应用时,有一个好主意就是通过一个通用api层把实体操作的细节封装起来。data access objects允许你通过一个简单接口的来操作数据,从而隐藏了实现的细节。使用dao,你可以动态配置你的应用程序来访问不同的实体存储机制。如果你有 一个复杂的应用需要用到几个不同的数据库,dao可以让你建立一个一致的api,让系统的其他部分来调用。
utilities
ibatis database layer包含一系列的有用的工具,比如simpledatasource,jdbc datasource 2.0(也包括3.0)的一个轻量级实现。scriptrunner也提供了从单元测试到自动发布的数据库准备工作。
工作流程:
sql maps提供一个简单的框架,通过xml描述来映射javabeans,map implementations甚至原始类型的包装(string,integer等)到jdbc preparedstatement。想法很简单,基本的步骤如下:
1) 提供一个对象作为参数(either a javabean, map or primitive wrapper),the parameter object will be used setting input values in an update statement, or query values in a where clause (etc.).(感觉不译为好,你说呢?)
2) 执行这个映射的statement,这一步是魔术发生的地方。sql maps框架将建立一个preparedstatement实例(instance),使用前面提供的对象的参数,执行statement,然后从resultset中建立一个返回对象。
3) 如果是update,则返回有多少行修改了,如果是查询,则返回一个对象或者对象的集合。跟参数一样,返回对象也可以是一个javabean,map或者一个primitive type wrapper。
二、ibatis教程之配置文件的使用:
sql map的配置文件。这个文件是sql map实现的根配置,这不是本总结所要具体描述的。
配置文件是xml文件,我们用它来配置属性,jdbc datasources 和 sql maps。它给我们一个便利的地方可以集中配置不同的datasource。这个框架支持ibatis simpledatasource, jakarta dbcp (commons),以及其他任何可以通过jndi context来访问的datasource。我们在以后将详细讨论这个问题。现在我们用jakarta dbcp,结构很简单,上面这个例子,它的配置文件如下。
<properties>元素:
这sql map中的<properties>元素支持sql map xml配置文件。配置文件里的元素符合data map规则。
<properties>所应用的文件里的元素必须和<datasource>里的元素相对应。下面是sqlmapconfigexample.properties文件的内容。里面的元素和<datasource>里的元素相对应。
<settings>元素
maxrequests:在同一时间内能执行sql语句的次数
maxsession:在同一时间内能起作用的session数
maxtransaction:在同一时间内能执行的事务。
statementcachesize:缓冲区的大小
三、ibatis教程之操作方法介绍:
注意:本总结适合有使用开发ibatis基础的人员参考。由于本人的能力有限,不足之处请大家指出。
1. statement支持元素及支持的属性:
1.1 id
id属性是必须的,它表示这个语句的名称,它在整个<sqlmap>元素内唯一的。在代码通过id来引用相关语句。
1.2 parametermap
parametermap属性定义了一个有序的值列表,分别有序的对应了标准参数化的sql语句中的?占位符。


1.3 parameterclass
在没有指明parametermap属性的情况下,你可以指定parameterclass属性方法来替代parametermap属性。parameterclass属性的值可以使用类型的别名或者类型(类)全称
1.4 resultmap
resultmap可以让你控制你如何让数据从查询结果(resultmap)中提取出来存入java对象中。并且可以定义如何将字段映射到java bean的属性里。如下图:
1.5 resultclass
在resultmap属性没有指定的情况下,可以采用resultclass方式,resultclass的属性值可采用类型别名或者类型(class)全称的方式。指定的类将根据数据库的元数据自动的映射到查询结果的字段值中。
2. parametermap元素属性
2.1 id
id属性是必须的,它提供了<parametermap>对元素data map里的唯一表示符
2.2 class
class属性是可选的,class属性必须是javabean或map实列,class属
性虽是可选的,但推荐大家指定,class属性 可以用来验证传入的参数的合法性及优化查询
3. 查询语句
3.1 屏蔽特殊符 <![cdata[ ]]>
3.2 语句导入 <include>,可以是语句优化
使用<include>方法,上面的语句可以写成:
4.自增长方法:<selectkey resultclass=”int”>,不管<selectkey resultclass=”int”>处于该语句的什么部位,都先执行此自增长方法。注意:mysql和oracle的方法不一样。
5. <insert>方法:
insert方法使用parametermap属性,字段名要和<parametermap>方法里的元素一一对应
6. <resultclass>属性:
使用resultclass方法,类person里必须id,firstname,lastname,birthdate,werghtkilograms,heightmeters这些属性。
7. 使用xmlresultname:xml映射文件
8. 使用<parametermap>方法:用来设置元素的属性,其中nullvalue表示缺省值
9. 如果传入的参数只有一个,用#value#来替代传入的参数名。如果还传来的是字段名,则ibatis不支持
10. 判断传入的参数是否存在:isnotnull,判断传入的参数值是否大于设定的值:isgreaterthan
11. 判断传入的参数是否为空:isempty和isnotemply
12. 如果进行模糊查询,使用like方法
那么ibatis教程的入门部分就向你介绍到这里,希望上述的介绍使你对ibatis有了一定的认识。
本贴来自天极网群乐社区--file:///F:/Data/Ibatis/HT-Data/ibatis/iBATIS教程之入门浅析_%20Java.mht


你可能感兴趣的:(ibatis)