ibatis 和 Mybatis 区别

时间:2025-04-27 16:25:27

Mybatis 可以说是 ibatis 的升级版 ,MyBatis 提供了更为强大的功能,同时并没有损失其易用性,相反,在很多地方都借助于 JDK 的泛型和注解特性进行了简化

Java EE 框架 这个框架需要提供一个全局配置文件,用于指定程序正常运行所需的设置和参数信息。而针对常用的持久层框架而言(Hibernate、JPA、iBatis 等),则通常需要两个配置文件:
一类用于指定数据源、事务属性以及其他一些参数配置信息(通常是一个独立的文件,可以称之为全局配置文件);

iBatis 一般在命名为 而Mybatis 就要给命名为 

另一类则用于指定数据库表和程序之间的映射信息(可能不止一个文件,我们称之为映射文件)。

Mybatis 配置文件需要<properties></properties>

  <!--properties标签-->
<properties resource=""></properties>
    <!--配置环境-->
    <environments default=" ">
        <!--配置mysql的环境,可以配置多个数据库-->
        <environment >
            <!--配置事务的类型-->
            <transactionManager type="JDBC"></transactionManager>
            <!--配置连接数据库的4个基本信息-->
            <dataSource type="POOLED">
                <property name="driver" value="${}"/>
                <property name="url" value="${}"/>
                <property name="username" value="${}"/>
                <property name="password" value="${}"/>
            </dataSource>
        </environment>
    </environments>

properties:

=
=
=
=

创建sql以及写sql的时候也会有略微不同

ibatis

<sqlMap namespace="VehLog">

  <typeAlias alias="VehLogResult" type="路径"/>
    
  <!-- 用于select查询公用抽取的列,注意将blob与clob对象单独处理 -->
  <sql >
  <![CDATA[
         as lsh,
         as clrq,
  ]]>
  </sql>

  <!-- 动态SQL -->
  <sql >
    <dynamic prepend="WHERE">
        <isNotEmpty prepend="AND" property="lsh">
             = #lsh#
        </isNotEmpty>
        <isNotEmpty prepend="AND" property="clrqString">
            to_char(,'yyyy-mm-dd') = #clrqString#
        </isNotEmpty>
        
    </dynamic>
  </sql>
  
  <!-- insert操作-->
  <insert  parameterClass="路径" >
  <![CDATA[
    INSERT INTO VEH_LOG(
            LSH,
            CLRQ,
    ) VALUES (
            #lsh:VARCHAR#,
            #clrq:TIMESTAMP#,
    )
  ]]>
  </insert>
    
  <!-- update操作-->
  <update  parameterClass="路径">
    UPDATE VEH_LOG
        SET LSH = #lsh#,
        SET CLRQ = #clrq#
        <isNotNull prepend="," property="ywlx">
            YWLX = #ywlx:CHAR#
        </isNotNull>
    WHERE 
            LSH = #lsh#,
            CLRQ = #clrq#
  </update>

  <!-- delete操作-->
  <delete  parameterClass="">
    <![CDATA[
    DELETE FROM VEH_LOG A WHERE
             = #lsh#,
             = #clrq#
    ]]>
  </delete>
  
  <!-- 取所有数据 -->
  <select  parameterClass="" resultClass="VehLogResult">
    SELECT <include ref />
        FROM VEH_LOG A
        <include ref/>
        <isNotEmpty property="sortColumns">
            ORDER BY $sortColumns$
        </isNotEmpty>
  </select>
  
  <!-- 通过主键读取VehLog对象 -->
  <select  parameterClass="" resultClass="VehLogResult">
    SELECT <include ref />
    <![CDATA[
        FROM VEH_LOG A
        WHERE 
                 = #lsh#,
                 = #clrq#
    ]]>
  </select>
    
  <!-- 按字段取数据 -->
  <select  parameterClass="" resultClass="VehLogResult">
    SELECT <include ref />
        FROM VEH_LOG A
        <include ref/>
        <isNotEmpty property="sortColumns">
            ORDER BY $sortColumns$
        </isNotEmpty>
  </select>
    
  <!-- 取总数 -->
  <select  parameterClass="" resultClass="long">
    SELECT count(*) FROM VEH_LOG A
        <include ref/>    
  </select>
    
  <!-- 分页查询  -->
  <select  parameterClass="" resultClass="VehLogResult">
    SELECT <include ref />
        FROM VEH_LOG A
        <include ref/>
        <isNotEmpty property="sortColumns">
            ORDER BY $sortColumns$
        </isNotEmpty>
  </select>

  <!-- 多记录查询  -->
  <select  parameterClass="" resultClass="VehLogResult">
    SELECT <include ref />
        FROM VEH_LOG A
        WHERE  ,  IN 
        <iterate property="idsList" open="(" close=")" conjunction=",">    
            #idsList[]#
         </iterate>
        <isNotEmpty property="sortColumns">
            ORDER BY $sortColumns$
        </isNotEmpty>
  </select>
  
  <!-- 按字段delete操作-->
  <delete  parameterClass="" >
    DELETE FROM VEH_LOG A <include ref/>
  </delete>
  
  
  <!--  业务工作量统计 -->
  <select  parameterClass="" resultClass="">
	  SELECT ,COUNT(*) AS NUM
	  FROM VEH_LOG  A
	  <include ref/>
	  GROUP BY 
	  ORDER BY  ASC
  </select>
