iBATIS入门学习.ppt_第1页
iBATIS入门学习.ppt_第2页
iBATIS入门学习.ppt_第3页
iBATIS入门学习.ppt_第4页
iBATIS入门学习.ppt_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

1、ibatis,目录,ibatis快速上手 ibatis配置 ibatis基础语义 ibatis高级特性,ibatis介绍,相对Hibernate和Apache OJB 等“一站式”ORM解决方案而言,ibatis 是一种“半自动化”的ORM实现。 对于全自动化的模式,不论Hibernate 还是Apache OJB,都对数据库结构提供了较为完整的封装,提供了从POJO 到数据库表的全套映射机制。程序员往往只需定义好了POJO 到数据库表的映射关系,即可通过Hibernate或者OJB 提供的方法完成持久层操作。 POJO到数据库表的映射 SQL语句的自动生成和执行,全自动化遇到的问题,,在一些

2、特定的环境下,这种一站式的解决方案却未必有效 系统的部分或全部数据来自现有数据库,处于安全考虑,只对开发团队提供几条Select SQL(或存储过程)以获取所需数据,具体的表结构不予公开。 开发规范中要求,所有牵涉到业务逻辑部分的数据库操作,必须在数据库层由存储过程实现。(银行大多有这样的限制) 系统数据处理量巨大,性能要求极为苛刻,这往往意味着我们必须通过经过高度优化的SQL语句(或存储过程)才能达到系统性能设计指标。 其他情况:分表等,问题的解决,“半自动化”的ibatis,却刚好解决了这个问题。 ibatis 的着力点,则在于POJO 与SQL之间的映射关系。也就是说,ibatis并不会

3、为程序员在运行期自动生成SQL 执行。具体的SQL 需要程序员编写,然后通过映射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定POJO。 作为“全自动”ORM 实现的一种有益补充,ibatis 的出现显得别具意义。,构建第一个ibatis应用,下载ibatis软件包 创建测试数据库,并在数据库中创建一个表t_user(id int, name varchar, sex int) 在CLASSPATH 中新建perties配置文件。log4j.rootLogger=DEBUG, stdout log4j.appender.stdout=org.apache.log4

4、j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%c1 - %m%n log4j.logger.java.sql.PreparedStatement=DEBUG 在系统中增加相关的lib,必选的为ibatis-common-2.jar, ibatis-dao-2.jar, ibatis-sqlmap-2.jar,数据库驱动,可选的为cglib.jar, commons-dbcp.jar, com

5、mons-logging.jar, log4j-1.2.13.jar, oscache-2.3.2.jar。,ibatis实例配置, ,POJO,package cn.terry.ibatis; import java.io.Serializable; public class User implements Serializable private static final long serialVersionUID = -8881447746916131078L; private Integer id; private String name; private Integer sex; p

6、ublic 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; ,映射文件, delete from t_u

7、ser where id = #value# ,运行代码,package cn.terry.ibatis; 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; public class Test public static vo

