码迷,mamicode.com
首页 > 数据库 > 详细

mybatis 数据库语句 标签

时间:2015-08-28 19:47:30      阅读:331      评论:0      收藏:0      [点我收藏+]

标签:

一 . 更新,插入 返回 主键

这个其实是有好几种问题的,先把网上那种先 生成key,再返回的到实体类中的
使用数据库自定义函数nextval(‘student’) ,生成一个key,并把他设置到传入的实体类中的studentId属性上。在执行完此方法后,把该 key 赋值给 studentId属性

    <insert id="createStudent" parameterType="data.model.StudentEntity" keyProperty="studentId">  
        <selectKey keyProperty="studentId" resultType="String" order="BEFORE">  
            select nextval(‘student‘)  
        </selectKey>  
        INSERT INTO STUDENT_TBL(STUDENT_ID, STUDENT_SEX,  STUDENT_PHOTO)  
        VALUES (#{studentId},  #{studentSex},    
                #{studentPhoto, javaType=byte[], jdbcType=BLOB, typeHandler=org.apache.ibatis.type.BlobTypeHandler})  
    </insert> 

再是一种 ID 是自增长的
这里参数我传入的是 map
设置 useGeneratedKeys=”true” 自增长
keyProperty=”ID” 这个ID 实际就是指的数据库自增长的那个字段,在insert完成后会默认填充给他,执行完成后 在map里面取到对应的key获取value就可以了

 <insert id="insertTaxiOrder"   parameterType="map" useGeneratedKeys="true"  keyProperty="ID" > 

      INSERT INTO  tb_TaxiOrderInfo ( UserID, DriverID, StartAddress) 
      VALUES  (#{userID}, 0, #{StartAdd}})
    </insert>

属性 描述 取值
1.keyProperty selectKey 语句生成结果需要设置的属性。

2.resultType 生成结果类型,MyBatis 允许使用基本的数据类型,包括String 、int, map类型。

3.order
3.1:BEFORE,会先选择主键,然后设置keyProperty,再执行insert语句;
3.2:AFTER,就先运行insert 语句再运行selectKey 语句。

4.statementType MyBatis 支持STATEMENT,PREPARED和CALLABLE 的语句形式, 对应Statement ,PreparedStatement 和CallableStatement 响应

二 . if 的用法

2.1这个我传入的参数是 map形式的,在mapper中的sql语句中可以用 if进行判断 参数值是否为null,才会看是否执行if中的代码块,数字也是可以的

    <select id="registerCYUser" parameterType="map"  resultType="map">
        SELECT    WorkStaffID, ISNULL(PWD,‘‘)  AS PWD, WorkType
        from tb_WorkStaff
        WHERE 

        WorkType = #{WorkType} 
        <if  test="CarNum != null">  
           AND
        CarNum = #{CarNum}
       <if  test="CarNum == null">  
           AND
        CarNum = #{CarNum}
        </if>
    </select>

2.2 如果参数传入的是实体类,也可以这样判断

网上的就下面这样拿过来,在if中进行判断

<select id="StudentLis" resultMap="studentResult" parameterType="model.StudentEntity">  
    SELECT ST.STUDENT_ID, ST.STUDENT_NAME,  
    FROM STUDENT_TBL ST   
     WHERE  
    <if test="studentSex != null and studentSex != ‘‘ ">  
        AND ST.STUDENT_SEX = #{studentSex, jdbcType=INTEGER}  
    </if>  
    <if test="placeEntity != null and placeEntity.placeId != null and placeEntity.placeId != ‘‘ ">  
        AND ST.PLACE_ID = #{placeEntity.placeId, jdbcType=VARCHAR}  
    </if>  
</select>

2.3 if 和 set 使用组合 更新 update

    <update id="updateZSInfo" parameterType="map">
        UPDATE tb_OrdinaryUser 
          <set>
             <if test="UserName != null">
               UserName = #{UserName},
             </if>
             <if test="Phone != null">
               Phone = #{Phone},
             </if>
             <if test="Email != null">
               Email = #{Email},
             </if>
           </set> 
        WHERE userID = #{UserId} 
    </update>

三 . trim 关键字的使用

3.1 trim 替代 where

    <select id="if_trim" resultMap="studentEntity">  
    SELECT ST.STUDENT_ID,  
           ST.STUDENT_NAME,  
         FROM STUDENT_TBL ST   
       <trim prefix="WHERE" prefixOverrides="AND|OR">  
        <if test="studentName !=null ">  
            ST.STUDENT_NAME LIKE CONCAT(CONCAT(‘%‘, #{studentName, jdbcType=VARCHAR}),‘%‘)  
        </if>  
        <if test="studentSex != null and studentSex != ‘‘ ">  
            AND ST.STUDENT_SEX = #{studentSex, jdbcType=INTEGER}  
        </if>  
        <if test="studentBirthday != null ">  
            AND ST.STUDENT_BIRTHDAY = #{studentBirthday, jdbcType=DATE}  
        </if>  
       </trim>     
    </select>  

3.2 trim代替 set

  <update id="update_trim" parameterType="StudentEntity">  
    UPDATE STUDENT_TBL  
        <trim prefix="SET" suffixOverrides=",">  
            <if test="studentName != null and studentName != ‘‘ ">  
                STUDENT_TBL.STUDENT_NAME = #{studentName},  
            </if>  
            <if test="studentSex != null and studentSex != ‘‘ ">  
                STUDENT_TBL.STUDENT_SEX = #{studentSex},  
            </if>  
        </trim>  
    WHERE STUDENT_TBL.STUDENT_ID = #{studentId}  
  </update>  

四 . choose

4.1 choose 是集合 when 和 otherwise 使用的

<!-- 6 choose(判断参数) - 按顺序 将判断成功进入第一个进入 when执行的语句     作为where条件 

   如果when 都没有进入 ,就会进入 otherwise 中执行-->  
<select id="choose" resultMap="studentEntity" parameterType="StudentEntity">  
    SELECT ST.STUDENT_ID,  
           ST.STUDENT_NAME,  
      FROM STUDENT_TBL ST   
    <where>  
        <choose>  
            <when test="studentName !=null ">  
                ST.STUDENT_NAME LIKE CONCAT(CONCAT(‘%‘, #{studentName, jdbcType=VARCHAR}),‘%‘)  
            </when >  
            <when test="studentBirthday != null ">  
                AND ST.STUDENT_BIRTHDAY = #{studentBirthday, jdbcType=DATE}  
            </when >  
            <otherwise>  


            </otherwise>  
        </choose>  
    </where>    
</select>  

五 . foreach

这个比自己在外部for循环执行,效率会快很多。

foreach一共有三种类型,分别为List,,Map三种

item :循环体中的具体对象。支持属性的点路径访问,如item.age,item.info.details。
具体说明:在list和数组中是其中的对象,在map中是value。
该参数为必选。

collection: 要做foreach的对象,作为入参时,List

  <select id="foreach_array" resultMap="bb" parameterType="aa">  
    SELECT xx._ID,  
           xx._NAME,  

      FROM XXXX xx
      WHERE xx._ID 

      IN   
     <foreach collection="array" item="classId"  open="(" separator="," close=")">  
        #{classId}  
     </foreach>  
  </select>

5.2 配合 in 使用 参数传入一个list

<select id="countByUserList" resultType="_int" parameterType="list">  
select count(*) from users  
  <where>  
    id in  
    <foreach item="item" collection="list" separator="," open="(" close=")" index="">  
      #{item.id, jdbcType=NUMERIC}  
    </foreach>  
  </where>  
</select>  

5.3 批量插入
方式1

     insert into aa ( depart1, depart2 ) values
      <foreach collection="list" item="item" index="index"
      separator=",">
      ( #{item.depart1}, #{item.depart2} )
      </foreach>

方式2

    insert into table(aa,bb)
    <foreach collection="list" item="item" index="index" separator="union all">
     select #{item.hkgs,aa=VARCHAR}, #{item.bb,jdbcType=VARCHAR},
     } from dual
    </foreach>

5.4 批量删除

  <delete id="dd" parameterType="list">
        DELETE FROM LD_USER WHERE ID in 
        <foreach item="item" index="index" collection="list" open="(" separator="," close=")">
        #{item}
        </foreach>
  </delete>

5.5 批量修改

      <update id="update" parameterType="list">
          update table set age = ‘0‘ where no in
          <foreach collection="list" item="nos" open="(" separator="," close=")">
           #{nos}
         </foreach>
         </update>

5.6 批量条件查询

<select id="sel" resultType="int">  
        select count(*) from aa  where  
        <foreach item="item" index="key" collection="map"  
            open="" separator="AND" close="">
            ${key} = #{item}</foreach>  
    </select> 

$ {} 是原样输出, #{} 是取值

版权声明:本文为博主原创文章,未经博主允许不得转载。

mybatis 数据库语句 标签

标签:

原文地址:http://blog.csdn.net/kongbaidepao/article/details/48056449

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!