</sqlMap>

mybatis

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-////DTD Mapper 3.0//EN" "/dtd/">
<mapper namespace="">
  <resultMap  type="">
    <!--
      WARNING - @
    -->
    <id column="id" jdbcType="INTEGER" property="id" />
    <result column="img_file_name" jdbcType="VARCHAR" property="imgFileName" />
    <result column="title" jdbcType="VARCHAR" property="title" />
    <result column="subtitle" jdbcType="VARCHAR" property="subtitle" />
    <result column="price" jdbcType="DECIMAL" property="price" />
    <result column="distance" jdbcType="INTEGER" property="distance" />
    <result column="number" jdbcType="INTEGER" property="number" />
    <result column="desc" jdbcType="VARCHAR" property="desc" />
    <result column="city" jdbcType="VARCHAR" property="city" />
    <result column="category" jdbcType="VARCHAR" property="category" />
    <result column="star_total_num" jdbcType="INTEGER" property="starTotalNum" />
    <result column="comment_total_num" jdbcType="INTEGER" property="commentTotalNum" />
  </resultMap>

  <select  resultMap="BaseResultMap">
    SELECT * FROM business WHERE city=#{city}
  </select>

  <select  resultMap="BaseResultMap">
    SELECT * FROM business  WHERE  id =#{id}
  </select>

  <select  resultMap="BaseResultMap">
    SELECT * FROM business
    <where>
        <if test="keyword!=null and keyword!=''">
            and title LIKE CONCAT('%',#{keyword},'%')
        </if>
        <if test="city!=null and city!=''">
            AND city=#{city}
        </if>
        <if test="category!=null and category!='' and category!='all'">
            AND category=#{category}
        </if>
    </where>

  </select>

    <select  resultType="map">
        SELECT ,c.`comment`,,, FROM business b INNER JOIN orders o ON =o.business_id
        INNER JOIN member m ON o.member_id = 
        INNER JOIN `comment` c ON  = c.orders_id
        where =#{id}
    </select>



    <select  resultType="">
        SELECT * FROM business
        <where>
        <if test="title!=null and title!=''">
          title LIKE CONCAT('%',#{title},'%')
        </if>
        </where>
    </select>

    <insert  parameterType="" useGeneratedKeys="true" keyProperty="id">
       INSERT INTO business(id,img_file_name,title,subtitle,price,distance,number,`desc`,city,category,star_total_num,comment_total_num)
VALUES(null,#{imgFileName},#{title},#{subtitle},#{price},#{distance},#{number},#{desc},#{city},#{category},#{starTotalNum},#{commentTotalNum})
    </insert>
    
    <update  parameterType="">
        UPDATE business SET img_file_name=#{imgFileName},title=#{title},subtitle=#{subtitle},price=#{price},distance=#{distance},number=#{number},
`desc`=#{desc},city=#{city},category=#{category},star_total_num=#{starTotalNum},comment_total_num=#{commentTotalNum} WHERE id=#{id}
    </update>

    <select  resultType="">
        SELECT * FROM business WHERE id=#{id}
    </select>

    <select  resultType="">
SELECT  FROM business b INNER JOIN dic d  WHERE = AND d.`name`=#{name}
    </select>

</mapper>

 以上是个人在开发中jue得的不同之处