zoukankan      html  css  js  c++  java
  • 复习mybatis框架(一)----映射文件

      参考博主的文章,尊重原创:https://blog.csdn.net/qq_35246620/article/details/54837618

    一、给出映射文件 Mapper.xml 的总结:

    ① 设置 namespace 命名空间,目的是为了区分映射文件中的方法;

    ② 结果集 resultMap 是 MyBatis 最大的特色,对象的 ORM 就由其来转换:

    • 在结果集中,包括主键 id 和 普通属性 result;
    • 在结果集中,常用的两个属性分别为:property,表示实体的属性;column,表示 SQL 查询的结果集的列。

    ③ 在映射文件中,常用的标签有四个,分别为: select、insert、update 和 delete:

    • 每个标签中都有 id 属性,在同一个 mapper 文件中 id 不允许重复;
    • 参数 parameterMap 已经被废弃,现在其存在的目的就是为了兼容前期的项目;
    • 参数 parameterType 支持很多的类型,例如 int、Integer、String、Double、List、Map 或者实体对象等;
    • 返回值 resultType 用于简单的类型;
    • 返回值 resultMap 用于复杂的类型;
    • 当参数和返回值是集合的时候,其声明的是集合中的元素类型;
    • SQL 语句不区分大小写,它默认使用 PrepareStatement,预编译,可以防止 SQL 注入。

    ④ 获取参数的方法为 #{ 字段名 }

    二、动态SQL语句:

      <!-- 查询功能,parameterType 设置参数类型,resultType 设置返回值类型 -->
        <select id="findAll" parameterType="yeepay.payplus.Person" resultType="Person">  <!-- 书写 SQL 语句 -->
            SELECT id,name,age FROM person
            <where>
                <if test="name =! null">
                    name = #{name}
                </if>
                <if test="age =! null">
                    and age = #{age}
                </if>
            </where>
        </select>
        <!-- 修改功能 -->
        <update id="update" parameterType="yeepay.payplus.Person">
            UPDATE person
            <set>
                <if test="name =! null">
                    name = #{name},
                </if>
                <if test="age =! null">
                    age=#{age},
                </if>
            </set>
            WHERE id = #{id}
        </update>
    

      

    三、删除功能,给出三种完成批量删除功能的方法,参数类型分别为:Array、List 和 Map。

     <!-- 批量删除,Array 类型    要删除的id在后面这个数组中取:new Integer[]{2, 3, 4}-->
        <delete id="deleteArray" parameterType="integer">
            DELETE FROM person WHEN id IN
            <foreach collection="array" item="id" open="(" close=")" separator=",">
                #{id}
            </foreach>
        </delete>  
        <!-- 批量删除,List 类型 list={1,2,3} -->
        <delete id="deleteList" parameterType="integer">
            DELETE FROM person WHEN id IN
            <foreach collection="list" item="id" open="(" close=")" separator=",">
                #{id}
            </foreach>
        </delete>
       <!-- 批量删除,Map 类型 map.put{}-->
     <!--在通过以下两条语句测试本方法时,实际上仅删除了 id = 3、4、5 中 age = 18 的记录 -->
    map.put("ids", new Integer[]{2, 3, 4}); map.put("age",18);
    <delete id="deleteMap" parameterType="Map"> DELETE FROM person WHERE id IN <foreach collection="ids" item="id" open="(" close=")" separator=","> #{id} </foreach> AND age = #{age} </delete>

     四、总结

    在使用动态 SQL 语句的时候,咱们需要多注意以下几点:

    1. 通过 if 标签来判断字段是否为空,如果为空,则默认不参与到 SQL 语句中,并且可以自动省略逗号;
    2. 通过 where 标签来输出条件完成判断,其可以自动省略多余的 and 和 逗号;
    3. 通过 set 标签来完成修改操作,当字段值为 null 时,其不参与到 SQL 语句中;
    4. 在 foreach 标签中,collection 属性表示传入的参数集合, item 表示每个元素变量的名字,open 表示开始字符,close 表示结束字符,separator 表示分隔符;
    5. 任何参数都可以封装到 Map 中,其以 key 来取值。

     

    五、注意用ORACLE数据库需要给每个字段加上默认的jdbcType

    测试以上功能的时候就会报出一个异常,即“java.sql.SQLException:无效的列类型(在外包项目中第三方要求用Oracle,经常遇到这个问题”,究其原因:

    Oracle 数据库,在进行新增、修改操作时,如果字段值为 null,必须指定字段默认的类型。

     <!-- 在 Oracle 数据中,完成修改功能 -->
     <!-- jdbcType 的类型为数据库中字段的类型,需要严格的对应。 -->

         <update id="update" parameterType="yeepay.payplus.Person">

            UPDATE person
            <set>
                name = #{name,jdbcType=VARCHAR},
                age=#{age,jdbcType=INTEGER}
            </set>
            WHERE id = #{id}
        </update>
  • 相关阅读:
    【Office】Word排版
    小猪的压力
    SQL SERVER 自定义函数参数数量对调用时参数数量的影响
    工作效率
    C#使用SharpZipLib编辑zip包中内容
    SQL SERVER——自定义函数
    C#字符串编码
    在ASP.NET中启动SQL SERVER缓存
    C#延迟加载
    C#格式化DateTime时间
  • 原文地址:https://www.cnblogs.com/xiaohouzai/p/8934586.html
Copyright © 2011-2022 走看看