Ibatis初学的一个例子,新手可以尽快上手。
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:
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 stubSqlMapClient 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 blocke.printStackTrace();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
赋值时候,Integer,String, Character等常用的对象类型写到MAP里面去即可。不过Ibatis对Long的支持并不太好。本人是初学,望有知情者告知一下Long的支持情况。
新增,修改,删除操作请自行完成。
使用后感想,个人用下来,ibatis等于把业务中的代码部分和数据库操作部分完好地分离开来。使开发过程中的层次清晰。避免了在JAVA里出现SQL语句这样维护极其麻烦的处理方式。同时很好的支持存储过程,动态拼SQL等一些在实际应用中经常碰到的情况。
缺点:由于是半orm的东西,对于一张表的操作,定义非常繁琐,JAVABEAN和IBATIS里SQL的配置文件其实是没有任何关系。导致的问题是,如果客户在表里新增一个字段,并且要把这个字段作为查询字段,我们不光要改JAVA文件,添加属性,同时还要去改IBATIS的相应SQL文件,相应的查询、新增、修改,只要涉及到的,全部都要统一地做修改。这对开发人员来说,工作量极其繁琐,而且很容易报错。HIBERNATE不存在这个问题,但是HIBERNATE的性能实在有待商榷。