Ibatis学习笔记详解编程语言
! [if !supportLists] 1. ! [endif] Ibatis是开源软件组织Apache推出的一种轻量级的对象关系映射(ORM)框架,和Hibernate、Toplink等在java编程的对象持久化方面深受开发人员欢迎。
对象关系映射(ORM):简单原理是通过面向对象方式操作关系型数据库,目前存储数据最常用最流行的工具是关系型数据库,其操作方式是通过SQL语句操作数据库的表,但是对于Java面向对象编程语言中,所有的操作对象都是对象,因此对象关系映射就是把数据库表和java编程语言中的对象对应起来,把表的列同java对象中的字段对应起来,程序员在程序开发过程中不再是使用原始SQL语句去直接操作数据库,而是通过ORM提供的查询语句操作普通的java对象,ORM将其提供的对普通java对象的查询语句翻译成SQL语句来操作数据库,从而屏蔽了不同数据库SQL语句的差别,简化了程序开发工作,提高了程序的可移植性。
! [if !supportLists] 2. ! [endif] Ibatis开发的准备工作:
(1).将Ibaits相关的jar包添加到工程的类路径下。
(2).Ibatis工程的主要配置文件为:
a.Ibatis的总配置文件SqlMapConfig.xml。
b.Ibatis的实体映射文件。
3.Ibatis总配置文件:
Ibatis的总配置文件主要是配置数据库连接相关信息,和Ibatis实体映射文件。其写法示例如下:
[xhtml]
view plain
copy
? ? 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 transactionManager type=”JDBC” commitRequired=”false” dataSource type=”SIMPLE” property name= “JDBC.Driver” value=”数据库的jdbc驱动”/ property name=”JDBC.ConnectionURL” value=”数据库的url”/ property name=”JDBC.Username” value=”数据库用户名”/ property name=”JDBC.Password” value=”数据库的密码”/ /dataSource /transactionManager sqlMap resource=”Ibatis的实体映射文件”/ /sqlMapConfig
4. Ibatis实体映射文件的写法示例:
Ibatis的实体映射文件是Ibatis框架的核心,起作用是将Java的持久化实体对象和关系型数据库映射起来,其内容主要是包括java实体各种增删改查操作对应的数据库语句。其写法示例如下:
[xhtml]
view plain
copy
? ? 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=”Ibatis命名空间” typeAlias alias=”实体类类别名” type=”实体类全路径”/ ! restultMap主要是用于Ibatis对数据增删改查操作的返回值结果对于java对象的映射,一般用于所返回的对象可能包含的是一个以上java对象的字段,如果是一个java对象中的字段一般使用resultClass resultMap id=”结果集id” >
! [if !supportLists] 5. ! [endif] 读取Ibatis的总配置文件得到SqlMapClient:
[java]
view plain
copy
? private static SqlMapClient sqlMapClient = null; static{ try{ Reader reader = com.ibatis.common.resource.Resources.getResourceAsReader(“Ibatis总配置文件路径”); sqlMapClient = com.ibatis.sqlMap.client.SqlMapClientBuilder.builderSqlMapClient(reader); reader.close(); }catch(IOException e){ 异常处理…….
! [if !supportLists] 6. ! [endif] Ibatis的SQL Map:
(1).Ibatis的SQL Map的核心概念是Mapped Statement。Mapped Statement可以使用任意的SQL语句,并拥有parameterMap/parameterClass(输入参数)和resultMap/resultClass(输出结果)。
(2). statement 元素是个通用的声明,可以用于任何类型的SQL语句,但是通常使用具体的 statement 类型,如:查询使用 select ,添加使用 insert ,更新使用 update ,删除使用 delete 。
! [if !supportLists] 7. ! [endif] Ibatis的增删改查操作简单例子:
(1).实体类必须遵循JavaBean的规范,提供一个无参数的构造方法,字段必须提供get和set方法。
(2).在Ibatis对应的实体映射文件的 sqlMap 标签元素添加如下:
a.Ibatis添加:
[xhtml]
view plain
copy
? delete id=”Ibatis删除实体操作Id” parameter >
注意:删除和查询时,经常需要根据一定条件操作,有时可能需要模糊查询,对于模糊查询如name like‘%c%’。在Ibatis中有两种写法:
写法1:在java方法中传递参数时写成:”%字段名%”。
写法2:在Ibatis的sql语句中可以写成如:where name=’%$字段名$%’。
! [if !supportLists] a. ! [endif] Ibatis更新:
[xhtml]
view plain
copy
? select id=”Ibatis查询实体操作Id” result >
注意:这里演示的是最简单的查询,其结果是一个实体的集合。
! [if !supportLists] 8. ! [endif] 在java对象中使用Ibatis的statement操作:
(1).根据Ibatis总配置文件得到SqlMapClient对象,具体方法参见“5. 读取Ibatis的总配置文件得到SqlMapClient”。
(2).使用SqlMapClient对象的queryForObject(),queryForList(),insert(),delete(),update()方法。这些方法都需要一个传递一个参数:在实体映射文件中定义的操作statementId,如果这些定义的操作还需要输入参数,则还需要传递输入参数对象。简单用法如下:
实体对象类型 对象= sqlMapClient.queryForObject(“实体映射文件命名空间.statementId”, “查询条件参数”);
! [if !supportLists] 9. ! [endif] Ibatis主键自动生成:
通过使用 select 的子元素 selectkey 来支持自动生成主键。对于不同的数据库主键自动生成机制是不同的,Oracle是通过自增序列欲生成的,MS-SQL Server是通过Identity后生成的。这里以Oracle数据库为例简单讲述一下主键自动生成的方法:
(1).首先在Oracle数据库中创建一个自增的序列:
create Sequence 序列名
start with 1
increment 1;
(2).在insert标签中插入selectkey子标签:
[xhtml]
view plain
copy
? insert id=”添加实体操作Id” parameter >
注意:selectkey标签中的keyProperty属性是主键赋值的对象。
! [if !supportLists] 10. ! [endif] Ibatis的内嵌参数:
所谓内嵌参数是指,使用Ibatis时,当没有给定参数传递值时,Ibatis会使用默认的值代替。
语法为:#参数值:数据库中数据类型:内嵌参数#
一个简单的例子如下:
[xhtml]
view plain
copy
? statement id=”insertProduct” parameter >
当id没有给定值是数据库中默认为0,当desc没有给定值是数据库默认给定noEntry。
! [if !supportLists] 11. ! [endif] Ibatis对象之间的关系:
Ibatis的输入参数和输出参数只能是一个,因此,当输入参数在一个实体对象时,使用parameterClass,当输入对象也只在一个实体对象中时,使用resultClass。
但是有很多时候输入参数和输出参数可能包含在几个实体对象中,我们不能为了只传递一个参数而专门为这些输入和输出参数组合专门创建类,因此就需要使用parameterMap和resultMap来组合多个实体对象中的字段。
以resultMap为例,使用方法如下:
! [if !supportLists] 12. ! [endif] Ibatis的SQL Map通过 procedure 标签元素调用存储过程:
存储过程是数据库将一组完成特定功能的Sql语句进行编译,每次调用时不必重新编译,因此执行速度和效率都比直接使用Sql语句有很大优势。在Ibatis中通过 procedure 标签元素可以直接调用数据库的存储过程,其过程如下:
(1).定义存储过程所需输入/输出参数,如:
注意:Ibatis调用存储过程时,要确保始终只使用JDBC标准的存储过程语法。
! [if !supportLists] 13. ! [endif] Ibatis与Spring集成:
现在Java Web开发中,SSH(Spring,Sturts,Hibernate)三个开源框架组合非常流行,对于一些对Hibernate不熟悉或者怀疑Hibernate性能的人,也可以使用Ibatis代替Hibernate框架,即SSI(Spring,Struts,Ibatis)。Spring和Struts的集成这里不多说了,具体说一下Spring和Ibatis的集成。
(1).对Ibatis工程引入Spring支持,即将Spring相关的jar包加入到类路径中,在/src目录下创建spring配置文件,在web.xml文件中指定spring配置文件并添加spring的WebContext启动监听器。
(2).将对数据库的连接信息放交由spring管理,在spring配置文件中添加数据库连接信息:
[xhtml]
view plain
copy
? bean id=”sqlMapClient” >
(4).在Ibatis总配置文件中移除关于数据库连接的信息,只需在Ibatis总配置文件中配置实体映射文件即可。
至此,Spring和Ibatis就无缝集成起来,在使用时Spring会读取创建SqlMapClient对象,并为其注入数据源,直接通过spring获得SqlMapClient对象就可以直接使用。
! [if !supportLists] 14. ! [endif] Ibatis优缺点总结:
优势:使用标准的Sql语句,与JDBC相比简单方便,减少了代码量,架构和性能得到增强;与Hibernate等ORM工具相比因为更接近Sql语句,性能可控;sql语句与程序代码分隔,简化了项目分工,大大提高并行开发的可能性。
缺点:还需要写标准的sql语句,不像Hibernate完全屏蔽了底层数据库的差异,程序的可移植性比Hibernate和JPA要差;输入参数和输出参数都只能有一个,程序编写的灵活性不是太高。
! [if !supportLists] 15. ! [endif] 这里只是简单总结了Ibatis的入门开发知识,对于实体之间关系等比较深入了解Ibatis相关的知识其实和Hibernate,JPA等类似,这里不再赘述。
原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/13586.html
cjavaoraclexml相关文章
- K8S学习笔记之在k8s中删除和添加节点的方法
- MongoDB学习笔记:TTL 索引的原理、常见问题及解决方案
- fhq treap 学习笔记
- 模仿学习笔记:行为克隆
- Cobaltstrike 学习笔记(三)CS与MSF联动
- 适合小白的Linux学习笔记,全面丰富,154页高清PDF版速领
- Cypress学习笔记6——Debugging调试代码
- Java的学习笔记(05)数组
- 统计学习方法 十到十六章笔记
- 学习小组day6笔记-R包
- Java学习笔记 基础知识(注释、基本数据类型)
- Hibernate学习笔记二详解编程语言
- SpringMVC学习笔记三 整合jdbc和事务详解编程语言
- Java基础学习笔记四 Java基础语法详解编程语言
- HTML/CSS/JavaScript学习笔记持续更新详解编程语言
- Java学习笔记之二十final关键字在Java继承中的用法小结详解编程语言
- Java学习笔记之十八Javadoc注释的用法详解编程语言
- Java学习笔记之十二Java8增强的工具类:Arrays的用法整理总结详解编程语言
- Java学习笔记之八JavaBean中布尔类型使用注意事项详解编程语言
- Java学习笔记之六java三种循环(for,while,do……while)的使用方法及区别详解编程语言
- java学习笔记01–数据类型详解编程语言
- CSS学习笔记09 简单理解BFC详解编程语言
- CSS学习笔记02 CSS选择器详解编程语言
- Linux防火墙iptables学习笔记(三)iptables命令详解和举例
- 千峰之路Redis学习笔记(千峰redis笔记)
- ThinkPHPphp框架学习笔记
- javascript学习笔记(十四)window对象使用介绍
- jQuery学习笔记(1)--用jQuery实现异步通信(用json传值)具体思路
- Android学习笔记(二)App工程文件分析