Mybatis

1.优点:

  1:与JDBC相比减少了50%的代码

  2:是最简单的持久化框架

  3:Sql代码从程序中彻底分离

  4:提供xml标签支持sql动态

  5:提供映射标签支持对象与数据库的ORM字段映射

2.缺点:

  1.sql语句编写工作量大

  2.数据库移至性差

3.基本要素:

4.MyBatis核心对象生存周期

  1:SqlSessionFactoryBuilder:

     用于创建多个SqlSessionFactory实例

     用过即丢生命周期只存在于创建他的方法中

  2:SqlSessionFactory

     作用于整个Application,生命周期与应用生命周期相同整个程序只存在一个

  3:SqlSession

     包含了所有的SQL执行所需的方法,对应一次数据库会话结束时必须关闭,属于线程级别不能共享

     在SqlSession中可以执行多次SQL语句,但一但关闭了SqlSession就要从新创建

5.SqlSession两种用法:

  1:通过SqlSession实例直接运行映射的SQL语句

  2:基于Mapper借口方式操作数据

6.增删改查标签的属性:

   1:传入参数:parameterType="数据类型";

   2:指定返回类型:

      (1):resultType="数据类型地址";

      (2):resultMap="result的id";

7.得参数的两种方法#{ } ${ }

    简单类型(int,String等):#{这随便写}   ${value}  (一个参数的情况下多个参数写属性名) 

    复杂类型(类,数组等):#{属性名}  ${属性名}

  #{ }与${ }的区别:

      #{ }得参数的话会带有属性的符号   如String就会带双引号

      ${ }得参数的时候不会带属性符号

8.Mybatis标签

  1.类型别名:

    <configuration>
          <typeAliases>
               <typeAliase alias="别名" type="类型地址"/>
          </typeAliases>
    <configuration>

 2.给一个包起别名(包中的类的别名就是他的类名)      

    <tyoeAliases>
          <package name="包名"/>
    </tyoeAliases>

  3.resultMap的属性与标签:          

    <resultMap>
         <id column="数据库列名”  prooerty="类的属性名" jdbctype="数据库中的类型">
    </resultMap>    
     1:多对一的标签(一个类中有另一个类作为属性):
    <association property="作为属性的类名" JavaType="类型的地址">

      <id column="数据库列名” prooerty="类的属性名" jdbctype="数据库中的类型">
      <result column="数据库列名”  prooerty="类的属性名" jdbctype="数据库中的类型">

      <result>
    </association>
      2:一对多标签(一个类中有另一个类的集合)
    <collection property="类的集合名" oftype="类的地址">
       <id column="数据库列名”  prooerty="类的属性名" jdbctype="数据库中的类型">
    </collection>    

    所有的集合都用oftype指定

  4.SQL片段:

    sql片段可以重复利用多次调用     

    <select>
          <include refid="sql片段id">
    </select>

    <sql id=“名”>
          sql语句
    </sql>

  5.动态SQL语句

     1:where(where会自动识别是否是第一个where如果是第一个where会自动去掉and进行拼接)

      <select id="selectByParams" parameterType="map" resultType="user">

        select * from user

         <where>

           <if test="id != null ">

              id=#{id}

           </if>

           <if test="name != null and name.length()>0" >

              and name=#{name}

           </if>

         </where>

      </select> 

      2:choose(和switch很像)
    <choose>

        <when test="条件">-------这个和case一样
                SQL语句
        </when>

         <otherwise>-----这个和default一样
               SQL语句
         </otherwise>
    </choose>    
      3:foreach

       <foreach collection="集合名" item="起个名" index="index" open="开始循环的拼接" close="结束循环的拼接" separator=",">

         #{起的名}
        </foreach>

        4:遍历拼接:trim
      <trim prefix="前缀" suffix="后缀" suffixoverrides="在每句的末尾追加内容" prefixoverrides="在每句前面追加的内容">
          内容
      </trim>
       5:set

       <update>

         update user

         <set>

           <if test="name != null and name.length()>0">

              name = #{name},

           </if>

           <if test="gender != null and gender.length()>0">

              gender = #{gender},

           </if>

          </set>

         where id = #{id}

        </update> 

原文地址:https://www.cnblogs.com/HQ0422/p/10001885.html