ibatis基础教程.doc_第1页
ibatis基础教程.doc_第2页
ibatis基础教程.doc_第3页
ibatis基础教程.doc_第4页
ibatis基础教程.doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ibatis 基础教程相对Hibernate和Apache OJB 等“一站式”ORM解决方案而言,ibatis 是一种“半自动化”的ORM实现。所谓“半自动”,可能理解上有点生涩。纵观目前主流的ORM,无论Hibernate 还是Apache OJB,都对数据库结构提供了较为完整的封装,提供了从POJO 到数据库表的全套映射机制。程序员往往只需定义好了POJO 到数据库表的映射关系,即可通过Hibernate或者OJB 提供的方法完成持久层操作。程序员甚至不需要对SQL 的熟练掌握,Hibernate/OJB 会根据制定的存储逻辑,自动生成对应的SQL 并调用JDBC 接口加以执行。大多数情况下(特别是对新项目,新系统的开发而言),这样的机制无往不利,大有一统天下的势头。但是,在一些特定的环境下,这种一站式的解决方案却未必灵光。 在项目研发过程中,常常遇到以下情况:1 系统的部分或全部数据来自现有数据库,处于安全考虑,只对开发团队提供几条Select SQL(或存储过程)以获取所需数据,具体的表结构不予公开。2 开发规范中要求,所有牵涉到业务逻辑部分的数据库操作,必须在数据库层由存储过程实现(就笔者工作所面向的金融行业而言,工商银行、中国银行、交通银行,都在开发规范中严格指定)。3 系统数据处理量巨大,性能要求极为苛刻,这往往意味着我们必须通过经过高度优化的SQL语句(或存储过程)才能达到系统性能设计指标。面对这样的需求,再次举起Hibernate 大刀,却发现刀锋不再锐利,甚至无法使用,奈何?恍惚之际,只好再摸出JDBC 准备拼死一搏,说得未免有些凄凉,直接使用JDBC进行数据库操作实际上也是不错的选择,只是拖沓的数据库访代码,乏味的字段读取操作令人厌烦。“半自动化”的ibatis,却刚好解决了这个问题。这里的“半自动化”,是相对Hibernate等提供了全面的数据库封装机制的“全自动化”ORM 实现而言,“全自动”ORM 实现了POJO 和数据库表之间的映射,以及SQL 的自动生成和执行。而ibatis 的着力点,则在于POJO 与SQL之间的映射关系。也就是说,ibatis并不会为程序员在运行期自动生成SQL 执行。具体的SQL 需要程序员编写,然后通过映射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定POJO。使用ibatis 提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的Java对象,这一层与通过Hibernate 实现ORM 而言基本一致,而对于具体的数据操作,Hibernate会自动生成SQL 语句,而ibatis 则要求开发者编写具体的SQL 语句。相对Hibernate等“全自动”ORM机制而言,ibatis 以SQL开发的工作量和数据库移植性上的让步,为系统设计提供了更大的自由空间。作为“全自动”ORM 实现的一种有益补充,ibatis 的出现显得别具意义。Ibatis数据库操作实例1.ibatis 实例配置/数据库连接驱动,我这里用的是MySQL数据库 /数据库连接地址,我连接的是test数据库 /数据库名,默认为root/数据库的密码,默认为空/其他一些常用的属性,也可以忽略不设置2 POJO类package com.jackson.pojo.User;public class User implements Serializable private Integer id;/用户IDprivate String name;/用户姓名private Integer sex;/用户性别/* default constructor */public User() public Integer getId() return this.id;public void setId(Integer id) this.id = id;public String getName() return ;public void setName(String name) = name;public Integer getSex() return this.sex;public void setSex(Integer sex) this.sex = sex;3. 映射文件与 Hibernate 不同。因为需要人工编写SQL 代码,ibatis 的映射文件一般采用手动编写(通过Copy/Paste,手工编写映射文件也并没想象中的麻烦)。针对上面POJO 的映射代码如下:/查询用户/更新用户/增加用户INSERT INTO user (name,sex)VALUES (#name#,#sex#)/删除用户delete from userwhere id = #value#4.应用实例package com.jackson.test;import java.io.IOException;import java.io.Reader;import java.sql.SQLException;import mon.resources.Resources;import com.ibatis.sqlmap.client.SqlMapClient;import com.ibatis.sqlmap.client.SqlMapClientBuilder;import com.jackson.pojo.User;public class Test public static SqlMapClient sqlMapper;public static void main(String args) throws SQLException Reader reader; try reader = Resources.getResourceAsReader(com/jackson/sqlmap/SqlMapConfig.xml); sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader); try sqlMapper.startTransaction();/开始事务处理 User user=new User();/创建User对象 user.setId(new Integer(2);/给User对象赋值 user.setName(最爱小乌); user.setSex(new Integer(1);sqlMapper.update(updateUser, user);/更新用户ID为2的用户信息 sqlMmitTransaction();/提交事务 catch (SQLException e) e.printStackTrace(); finally sqlMapper.endTransaction();/关闭事务 catch (IOException e) e.printStackTrace(); finally 总结,上面是一个小小的ibatis的实际例子,但是还是有点不完善的地方,下面是我对这个程序的一点改进 1.项目工程很大的话不可能经常去new 对象 import java.io.IOException;import java.io.Reader;import java.sql.SQLException;import java.util.List;import mon.resources.Resources;import com.ibatis.sqlmap.client.SqlMapClient;import com.ibatis.sqlmap.client.SqlMapClientBuilder;/基类,所有的DAO须继承此方法public class DAO public static SqlMapClient sqlMapper; static try Reader reader = Resources.getResourceAsReader(com/yuqiang/sqlmap/SqlMapConfig.xml); sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader); reader.close(); catch (IOException e) System.out.println(Something bad happened while building the SqlMapClient instance. + e); /传给它一个方法ID和sql语句值可执行此SQL语句 public List getSQLResult (String methodID,String sql) throws SQLException return sqlMapper.queryForList(methodID,sql); 其中,SqlMapClient是ibatis运作的核心,所有操作均通过SqlMapClient实例完成。可以看出,对于应用层而言,程序员面对的是传统意义上的数据对象,而非JDBC中烦杂的ResultSet,这使得上层逻辑开发人员的工作量大大减轻,同时代码更加清晰简洁。数据库操作在映射文件中加以定义,从而将数据存储逻辑从上层逻辑代码中独立出来。而底层数据操作的SQL可配置化,使得我们可以控制最终的数据操作方式,通过SQL的优化获得最佳的数据库执行效能,这在依赖SQL自动生成的“全自动”ORM机制中是难以实现的。Spring与Ibatis的集成这里我们重点探讨Spring框架下的ibatis应用,特别是在容器事务管理模式下的ibatis应用开发。针对ibatis,Spring配置文件如下:1.Ibatis-Context.xml:/配置数据源/配置数据库驱动com.mysql.jdbc.Driver/配置数据库连接地址,这里我连接的是test数据库jdbc:jtds:sqlserver:/:1433/test/数据库用户名root/数据库密码SqlMapConfig.xmlPROPAGATION_REQUIREDPROPAGATION_REQUIRED,readOnly2.Ibatis映射文件sqlMapConfig.xml:net/jackson/dao/entity/user.xmlINSERT INTO users ( username, password) VALUES ( #username#,#password# )3.User.javapublic class User public Integer id;public String username;public String password;public Integer getId() return id;public void setId(Integer id) this.id = id;public String getPassword() return password;public void setPassword(String password) this.password = password;public String getUsername() return username;public void setUsername(String username) this.username = username;4. UserDAO.java:public class UserDAO extends SqlMapClientDaoSupport implementsIUserDAO public void insertUser(User user) getSqlMapClientTemplate().update(insertUser, user);5.应用实例InputStream is = new FileInputStream(Ibatis-Context.xml);XmlB

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论