ibatis学习以及与mybatis的不同

什么是ibatis?

它是一个用来访问数据库的工具,可以看作数据持久化框架。它将sql语句映射为java对象,可以让我们只需要知道xml文件配置和sql语句的写法就能操作数据库。使用起来简单,轻量。

ibatis的配置
它的配置都是在sqlMapConfig.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 useStatementNamespaces="true" enhancementEnabled="false" errorTracingEnabled="false" />
	
	<!-- Common Module -->
	<sqlMap resource="config/sqlmapping/alias.xml" />
	<sqlMap resource="config/sqlmapping/sqlmapping.xml" />
</sqlMapConfig>

resource:使用resource属性配置,类加载会从类路径定位后面的配置文件,一般我们不会将所有配置写在sqlMapConfig文件里面,方便阅读。一般分为两个文件,一个alias.xml给类型取别名,sqlmapping.xml写具体的sql操作语句。

settings:配置全局配置信息,它有很多属性如下
useStatementNamespaces:是否使用命名空间,默认不使用,一般比较大的项目,它能让操作看起来比较清楚直观。在< sql-map >中加入namespace属性即可,之后我们在程序中使用“命名空间名.sql语句id”就行了

enhancementEnabled:是否使用cglib中那些优化的类来提高延迟加载的性能,默认为使用。使用时必须加入cglib的类库,一般不使用

errorTracingEnabled : 是否启用错误日志.

lazyLoadingEnabled:是否进行延迟加载,默认为true。延迟加载的意思是只先加载必要的信息,而延迟加载一些不确定要使用的数据。

cacheModelsEnabled:是否启用数据缓存,默认为true,使用缓存能提高程序的性能,所以开启就好

maxRequests:最大并发请求数

maxSessions :当前最大允许的并发SqlMapClient数

maxTransactions:最大并发事务数

使用别名,这能简化sql语句配置中resultclass或者resultmap时类型的书写。(alias.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.org/dtds/sql-map-2.dtd">
<sqlMap namespace="alias">
	<!-- type alias -->
	<typeAlias alias="HashMap" type="java.util.HashMap" />
	<typeAlias alias="List" type="java.util.List" />
	<typeAlias alias="String" type="java.lang.String" />
	<typeAlias alias="Decimal" type="java.math.BigDecimal" />
	<typeAlias alias="Timestamp" type="java.sql.Timestamp" />
	<typeAlias alias="Int" type="java.lang.Integer" />
</sqlMap>

配置具体的sql语句xml
tip:<![CDATA[ ]]>是xml文件的一种语法,它的意思是它包含的所有内容不被xml解析。因为我们原本写xml文件时,一些特殊的字符会被转义像<=或者&之类的,但是作为sql语句我们不希望它被转义所以就放在这个里面

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.org/dtds/sql-map-2.dtd">

<sqlMap namespace="person">
        //parameterClass代表传入的参数类型  resultClass代表返回的参数类型
        <select id="selectPersonById" parameterClass="Int" resultClass="HashMap">
		    <![CDATA[
                 select *  from Person
                 where ID=#id#
		    ]]>
	   </select>
       
       //使用resultMap
       <resultMap id="selectPersonByNameResult" class="HashMap">
		   <result property="id" column="ID" />
		   <result property="name" column="NAME" />
		   <result property="age" column="AGE" />
	   </resultMap>

       <select id="selectPersonByName" parameterClass="String" resultMap="selectPersonByNameResult">
		    <![CDATA[
                 select *  from Person
                 where NAME=#name#
		    ]]>
	   </select>

       <insert id="addPerson" parameterClass="HashMap">  
           <![CDATA[
                 insert into Person(
                       ID,
                       NAME,
                       AGE
                       )
                 VALUES(
                      #id#,
                      #name#,
                      #age#
                      )
		    ]]>
      </insert>

      <update id="updateName" parameterClass="String">  
          update Person   
          set NAME=#name#  
      </update>
     
      <delete id="deletePerson" parameterClass="Int">  
          delete from Person  
          where ID=#id#  
      </delete>



</sqlMap>

说一下resultClass和resultMap的区别
当结果集列名和类的属性名完全相对应的时候,则可直接用resultClass直接指定查询结果类型

当查询结果集与属性名对应不上的时候,就可以采用resultMap指定列名与对象属性名之间的对应关系,否则对应不上的属性将为null或0.

简单来说,最好用resultMap!

我们在程序中调用时

this.getSqlMap().queryForList("person.selectPersonById", id);

ibatis和mybatis的区别

在 ibatis3.*版本以后它改名为mybatis,也就是说它们就是一个东西的不同版本

它们主要有以下区别
ibatis配置时根元素是sqlMapConfig,mybatis中是configuration

settings元素的配置

<settings useStatementNamespaces="true" enhancementEnabled="false" errorTracingEnabled="false" />//ibatis
<settings>
     <setting name="useStatementNamespaces1" value="true"/>
     <setting name="enhancementEnabled2" value="false"/>
     <setting name="errorTracingEnabled" value="false"/>//mybatis
</settings>

ibatis中是使用sqlMap元素,mybatis中是使用mapper元素

ibatis中有resultMap和resultClass两种返回类型,mybatis中将两者统一为resultType

ibatis中传入参数为parameterClass,mybatis中是parameterType

参数的写法

 where ID=#id#   //ibatis
 where ID = #{id}   //mybatis
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值