美文网首页
《二》mybatis写法

《二》mybatis写法

作者: 进击的小鹿 | 来源:发表于2016-11-21 14:38 被阅读94次

    **1.select ** :主要看前面几个常用参数即可

    <select id="getUser" parameterType="String" resultMap="userResultMap">  
        SELECT UT.ID,  
               UT.NAME,  
               UT.SEX,  
               UT.AGE  
          FROM USER UT  
          WHERE UT.ID = #{UID}  
    </select>  
    
    • id :在这个模式下唯一的标识符,可被其它语句引用
    • parameterType:传给此语句的参数的完整类名或别名
    • resultType:语句返回值类型的整类名或别名。注意,如果是集合,那么这里填写的是集合的项的整类名或别名,而不是集合本身的类名。(resultType 与resultMap 不能并用)
    • resultMap:引用的外部resultMap 名。结果集映射是MyBatis 中最强大的特性。许多复杂的映射都可以轻松解决。(resultType 与resultMap 不能并用)
    • 其他:flushCache,useCache,timeout,fetchSize,statementType,resultSetTypes

    2.update

    基本的语法 与 select类似。
    支持批量更新--用到了动态sql :foreach

    3.insert

    <insert id="insertUser" parameterType="UserEntity">  
        INSERT INTO USER (ID,  
                          NAME,  
                          SEX,  
                          AGE)  
              VALUES   (#{UID},  
                         #{UName},  
                         #{USex},  
                         #{UAGE})  
    </insert>  
    
    • useGeneratedKeys 生成主键策略
    • keyProperty :标识一个将要被MyBatis设置进getGeneratedKeys的key 所返回的值,或者为insert 语句使用一个selectKey子元素。

    支持批量插入
    用到了动态sql :foreach

    4.delete

    省略
    可以批量删除。

    5.sql
    Sql元素用来定义一个可以复用的SQL 语句段,供其它语句调用。

    <!-- 复用sql语句  查询student表所有字段 -->  
    <sql id="selectUserAll">  
        SSELECT UT.ID,  
               UT.NAME,  
               UT.SEX,  
               UT.AGE  
          FROM USER UT  
    </sql>  
    

    复用:

    <select id="getUser" parameterType="String" resultMap="userResultMap">  
        <include refid="selectUserAll"/>  
            WHERE UT.ID = #{UID}   
    </select>  
    

    6.参数
    MyBatis可以使用Java的基本数据类型和Java的复杂数据类型。如:基本数据类型,String,int,date等。

    使用基本数据类型,只能提供一个参数,所以需要使用Java实体类,或Map类型做参数类型。通过#{}可以直接得到其属性。

    **传入多参数 **

    public List<StudentEntity> getStudentListWhereParam(@Param(value = "name") String name, @Param(value = "sex") String sex, @Param(value = "birthday") Date birthdar, @Param(value = "classEntity") ClassEntity classEntity);  
    

    默认情况下,使用#{}语法,MyBatis会产生PreparedStatement语句中,并且安全的设置PreparedStatement参数,这个过程中MyBatis会进行必要的安全检查和转义。 #{}比${}安全。

    别名

    <typeAlias type="com.someapp.model.User" alias="User"/> 
    <!-- In SQL Mapping XML file --> 
    <select id="selectUsers" parameterType="int" resultType="User">
      select id, username, hashedPassword from some_table 
      where id = #{id}
    </select>
    

    7.动态的sql

    Mybatis强大特性之一就是它的动态sql,免除了拼接sql带来的各种麻烦。

    • if 条件 :多条件组合

      <if test="">sql语句 </if>

    <update id="updateCategory" parameterType="Category">
        update CATEGORY t SET
        <if test="categoryName!=null">
                t.CATEGORY_NAME = #{categoryName, jdbcType=VARCHAR},
        </if>
        <if test="updateUser!=null">
                t.UPDATE_USER = #{updateUser, jdbcType=VARCHAR},
        </if>
        t.UPDATE_TIME = currentTimeStamp
        WHERE t.CATEGORY_ID = #{categoryId, jdbcType=NUMERIC}
    </update>
    
    • choose(when, otherwise) :类似于 switch 吧,满足其一就可以啦

      <choose>
        <when>语句</when>
        <when>语句</when>
        ……
        <otherwise>语句</otherwise>
      </choose>
      
    • where trim set

    为了避免if动态条件不成立

    条件写在<where> </where> 里面 或者 where条件加上1=1的条件

    <trim prefix="WHERE" prefixOverrides="AND |OR ">
          ... 
    </trim>
    

    <set></set>

    <trim prefix="SET" suffixOverrides=",">
          ...
    </trim>
    
    • foreach

    必要操作是迭代一个集合, 通常是构建在IN条件中的。

    指定的是list,有()和分隔符

    <foreach item="productIdList" index="index" collection="list" open="(" separetor="," close=")">
        #{productIdList}
    </foreach>
    
    • bind

    bind元素允许你在自定义变量(不用符合OGNL规范),并且应用到上下文中

    <select id="selectBlogsLike" resultType="Blog">
        <bind name="pattern" value="'%' + _parameter.getTitle() + '%'" />
        SELECT * FROM BLOG
        WHERE title LIKE #{pattern}
    </select>
    

    参考:

    MyBatis常用SQL语句整理笔记
    mybatis——select、insert、update、delete
    Mybatis 3.1中 Mapper XML 文件 的学习详解
    MyBatis动态SQL语法

    相关文章

      网友评论

          本文标题:《二》mybatis写法

          本文链接:https://www.haomeiwen.com/subject/oxgdpttx.html