- 浏览: 102265 次
- 性别:
- 来自: 上海
最新评论
-
karistino:
设定的进程数目不同时统计的关键字个数不一样
JAVA多线程读写文件范例 -
sd6292766:
在系统的服务进程中,找到“DCom Server Proces ...
报错com.jacob.com.ComFailException: Can't co-create object时, 另外的解决途径 -
zyh3380433:
怎么解决?????
报错com.jacob.com.ComFailException: Can't co-create object时, 另外的解决途径 -
sd6292766:
ribavnu 写道线程锁。求楼主继续霸气啊,来个把钱存到数据 ...
JAVA多线程的一个复习例子(取款同步)(希望大家不要看源代码,看题目自己写出实现) -
ribavnu:
线程锁。求楼主继续霸气啊,来个把钱存到数据库的,然后数据库实现 ...
JAVA多线程的一个复习例子(取款同步)(希望大家不要看源代码,看题目自己写出实现)
IBATIS是优秀的半ORM框架,原先一直在用HIBERNATE,不过对HIBERNATE过于强大但问题多多的ORM方案十分反感。遂翻阅了一下IBATIS。自己写了一个例子,不用SPRING+STRUTS。
首先去ibatis.apache.org下载最新的2.X的ibatis包,我用的是JAR包,没有用ibator插件调试安装。本地环境,ORACLE数据库,JDK1.6。
ibatis的核心是sqlmap框架。
新建一个JAVA工程即可,导入ibatisJAR包。我的是ibatis2.3.4-768.jar。新建一个XML文件,sql-map-config.xml,这个文件用于配置配置JDBC事务管理。
sql-map-config.xml
我们在表里有一张数据表 :
create table TAXPAYER
(
ID NUMBER(10),
NSR_NAME VARCHAR2(256),
ORG_ID NUMBER,
NSRSBH VARCHAR2(20),
GXSJ VARCHAR2(20)
)
数据请自行录入。
taxpayer对应的JAVABEAN:
接下来,我们新建一个taxpayer.xml,所有对taxpayer表的SQL操作,全部写在这个文件里,
taxpayer.xml:
这里写了一个需要有3个条件的查询,并且把条件适当复杂一下,用个LIKE条件。注意,这个SQL配置里面,我们用到了3个参数。下面我们要在调用该SQL的时候,分别给这3个参数赋值。阅读了一下ibatis的中文手册,我们可以采用MAP的方式赋值。下面开始写测试类,需要调用ibatis库下的sqlMap框架类来实现:
赋值时候,Integer,String, Character等常用的对象类型写到MAP里面去即可。不过Ibatis对Long的支持并不太好。本人是初学,望有知情者告知一下Long的支持情况。
新增,修改,删除操作请自行完成。
使用后感想,个人用下来,ibatis等于把业务中的代码部分和数据库操作部分完好地分离开来。使开发过程中的层次清晰。避免了在JAVA里出现SQL语句这样维护极其麻烦的处理方式。同时很好的支持存储过程,动态拼SQL等一些在实际应用中经常碰到的情况。
缺点:由于是半orm的东西,对于一张表的操作,定义非常繁琐,JAVABEAN和IBATIS里SQL的配置文件其实是没有任何关系。导致的问题是,如果客户在表里新增一个字段,并且要把这个字段作为查询字段,我们不光要改JAVA文件,添加属性,同时还要去改IBATIS的相应SQL文件,相应的查询、新增、修改,只要涉及到的,全部都要统一地做修改。这对开发人员来说,工作量极其繁琐,而且很容易报错。HIBERNATE不存在这个问题,但是HIBERNATE的性能实在有待商榷。
首先去ibatis.apache.org下载最新的2.X的ibatis包,我用的是JAR包,没有用ibator插件调试安装。本地环境,ORACLE数据库,JDK1.6。
ibatis的核心是sqlmap框架。
新建一个JAVA工程即可,导入ibatisJAR包。我的是ibatis2.3.4-768.jar。新建一个XML文件,sql-map-config.xml,这个文件用于配置配置JDBC事务管理。
sql-map-config.xml
<?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" <!--全局性地启用或禁用SqlMapClient的所有缓存model。调试程序时使用--> enhancementEnabled="true" <!--全局性地启用或禁用运行时字节码增强,以优化访问Java Bean属性的性能,同时优化延迟加载的性能。--> lazyLoadingEnabled="true" <!--全局性地启用或禁用SqlMapClient的所有延迟加载。调试程序时使用。--> maxRequests="32" <!--同时执行SQL语句的最大线程数--> maxSessions="10" <!--同一时间内活动的最大session数--> maxTransactions="5" <!--同一时间内允许的最大SqlMapClient.startTransaction()的线程数--> useStatementNamespaces="false" /> <transactionManager type="JDBC" > <!--JDBC事务管理器--> <dataSource type="SIMPLE"> <propertyname="JDBC.Driver" value="oracle.jdbc.driver.OracleDriver"/> <property name="JDBC.ConnectionURL" value="jdbc:oracle:thin:@192.168.0.16:1521:orcl"/> <property name="JDBC.Username" value="procczg"/> <property name="JDBC.Password" value="procczg"/> </dataSource> </transactionManager> <sqlMap resource="ibatis/Taxpayer.xml" /> <!--这是引用所有的SQL配置文件,ibatis在此处声明要调用到的SQL文件--> </sqlMapConfig>
我们在表里有一张数据表 :
create table TAXPAYER
(
ID NUMBER(10),
NSR_NAME VARCHAR2(256),
ORG_ID NUMBER,
NSRSBH VARCHAR2(20),
GXSJ VARCHAR2(20)
)
数据请自行录入。
taxpayer对应的JAVABEAN:
public class Taxpayer { /** 业务字段 */ private int id; private String nsr_name; private String org_id; private String nsrsbh; private String gxsj; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getNsr_name() { return nsr_name; } public void setNsr_name(String nsr_name) { this.nsr_name = nsr_name; } public String getOrg_id() { return org_id; } public void setOrg_id(String org_id) { this.org_id = org_id; } public String getNsrsbh() { return nsrsbh; } public void setNsrsbh(String nsrsbh) { this.nsrsbh = nsrsbh; } public String getGxsj() { return gxsj; } public void setGxsj(String gxsj) { this.gxsj = gxsj; } }
接下来,我们新建一个taxpayer.xml,所有对taxpayer表的SQL操作,全部写在这个文件里,
taxpayer.xml:
<?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="Taxpayer"> <statement id="getTaxpayer" resultClass="ibatis.Taxpayer"> select * from taxpayer where id = #id# and org_id = #org# and nsr_name like '%$nsrmc$%' </statement> </sqlMap>
这里写了一个需要有3个条件的查询,并且把条件适当复杂一下,用个LIKE条件。注意,这个SQL配置里面,我们用到了3个参数。下面我们要在调用该SQL的时候,分别给这3个参数赋值。阅读了一下ibatis的中文手册,我们可以采用MAP的方式赋值。下面开始写测试类,需要调用ibatis库下的sqlMap框架类来实现:
import java.io.IOException; import java.io.Reader; import java.sql.SQLException; import java.util.HashMap; import java.util.List; import java.util.Map; import com.ibatis.common.resources.Resources; import com.ibatis.sqlmap.client.SqlMapClient; import com.ibatis.sqlmap.client.SqlMapClientBuilder; public class IbatisTest { /** * @param args * author by 刘峰 * 2010-6-22下午04:47:21 */ public static void main(String[] args) { // TODO Auto-generated method stub SqlMapClient s = null; try { Reader reader = Resources.getResourceAsReader("ibatis/sql-map-config.xml"); s = SqlMapClientBuilder.buildSqlMapClient(reader); Map mParameter = new HashMap(); mParameter.put("id", new Integer(10533)); mParameter.put("org", new Integer(16)); mParameter.put("nsrmc", "纳税人名称"); Taxpayer t = (Taxpayer)s.queryForObject("getTaxpayer", mParameter); System.out.println(t.getId()); System.out.println(t.getNsr_name()); System.out.println(t.getNsrsbh()); System.out.println(t.getOrg_id()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
赋值时候,Integer,String, Character等常用的对象类型写到MAP里面去即可。不过Ibatis对Long的支持并不太好。本人是初学,望有知情者告知一下Long的支持情况。
新增,修改,删除操作请自行完成。
使用后感想,个人用下来,ibatis等于把业务中的代码部分和数据库操作部分完好地分离开来。使开发过程中的层次清晰。避免了在JAVA里出现SQL语句这样维护极其麻烦的处理方式。同时很好的支持存储过程,动态拼SQL等一些在实际应用中经常碰到的情况。
缺点:由于是半orm的东西,对于一张表的操作,定义非常繁琐,JAVABEAN和IBATIS里SQL的配置文件其实是没有任何关系。导致的问题是,如果客户在表里新增一个字段,并且要把这个字段作为查询字段,我们不光要改JAVA文件,添加属性,同时还要去改IBATIS的相应SQL文件,相应的查询、新增、修改,只要涉及到的,全部都要统一地做修改。这对开发人员来说,工作量极其繁琐,而且很容易报错。HIBERNATE不存在这个问题,但是HIBERNATE的性能实在有待商榷。
发表评论
-
转载:常见数据库字段类型与java.sql.Types的对应
2013-08-08 15:34 1765今天工作时候,刚好碰到类型转换错误的现象。找到一篇这样的列表文 ... -
maven+eclipse3.7+web工程开发+tomcat7.0搭环境的一些心得
2013-02-20 19:50 3777开头第一句话,过程真的很累,现在还存在一些细节问题。因 ... -
eclipse下使用ORACLE11GR1运行项目的一个要点记录
2013-02-20 00:06 1579参考资料:http://www.cnblogs.com ... -
报错com.jacob.com.ComFailException: Can't co-create object时, 另外的解决途径
2012-12-12 17:08 20736对于JAVA在调用打印控件jacob时,会出现这样的报错提示。 ... -
转载:maven Nexus入门指南
2012-12-02 23:38 1113因本人电脑故障,需要重启,特地用博客记下地址,方便下次学习 ... -
JAVA多线程读写文件范例
2012-11-22 01:04 5508在写之前先声明,本文是基于之前在博客园网站上检索到的一 ... -
转载:JAVA开发人员成长路线
2012-11-18 17:24 1367转载地址:http://samter.it ... -
转载: 从JAVA多线程理解到集群分布式和网络设计的浅析
2012-10-25 23:58 1563转载地址:http://blog.csdn.net/tujiy ... -
mysql一个怪现象,百思不得其解
2012-10-03 17:42 856今天在JBOSS上配置JMS时,需要配置MYSQL 的 ... -
今天安装了apache服务器
2012-09-28 15:23 937今天因为我机器搭环境需要,安装了APACHE服务器 ... -
spring rmi的记录,转载的,吃完饭等下自己要用
2012-09-22 13:33 997http://blog.csdn.net/j2ee_dev/a ... -
Spring的JdbcTemplate做个简单记录,方便记忆
2012-09-16 17:50 1015调用jdbcTemplate的UPDATE方法时,返回 ... -
转载:软件工程术语英语表达
2012-07-20 13:51 1248这里记录一下,常用的建模工具都是英文版的,这样方便校对 ... -
LOG4J工作中的一些个人收获
2012-06-21 23:38 1488继上一篇LOG4J一些工作中的学习总结之后,今天我在程序调试过 ... -
LOG4J一些工作中的学习总结
2012-06-20 12:19 1166首先声明:我这里使用的是apache的log4j日志框 ... -
转载:oschina网站的架构
2012-06-13 13:20 1479OsChina.NET 这个域名是在2008年8月16日申请的 ... -
转载:JFREECHART初级教程
2012-05-20 00:21 921JFreeChart是一组功能强大、灵活易用的Java绘图AP ... -
JS用open方法传中文乱码的解决方案,经测试,有效
2010-11-30 17:11 1286首先,在前台调用open打开对话框的位置,对要传值的中 ... -
JDK1.6存在一个方法错误,大家一起来交流下
2010-09-03 15:49 924今天在公司做项目时,用到这么一个功能:需要批量执行一些 ... -
JAVA多线程的探讨(收藏)
2010-08-07 22:30 981探索并发编程(一)------操作系统篇 探索并发编程(二) ...
相关推荐
通过这个例子,学习者可以理解如何配置Ibatis,编写Mapper接口和XML文件,以及如何在实际应用中使用它们。随着对Ibatis的深入学习,可以进一步了解动态SQL、结果映射、缓存机制等高级特性,以实现更复杂的数据访问...
如何使用这个例子: 1、下载后解压缩 2、导入到Eclipse中 3、运行test/Test.java,看看结果 4、删除org及其下的三个目录及文件 5、在ibator/config/ibatorConfig.xml中的右键菜单,选择Generate iBATIS Artifacts 5...
Ibatis,全称为MyBatis,是一个优秀的Java持久层框架,它主要负责SQL映射,使得开发者能够将SQL语句与Java代码分离,从而更好地管理数据库操作。Ibatis的出现,解决了传统JDBC中手动编写SQL和结果集映射的繁琐工作,...
本程序是一个简单ibatis(版本ibatis2.3.4.726)例子, 里面包含单表增,删,改,查。 SimpleExample.java 包含程序与测试. 我用到是sqlServer(其他的数据库,只需更改sqlMapConfig.xml里面的配置就行了)数据库, ...
【标题】:“ibatis的一个小例子” 在Java Web开发领域,Ibatis(现已被更名为MyBatis)是一款广泛使用的...同时,`.classpath`和`.project`文件揭示了项目是如何组织和构建的,这对于理解和复现这个例子至关重要。
iBatis是一个O/R Mapping解决方案, iBatis最大的特点就是小巧,上手很快。如果你不需要太多复杂的功能,iBatis是能满足你的要求又足够灵活的最简单的解决方案。下面我们看一个最简单的入门例子,是《ibatis 开发...
这个"spring+ibatis+ehcache整合例子"是一个完整的示例项目,展示了如何将这三个框架无缝集成到一个基于MySQL数据库的应用中。下面将详细介绍这三个框架及其整合的关键点。 **Spring框架** Spring是一个全面的企业...
通过学习这个例子,你可以了解到如何配置iBatis,如何编写SQL映射文件,以及如何在Java代码中使用SqlSession和Mapper接口来执行SQL语句。这对于理解和掌握iBatis框架以及数据库操作具有实际指导意义。
在本教程中,我们将通过一个简单的Ibatis入门例子,带你逐步了解并掌握这个强大的框架。 首先,我们需要在项目中引入Ibatis的依赖。通常,我们会在Maven的pom.xml文件中添加以下依赖: ```xml <groupId>org....
在实际使用中,我们需要创建一个iBATIS的配置文件(如:SqlMapConfig.xml),在这个文件中定义数据源、事务管理器等基本信息。接着,我们需要为每个数据库操作创建一个独立的XML文件(例如:UserMapper.xml),在这...
这个"ibatis简单例子"旨在帮助初学者理解Ibatis的基本用法,包括配置文件的设置、SQL映射文件的编写以及如何在Java代码中调用这些映射的SQL。通过实践这两个小例子,可以深入理解Ibatis如何将数据库操作与业务逻辑...
iBatis是一个轻量级的Java持久层框架,它提供了SQL映射框架,将SQL语句与Java代码分离,使得开发者能够更灵活地控制数据库操作。...通过学习和理解这个例子,开发者可以更好地掌握iBatis的工作原理和使用方式。
举个例子,假设我们有一个用户ID的列表,我们需要查询这些ID对应的所有用户信息,可以这样配置iBatis的映射文件: ```xml SELECT * FROM users WHERE id IN (" property="ids" open="," close=")"> #{ids[index...
**Ibatis简介** Ibatis,又称为MyBatis,是一个优秀的持久层框架,它支持定制化SQL、存储过程以及...通过学习和实践这个简单的CRUD例子,开发者可以快速掌握Ibatis的基本操作,并将其应用到实际项目中,提升开发效率。
标题 "ibatis 2 and spring 例子" 指向的是一个...这个例子对于初学者来说非常有价值,因为它展示了如何将两个流行框架结合起来,提升开发效率。如果你对iBatis 2与Spring的集成感兴趣,建议查阅该博文以获取更多信息。
通过这个详细的Ibatis案例,初学者可以了解并掌握如何在实际项目中运用Ibatis,从配置到实践,一步步体验数据库操作的便捷性。同时,通过阅读源码,还能深入理解Ibatis的工作原理,提升自己的编程技能。
这个例子是一个很好的学习资源,可以帮助开发者理解如何在实际项目中整合Ajax和iBatis,提升Web应用的性能和用户体验。通过分析这些文件,我们可以深入了解两者的配合使用,以及在具体场景下的实现细节。
这个"iBatis 第一个程序"的学习路径将帮助初学者快速掌握 iBatis 的基本用法,为后续更复杂的应用场景打下基础。通过阅读提供的博客链接,读者可以深入理解 iBatis 的核心概念并动手实践,从而更好地掌握这个强大的...
Ibatis,作为一个轻量级的持久层框架,以其灵活、易用的特点在Java开发领域广泛应用。本教程旨在通过一个完整的实例——"ibatistest2"项目,帮助开发者深入理解和掌握Ibatis的核心功能与实践技巧。 首先,Ibatis的...
Ibatis,全称为MyBatis,是一个优秀的Java持久层框架,它主要负责SQL映射,使得开发者能够将注意力集中在编写...在提供的压缩包文件"IbatisTest"中,可能包含了一个简单的Ibatis示例项目,可以用来动手实践,加深理解。