• mybatis使用小记


    参考资料:http://blog.csdn.net/hupanfeng/article/details/9098453

    1、设置不缓存每次查询的结果:

    如题,通过设置 flushCache="true" useCache="false" 两个属性来达到目的。

    flushCache

    将其设置为true,不论语句什么时候被调用,都会导致缓存被清空。默认值:false。

    useCache

    将其设置为true,将会导致本条语句的结果被缓存。默认值:true。

    2、返回类型的设置:

    resultType、resultMap不可同时使用(虽然都指定这两个属性时不会报错)。

    前者将数据库表的字段名映射成指定的字段名,并封装成指定的对象;后者将数据库表字段名映射成返回类型里同名字段,若有些字段在返回类型里没有对应字段则可能出错。

    3、insert语句返回自增主键值

    方法之一是在insert标签里加上useGeneratedKeys="true", keyProperty="addedTime" 这两个属性,其中addedTime是传入参数之一,插入后返回的最新主键值将赋给该变量,程序中就可以通过该传入参数获得新主键值。

    4、MyBatis SQL语句中 foreach的使用

      相关资料:http://blog.csdn.net/isea533/article/details/21237175

      示例如下。foreach可对三种对象做循环,分别为List,[](array),Map三种。collection指出相对哪个元素做循环,item循环中的具体对象,index指序号(List、数组中)或key(map中)。

        <insert id="insertPostImgsInfo" parameterType="map"> <!--传入的参数为map对象:{'postId':xxx, 'imgPath': [...] }-->
            insert into post_img (pid,img_order,img_location) values
            <foreach collection="imgPath" item="item" index="index"
                separator=",">
                (
                #{postId},#{index},#{item}
                )
            </foreach>
        </insert>

    5、关于#{}和${}

      默认情况下,前者有占位符的效果,使用#{}语法,MyBatis会产生PreparedStatement语句,并且安全地设置PreparedStatement参数,这个过程中MyBatis会进行必要的安全检查和转义;而后者则是直接拼接,传入什么就是什么。示例如下:

    执行SQL:Select * from emp where name = #{employeeName}
    参数:employeeName=>Smith
    解析后执行的SQL:Select * from emp where name = ?
    并设置参数为 'Smith'
    
    执行SQL:Select * from emp where name = ${employeeName}
    参数:employeeName传入值为:Smith
    解析后执行的SQL:Select * from emp where name =Smith

    总的来说:$y=2x+x^2$

      ${}方式会引发SQL注入的问题,同时也会影响SQL语句的预编译,所以从安全性和性能的角度出发,能使用#{}的情况下就不要使用 ${}

      而对于动态表名、动态字段、排序字段,则只能使用${}才能达到预期的功能。注意:当使用${}参数作为字段名或表名时,需要指定statementType=STATEMENT,而使用#{}时不能有该语句

    6、MyBatis使用like查询:select * from person where name  like "%"#{name}"%"

    7、MyBatis批量插入:

     1 <!--参数是一个map,包含userId和arrayJourneyData两字段,后者是一个数组-->
     2     <insert id="insertJourneyBatch" parameterType="map">
     3         insert into
     4         train_journey
     5         (
     6         user_id,
     7         local_journey_id,
     8         begin_time,
     9         end_time,
    10         journey_type,
    11         begin_latitude,
    12         end_latitude,
    13         begin_longitude,
    14         end_longitude,
    15         driving_mode,
    16         duration,
    17         rapid_acc_times,
    18         rapid_turn_times,
    19         acc_score,
    20         turn_score,final_score
    21         )
    22         values
    23         <foreach collection="arrayJourneyData" item="item" index="index"
    24             separator=",">
    25             (
    26             #{userId},
    27             #{item.localJourneyId},
    28             #{item.beginTime},
    29             #{item.endTime},
    30             #{item.journeyType},
    31             #{item.beginLatitude},
    32 
    33             #{item.endLatitude},
    34             #{item.beginLongitude},
    35             #{item.endLongitude},
    36             #{item.drivingMode},
    37             #{item.duration},
    38 
    39             #{item.rapidAccTimes},
    40             #{item.rapidTurnTimes},
    41             #{item.accScore},
    42             #{item.turnScore},
    43             #{item.finalScore}
    44             )
    45         </foreach>
    46     </insert>
    View Code

     8、MyBatis批量查询

     1     <!--参数是个[{},{},..],数组每个元素包含userId、beginTime两字段-->
     2     <select id="selectLatestGpsInJourneyByUseridBegintime" parameterType="list" resultType="map">
     3         select
     4         user_id as userId,
     5         timestamp,
     6         latitude,
     7         longitude,
     8         speed,
     9         bearing
    10         from train_feature_new
    11         where
    12         <foreach item="item" index="index" collection="list" open="(" separator="or" close=")">user_id=#{item.userId} and journey_time=#{item.beginTime}</foreach>
    View Code
  • 相关阅读:
    Java中返回参数值的几种状态
    Java中的二维数组
    Java foreach操作(遍历)数组
    Arrays 类操作 Java 的数组排序
    Java循环语句 for
    Java循环语句 while
    Java条件语句 switch case
    Java多重if....else if
    margin优化的一种思路
    5.命名规则
  • 原文地址:https://www.cnblogs.com/z-sm/p/4655678.html
Copyright © 2020-2023  润新知