8、id main(String args) String resource =sqlMapConfig.xml; Reader reader; SqlMapClient sqlMap = null; try reader = Resources.getResourceAsReader(resource); sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader); sqlMap.startTransaction(); User user = new User(); user.setId(int)System.currentTimeMillis(

9、); user.setName(Erica); user.setSex(new Integer(1); sqlMap.insert(insertUser,user); sqlMmitTransaction(); sqlMap.endTransaction(); catch (IOException e) e.printStackTrace(); catch (SQLException e) e.printStackTrace(); ,运行结果,目录,ibatis快速上手 ibatis配置 ibatis基础语义 ibatis高级特性,Settings 节点,Settings 节点,transac

10、tionManager节点,transactionManager 节点定义了ibatis 的事务管理器,目前提供了以下几种选择: JDBC 通过传统JDBC Cmit/rollback实现事务支持。 JTA 使用容器提供的JTA服务实现全局事务管理。 EXTERNAL 外部事务管理,如在EJB中使用ibatis,通过EJB的部署配置即可实现自动的事务管理机制。此时ibatis 将把所有事务委托给外部容器进行管理。此外,通过Spring 等轻量级容器实现事务的配置化管理也是一个不错的选择。关于结合容器实现事务管理,参见“高级特性”中的描述。,dataSource节点,dataSource从属于t

11、ransactionManager节点,用于设定ibatis运行期使用的DataSource属性。 type属性: dataSource节点的type属性指定了dataSource的实现类型。可选项目: SIMPLE: SIMPLE是ibatis内置的dataSource实现,其中实现了一个简单的数据库连接池机制, 对应ibatis 实现类为com.ibatis.sqlmap.engine.datasource.SimpleDataSourceFactory。 DBCP: 基于Apache DBCP 连接池组件实现的DataSource 封装,当无容器提供DataSource 服务时,建议使用

12、该选项,对应ibatis 实现类为 com.ibatis.sqlmap.engine.datasource.DbcpDataSourceFactory。 JNDI: 使用J2EE 容器提供的DataSource 实现,DataSource 将通过指定的JNDI Name 从容器中获取。对应ibatis 实现类为com.ibatis.sqlmap.engine.datasource.JndiDataSourceFactory。,dataSource的子节点说明(SIMPLE Reader reader = null; SqlMapClient sqlMap = null; reader = Re

13、sources.getResourceAsReader(resource); sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);,数据写入操作(insert, update, delete),sqlMap.startTransaction(); Product product = new Product(); product.setId(1); product.setDescription (“Shih Tzu”); int rows = sqlMap.insert (“insertProduct”, product); sqlMmi

14、tTransaction();,数据查询 (select),sqlMap.startTransaction(); Integer key = new Integer (1); Product product = (Product)sqlMap.queryForObject (“getProduct”, key); sqlMmitTransaction();,在指定对象中存放查询结果(select),sqlMap.startTransaction(); Customer customer = new Customer(); sqlMap.queryForObject(“getCust”, par

15、ameterObject, customer); sqlMap.queryForObject(“getAddr”, parameterObject, customer); sqlMmitTransaction();,执行批量查询 (select),sqlMap.startTransaction(); List list = sqlMap.queryForList (“getProductList”, null); sqlMmitTransaction();,关于AutoCommit,/没有预先执行startTransaction时,默认为auto_commit模式 int rows = sql

16、Map.insert (“insertProduct”, product);,查询指定范围内的数据,sqlMap.startTransaction(); List list = sqlMap.queryForList (“getProductList”, null, 0, 40); sqlMmitTransaction();,结合RowHandler进行查询(select),public class MyRowHandler implements RowHandler public void handleRow (Object object, List list) throws SQLExce

17、ption Product product = (Product) object; product.setQuantity (10000); sqlMap.update (“updateProduct”, product); sqlMap.startTransaction(); RowHandler rowHandler = new MyRowHandler(); List list = sqlMap.queryForList (“getProductList”, null, rowHandler); sqlMmitTransaction();,分页查询 (select),PaginatedL

18、ist list = sqlMap.queryForPaginatedList (“getProductList”, null, 10); list.nextPage(); list.previousPage();,基于Map的批量查询 (select),sqlMap.startTransaction(); Map map = sqlMap.queryForMap (“getProductList”, null, “productCode”); sqlMmitTransaction(); Product p = (Product) map.get(“EST-93”);,OR 映射,映射文件主要

19、分为两个部分:模块配置和Statement配置。 模块配置包括: typeAlias节点 定义了本映射文件中的别名,以避免过长变量值的反复书写,此例中通过typeAlias节点为类“cn.terry.ibatis.User”定义了一个别名“user“。 cacheModel节点 定义了本映射文件中使用的Cache机制,cacheModel节点, cacheModel主要有下面几个配置点: flushInterval: 设定缓存有效期,如果超过此设定值,则将此CacheModel的缓存清空。 size: 本CacheModel中最大容纳的数据对象数量。 flushOnExecute:指定执行特定

20、Statement时,将缓存清空。如updateUser操作将更新数据库中的用户信息,这将导致缓存中的数据对象与数据库中的实际数据发生偏差,因此必须将缓存清空以避免脏数据的出现。,Statement节点,Statement配置包含了数个与SQL Statement相关的节点,分别为: statement insert delete update select procedure 其中,statement最为通用,它可以替代其余的所有节点。除statement之外的节点各自对应了SQL中的同名操作(procedure对应存储过程)。 使用statement 定义所有操作固然可以达成目标,但缺乏直

21、观性,建议在实际开发中根据操作目的,各自选用对应的节点名加以申明。,Statement类节点配置,各种类型的Statement 配置节点的参数类型基本一致,区别在于数量不同。如insert、update、delete节点无需返回数据类型定义(总是int)。 select * from t_user where sex = ?|#propertyName# order by $simpleDynamic$ ,Statement类节点配置,对于参数定义而言,尽量使用parameterClass,即直接将POJO 作为statement 的调用参数,这样在SQL 中可以直接将POJO 的属性作为参数

22、加以设定。 SET name=#name#, sex=#sex# WHERE id=#id# 运行期,ibatis 将通过调用User 对象的getName、getSex 和getId 方法获得相应的参数值,并将其作为SQL 的参数。,我们也可以将包含了参数数据的Map对象传递给Statement。 UPDATE t_user SET name=#name#, sex=#sex# WHERE id = #id# 这里传入的参数就是一个Map对象,ibatis将以key ”name”、”sex”、”id”从中提取对应的参数值。,同样的原理,我们也可以在resultMap中设定返回类型为map。 返回的结果将以各字段名为key保存在Map对象中返回。,在SQL中设定参数名时,可以同时指定参数类型。 SET name=#name:VARCHAR#, sex=#sex

温馨提示

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

评论

0/150

提交评论