`
蛋呢823
  • 浏览: 73176 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

iBATIS 初探

    博客分类:
  • SSH
阅读更多

 

首先声明一下, 我使用的 iBATIS 版本是2.3.2.715 .

 

之所以把这个放在最前面... 是因为这两天参考网上文章, 还有文档教程时, 由于忽略版本问题, 吃了不少亏. 

之前, iBATIS的官网一直进不去, 都是到网上乱找的文档.下载来参考, 或者是看别人的博客. 照着敲代码练习, 

一边敲着, 就一边郁闷着...  怎么照上面打的...  还是报错呢... 

都是版本惹的祸... 还有自己瞎眼没有认真看...  才白白浪费了 一个晚上+一个上午 的时间查错...

同时也对iBATIS表示汗颜... 怎么第一版. 第二版. 还有新出的第三版, 里面语法格式差这么多呢???

 

OK, 正题>>>

 

概念:

 

iBATIS , 又是一个O/R Mapping的解决方案(例如 hibernate的ORM 也是解决方案之一.)

网上很多人便将其称为ORM , 但是用过的人, 应该都会觉得并不恰当.

与其称之为一个OR Mapping , 倒不如叫它SQL Mapping...

 

iBATIS 的特点是小巧, 简单. 但是要求需要熟悉SQL , 不像hibernate那样, 可以让你一句sql 都不用写

同时, 我觉得要写挺多的配置文件的. 可能会比较繁琐.

 

sample

 

还是拿最简单的 User 类来测试. User.java

 

public class User {

	private int id;
	private String username;
	private String userpwd;
	private String userdesc;

        //Sets and Gets...
}
 

 

接下来... 马上看看... dao里面的一个方法有多简单~~ UserDao.java

 

 

public static List getAllUsers() throws SQLException {
                
               SqlMapClient sqlMap = Utils.getSqlmap();
		try {
			List li = sqlMap.queryForList("getAllUsers");
			
		} catch (SQLException e) {
				e.printStackTrace();
		}
		return li;
}
 

 

 

是的, dao里面的一个方法只需要这么几句话. 

看看怎么实现的吧...

 

首先, 我们需要一个跟 User 类对应的 配置文件 User.xml(名字相同并不是硬性规定, 只是方便管理)

 

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
   "http://ibatis.apache.org/dtd/sql-map-2.dtd">

<sqlMap namespace="User">

        <typeAlias alias="user" type="pojo.User"/>

	<select id="getAllUsers" resultClass="user">
		select * from user order by id; 
	</select>

</sqlMap>

 

接下来, 需要一个另一个配置文件, 将User.xml 加入 其中, 同时还要在里面配置数据源---- 即数据库的连接等等...   SqlMapConfig.xml 

 

<?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>
	
	<properties resource="sqlmap.properties"/>
		
	<transactionManager type="JDBC">
		<dataSource type="SIMPLE">    
			<property name="JDBC.Driver" value="${jdbc.driverClassName}" />
			<property name="JDBC.ConnectionURL" value="${jdbc.url}" />
			<property name="JDBC.Username" value="${jdbc.username}" />
			<property name="JDBC.Password" value="${jdbc.password}" />
		</dataSource>
	</transactionManager>
	<sqlMap resource="sql/User.xml" />

</sqlMapConfig>

 

 

在这里, 我们把数据库的相关参数保存在了另一个文件中, sqlmap.properties

 

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/myblog
jdbc.username=root
jdbc.password=netjava

 

 这样做的好处, 相信大家也明白..  下次我们再写一个项目的时候, 只需要把这个文件copy 过去, 改掉其中的数据库连接就ok啦 ,  也算是资源的充分利用吧..

 

至此, 所有的配置文件 都已经上场, 当然上面写的都是最简单的测试, 看起来比较没有那么繁琐, 实际应用时候, 可能最麻烦的地方就是在 配置文件的 sqlmap 的编写... 

前面 UserDao.java 的方法中, 有这么一句 

 

SqlMapClient sqlMap = Utils.getSqlmap();

 

 Utils 类 就是我们抽取其中的初始化的代码, 单独写成一个类, 当然还是方便重用哈.同时采用的是单实例模式, 相当环保.

  Utils.java

 

public class Utils{
	
	private static SqlMapClient sqlMapper; 
    public static synchronized SqlMapClient getSqlmap() 
    {   
          if(sqlMapper==null) 
          { 
              try { 
                  Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml"); 
                  sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader); 
                  reader.close(); 
                } catch (IOException e) { 
                    e.printStackTrace(); 
                } 
          } 
            return sqlMapper; 
    } 
}

 

 

好了,  所有的相关文件都已经上场..  当然, 加上 iBATIS的 jar包是前提 , 还是提醒下, 要注意版本问题...

项目的结构如下图所示:


 

最后整理一下思路吧!


UserDao 是怎样操作数据库的???

首先 , Utils 通过SqlMapConfig.xml里面的配置, 连接到数据库, 取得SqlMap , 同时User.xml 将Sql查询映射成java中可以调用的bean, 通过SqlMap 调用这些bean 就是在执行想对应的sql语句...

 

That's all.  附上源码.

 

 

 

 

 

 

  • 大小: 14.1 KB
  • 大小: 10.4 KB
分享到:
评论
29 楼 爪哇岛岛主 2011-04-21  
哎,楼主,绝对的新手啊,鼓励一下!
28 楼 蛋呢823 2011-04-20  
king130520 写道
苍山洱海 写道
这个应该省去了hibernate对table和bean之间的映射效率问题,确实会有一个数量级的提升。

有持久层的映射的。还得看看了你。

able和bean之间的映射   不是指 持久层的映射 吗?  菜鸟求解 
27 楼 akunamotata 2011-04-20  
个人认为既然用不好hibernate,那不如就ibatis
26 楼 chaojixiaokucha 2011-04-20  
恩 这个看起来简单多了
25 楼 king130520 2011-02-25  
苍山洱海 写道
这个应该省去了hibernate对table和bean之间的映射效率问题,确实会有一个数量级的提升。

有持久层的映射的。还得看看了你。
24 楼 纠结的java 2011-01-11  
yidao620c 写道
蛋呢823 写道
javafound 写道
引用
可以让你一句sql 都不用写?
sql才是王道吧.


呵呵, 我比较不喜欢写sql 语句... 对于sql语句不是很熟练 
一些简单的功能, 用hibernate的ORM 都基本能实现吧.

ibatis适合sql高手。自由写出高效率的sql文。

我见过高手用hibernate,他对hibernate优化有很深的造诣,确实已经一句sql不写了,用的是HQL,但我想普罗大众的程序员,还没有办法做到一句SQL不写。
23 楼 纠结的java 2011-01-11  
比如UserDao那个东西我们可以使用一个IDao来操作不用没个表一个Dao
这个怎么实现呢?能否点拨我一下。
22 楼 cml244 2011-01-09  
在学校的时候学的是hibernate,但进了公司用的是ibatis,个人觉得ibatis比较好用,习惯写SQL语句
21 楼 yizhilong28 2010-12-23  
spring3.0.3+ibatis2.3.4.7相当的蛋疼。。。
20 楼 蛋呢823 2010-12-22  
kfc_davy 写道
好像现在改名了,不再叫ibatis了吧?

现在改成 MyBatis了.
http://ibatis.apache.org/   这个是在Apache上面的公告.
http://www.mybatis.org/     这个是新的官网
19 楼 superwwt 2010-12-22  
xb_myth 写道
ibatis嘛成也SQL 败也SQL 看你怎么想了
如果公司需要专门的DBA去管理SQL当然ibatis是最好的选择了
顺便提一句,那个开源项目很不错的说

DBA离职了/休假了别人维护起来岂不是很痛苦?
18 楼 dreamvalley 2010-12-22  
看你怎么像talkweb的?
17 楼 kfc_davy 2010-12-22  
gordonkkk 写道
hibernate也可以这么用。NamingSQL就是用来干这个的。至于动态条件拼装,可以用criteria。所以我不觉得iBATIS好在哪。


ibatis学习成本低
16 楼 gordonkkk 2010-12-22  
hibernate也可以这么用。NamingSQL就是用来干这个的。至于动态条件拼装,可以用criteria。所以我不觉得iBATIS好在哪。
15 楼 kfc_davy 2010-12-22  
好像现在改名了,不再叫ibatis了吧?
14 楼 nplw668 2010-12-22  
我喜欢iBatis,会sql就可以了。
13 楼 finallygo 2010-12-22  
marmot 写道
javafound 写道
引用
可以让你一句sql 都不用写?
sql才是王道吧.

同意

+1
尤其是看到别人所有的逻辑基本都用sql来实现之后...
12 楼 yidao620c 2010-12-22  
蛋呢823 写道
javafound 写道
引用
可以让你一句sql 都不用写?
sql才是王道吧.


呵呵, 我比较不喜欢写sql 语句... 对于sql语句不是很熟练 
一些简单的功能, 用hibernate的ORM 都基本能实现吧.

ibatis适合sql高手。自由写出高效率的sql文。
11 楼 qq240996777 2010-12-22  
SQL才是王道,复杂的逻辑性强的SQL还得自己去写!
  工具就是工具,复杂点的东西还是得靠自己动手,不然我们就没饭吃了 呵呵
10 楼 xb_myth 2010-12-22  
ibatis嘛成也SQL 败也SQL 看你怎么想了
如果公司需要专门的DBA去管理SQL当然ibatis是最好的选择了
顺便提一句,那个开源项目很不错的说

相关推荐

    ibatis总结 ibatis ibatis ibatis ibatis

    Ibatis 是一款轻量级的Java持久层框架,它允许开发者将SQL语句与Java代码分离,从而使得数据库访问更加灵活、易于维护。本篇文章将深入探讨Ibatis的核心概念、最佳实践以及与其他框架如Struts和Spring的整合。 1. ...

    ibatis demo,ibatis例子,ibatis示例

    Ibatis,全称为MyBatis,是一个优秀的Java持久层框架,它主要负责SQL映射,使得开发者能够将SQL语句与Java代码分离,从而更好地管理数据库操作。Ibatis的出现,解决了传统JDBC中手动编写SQL和结果集映射的繁琐工作,...

    ibatis源码,ibatis源码 ibatis源码 ibatis源码

    《深入解析iBatis源码》 iBatis,一个优秀的Java持久层框架,以其轻量级、灵活的特性在众多ORM(Object-Relational Mapping)框架中独树一帜。iBatis的核心在于它的SQL映射机制,它将数据库操作与业务逻辑解耦,...

    iBATIS-DAO-2.3.4.726.rar_com.ibatis.dao_iBATIS dao 2_iBatis DAO_

    iBATIS DAO是Java开发中的一个持久层框架,它提供了数据访问对象(DAO)的实现,使得数据库操作更加简单和灵活。在这个2.3.4.726版本的源码中,我们可以深入理解iBATIS DAO的工作原理,并通过添加注释来帮助我们更好...

    Ibatis入门例子,Ibatis教程

    Ibatis,全称为MyBatis,是一个优秀的Java持久层框架,它主要负责SQL映射,使得开发者能够将注意力集中在编写SQL语句上,而无需关注JDBC代码的编写。Ibatis消除了几乎所有的JDBC代码和手动设置参数以及获取结果集的...

    ibatis教程,ibatis帮助文档

    iBATIS是一个由Clinton Begin创建,目前由Apache基金会支持的持久化框架,它专注于数据库查询的简化,尤其在JDBC编程方面提供了极大的便利。相对于全自动化ORM解决方案如Hibernate,iBATIS被称为“半自动化”ORM实现...

    ibatis api,ibatis文档,ibatis说明文档

    Ibatis,全称为MyBatis,是一个优秀的Java持久层框架,它主要负责SQL映射,将数据库操作与业务逻辑解耦,使得开发者可以更专注于业务逻辑的实现,而无需关心繁琐的SQL语句编写。本篇文章将深入探讨Ibatis API、文档...

    Ibatis3手册 Ibatis3参考手册

    ### Ibatis3手册知识点概述 Ibatis3作为一款流行的持久层框架,在软件开发领域具有重要的地位。本篇文章基于“Ibatis3手册 Ibatis3参考手册”的标题及描述,深入解析Ibatis3的核心概念、架构特点以及如何进行实际...

    ibatis应对批量update

    ### ibatis应对批量update 在处理大量数据更新时,传统的for循环方式往往会导致效率低下。这是因为每一次循环都需要执行一次数据库连接操作,对于批量更新来说,这样的处理方式显然不够高效。为了解决这个问题,...

    Spring与iBATIS的集成

    Spring与iBATIS的集成 iBATIS似乎已远离众说纷纭的OR框架之列,通常人们对非常流行的Hibernate情有独钟。但正如Spring A Developer's Notebook作者Bruce Tate 和Justin Gehtland所说的那样,与其他的OR框架相比...

    ibatis api 帮助文档+IBATIS 开发文档

    **IBATIS API 帮助文档与IBATIS开发文档详解** IBATIS,一个由iBATIS公司开发的开源持久层框架,是Java世界中广泛使用的数据访问接口(DAO)工具。它允许开发者将SQL语句直接写在XML配置文件中,实现了SQL与Java...

    ibatis2指南及ibatis包

    ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南

    iBatis开发指南和一个iBatis实例

    iBatis是一个轻量级的Java持久层框架,它提供了SQL映射框架,将SQL语句与Java代码分离,使得数据库访问更为灵活和可控。在本压缩包中,你将找到一系列关于iBatis的学习资源,包括PDF文档、实例代码等,这些都是深入...

    Ibatis 入门经典 实例

    《Ibatis 入门经典 实例》 Ibatis 是一款著名的轻量级 Java 持久层框架,它提供了一种映射 SQL 和 Java 对象的简单方式,从而减轻了开发人员在数据库操作中的工作负担。这篇实例教程将带你深入理解 Ibatis 的核心...

    Spring+ibatis 保留ibatis事务的配置

    根据提供的文件信息,本文将详细解析如何在Spring与ibatis框架整合时,通过特定配置来保留ibatis事务处理机制,并实现对事务的自定义控制。文章将围绕标题、描述及部分代码片段展开讨论。 ### Spring与ibatis整合...

    iBATIS实战.pdf

    《iBATIS实战》是讲述iBATIS框架的权威著作。书中既详实地介绍了iBATIS的设计理念和基础知识,也讨论了动态SQL、高速缓存、DAD框架等高级主题,还讲解了iBATIS在实际开发中的应用。《iBATIS实战》的最后给出了一个...

    Ibatis

    **Ibatis 指南** Ibatis 是一个优秀的开源持久层框架,它允许开发者将 SQL 查询与 Java 代码分离,从而避免了传统的 JDBC 编程中的大量模板代码。作为一个轻量级的框架,Ibatis 提供了灵活的映射机制,使得 XML 或...

    C# IBatis IBatis基础 完整项目

    【标题】:“C# IBatis IBatis基础 完整项目” 【描述】中提到的是一个基于C#的IBatis学习项目,适用于初学者。IBatis是一个流行的数据访问层框架,它允许开发者将SQL语句与应用程序代码分离,提高了代码的可维护性...

    ibatis教程 输入参数详解

    标题:ibatis教程 输入参数详解 描述:ibatis教程 输入参数详解 ibatis快速入门 标签:ibatis list 部分内容:这段部分提供了ibatis用户指南的警告,关于从文档复制代码的问题,以及ibatis的概述、如何开始使用...

    iBATIS2.3.4 jar包及源码

    iBATIS 是一款著名的开源Java持久层框架,它在2005年由Clinton Begin创建,最初命名为Apache MyBatis,后来发展为独立的项目。在本主题中,我们关注的是iBATIS 2.3.4版本的jar包及其源码。 首先,`ibatis-2.3.4.jar...

Global site tag (gtag.js) - Google Analytics