mybatis与ibatis的细微差别

时间:2022-06-20 21:42:00

最近公司做项目要我们自己先熟悉熟悉mybatis,在网上搜了一些资料,照着做了练习,从自己做的过程中犯得错误总结一下。

mybatis 的前生是ibatis,我就先做了一个ibatis连接数据库做简单的增删改查,模糊查询等,接着我又用mybatis做了相同的事情,发现了一些差别,也犯了一些错误记录下来

首先我用的是Myeclipse8.5 数据库是sql2005 (当然你也可以用mysql,oracle) 

区别:

第一:驱动包:ibatis我用的是ibatis-2.3.4.726.jar

                            mybatis用的是mybatis-3.1.1.jar

第二:配置文件

ibatis 的 SqlMapConfig.xml

<?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>
    <properties resource="com/itcast/SqlMap.properties"></properties>
    <transactionManager type="JDBC">
        <dataSource type="SIMPLE">
        <property name="JDBC.Driver" value="${driver}"/>
        <property name="JDBC.ConnectionURL" value="${url}"/>
        <property name="JDBC.Username" value="${username}"/>
        <property name="JDBC.Password" value="${password}"/>
        </dataSource>
    </transactionManager>
    <sqlMap resource="com/itcast/Student.xml"></sqlMap>
</sqlMapConfig>

mybatis 的mybatis-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
        <properties resource="com/mybatis/ServerConfig.properties"></properties>
        <typeAliases>
                 <typeAlias type="com.mybatis.Student" alias="Student" />
        </typeAliases>
        <environments default="development">
                <environment id="development">
                        <transactionManager type="JDBC" />
                        <dataSource type="POOLED"><!--从配置文件中取出数据库链接的参数-->
                                <property name="driver" value="${driver}" />
                                <property name="url" value="${url}" />
                                <property name="username" value="${username}" />
                                <property name="password" value="${password}" />
                        </dataSource>
                </environment>
        </environments><!--这块是数据库连接用的 也叫数据源-->
        <mappers>
                <mapper resource="com/mybatis/Student.xml" />
        </mappers>
</configuration>
------这里的取数据连接的方式都差不多,只是那个标签变了

ibatis 的 Student.xml

<?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>
    <typeAlias alias="Student" type="com.itcast.Student"/>
    <select id="selectAllStudent" resultClass="Student">
        select *
        from student
    </select>
    
    <select id="selectStudentById" resultClass="Student" parameterClass="int">
        select *
        from student
        where sid=#sid#
    </select>
    
    <select id="selectStudentByName" resultClass="Student" parameterClass="String">
        select *
        from student
        where sname like '%$sname$%'
    </select>
    
    <select id="countAllStudent" resultClass="Integer"  >
        select count(*)
        from student
    </select>
    <insert id="insertStudent" parameterClass="Student">
        insert into Student(
        sid,
        sname,
        major,
        birth,
        score
        )
        values(
         #sid#,#sname#,#major#,#birth#,#score#
        )
    </insert>
    
    <delete id="deleteStudentById" parameterClass="int">
        delete
        from Student
        where sid=#sid#
    </delete>
    
    <update id="updateStudentById" parameterClass="student">
        update Student
        set
        sname=#sname#,
        major=#major#,
        birth=#birth#,
        score=#score#
        where sid=#sid#
    </update>  
</sqlMap>

mybatis 的Student.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.mybatis.Student"><!-- 命名空间是实体类的路径 -->
 
  <select id="selectStudentById" resultType="Student" parameterType="int">
        select *
        from Student
        where sid=#{sid}
  </select>
 
  <select id="selectAllStudent" resultType="Student">
        select *
        from Student
  </select>
 
  <insert id="insertStudent" parameterType="Student">
        insert into Student(
        sid,
        sname,
        major,
        birth,
        score
        )
        values(
         #{sid},#{sname},#{major},#{birth},#{score}
        )
    </insert>
    
    <update id="updateStudentById" parameterType="student">
        update Student
        set
        sname=#{sname},
        major=#{major},
        birth=#{birth},
        score=#{score}
        where sid=#{sid}
    </update>

    <delete id="deleteStudentById" parameterType="int">
        delete
        from Student
        where sid=#{sid}
    </delete>    
      
      <select id="selectStudentByName"  parameterType="String" resultType="Student">
        select * from Student where sname like '%${_parameter}%'  
    </select>
    <!--mysql分页查询,sqlserver分页查询未写待定
       <select id="find" parameterType="map" resultType="Student">
           select * from system_news limit #{inoff},#{pagesize}
       </select>
       -->
   <select id="find_count"  resultType="Integer">
      select count(*)
      from Student
   </select>
</mapper>

---首先这两个文件差别

1,查询的时候参数什么的放两个井号之间,如#sid#

2,模糊查询ibatis--->

  select *   from student  where sname like '%$sname$%'

模糊查询mybatis--->select * from Student where sname like '%${_parameter}%'

注意这个mybatis参数必须是_parameter,我就在这里犯了错,找了好久,给这个连接解释的http://www.myexception.cn/software-architecture-design/1068522.html

如果传入类型为String类型,则参数需统一修改为[_parameter],修改后的sql语句如下(不管你的参数是什么,都要改成"_parameter")


目前就只是发现这些比较深刻,先记下吧,希望像我一样初学者不要再犯我这样的错误