mybatis中mapper xml常用标签

一、SQL语句标签:

1、<!--查询语句-->  

<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.String" >

   select   

  </select> 

2、<!--插入语句-->  

<insert id="insert" parameterType="pojo.OrderTable" >  

 insert into ordertable (order_id, cid, address,   

      create_date, orderitem_id)  

    values (#{orderId,jdbcType=VARCHAR},#{cid,jdbcType=VARCHAR}, #{address,jdbcType=VARCHAR},   

     #{createDate,jdbcType=TIMESTAMP}, #{orderitemId,jdbcType=VARCHAR})

  </insert> 

3、<!--删除语句-->  

<delete id="deleteByPrimaryKey" parameterType="java.lang.String" >

delete from ordertable  

    where order_id = #{orderId,jdbcType=VARCHAR}  

</delete>  

4、<!--修改语句-->  

 <update id="updateByPrimaryKey" parameterType="pojo.OrderTable" >  

  update ordertable  

    set cid = #{cid,jdbcType=VARCHAR},  

      address = #{address,jdbcType=VARCHAR},  

      create_date = #{createDate,jdbcType=TIMESTAMP},  

      orderitem_id = #{orderitemId,jdbcType=VARCHAR}  

    where order_id = #{orderId,jdbcType=VARCHAR}  

  </update> 

1》需要配置的属性:

★id=“xxxx” ——表示此段sql执行语句的唯一标识,也是接口的方法名称【必须一致才能找到】

★parameterType=“xxxx” ——表示该sql语句中需要传入的参数, 类型要与对应的接口方法的类型一致【可选】

★resultMap=“xxx”—— 定义出参,调用已定义的映射管理器的id值

★resultType=“xxxx”——定义出参,匹配普通Java类型或自定义的pojo【出参类型若不指定,将为语句类型默认类型,如语句返回值为int】

2》注意: 至于为何 语句的返回值类型为什么是int,有过JDBC操作经验的朋友可能会有印象,增删改操作实际上返回的是操作的条数。而Mybatis框架本身是基于JDBC的,所以此处也沿袭这种返回值类型。

3》传参和取值:mapper.xml 的灵活性还体现在SQL执行语句可以传参,参数类型通过parameterType= “” 定义

★取值方式1:#{value jdbcType = valuetype}:jdbcType 表示该属性的数据类型在数据库中对应的类型,如 #{user jdbcType=varchar} 等价于 String username;

★取值方式2:${value } : 这种方式不建议大量使用,可能会发送sql注入而导致安全性问题。一般该取值方式可用在非经常变化的值上,如orderby ${columnName};

二、sql片段标签:通过该标签可定义能复用的sql语句片段,在执行sql语句标签中直接引用即可。这样既可以提高编码效率,还能有效简化代码,提高可读性

1》 需要配置的属性:id="" ———表示需要改sql语句片段的唯一标识

 2》引用:通过<include refid="" />标签引用,refid="" 中的值指向需要引用的<sql>中的id=""属性
1、<!--定义sql片段-->  

<sql id="orderAndItem">  

    o.order_id,o.cid,o.address,o.create_date,o.orderitem_id,i.orderitem_id,i.product_id,i.count  

  </sql>  

 <select id="findOrderAndItemsByOid" parameterType="java.lang.String" resultMap="BaseResultMap">  

    select  

2、<!--引用sql片段-->  

    <include refid="orderAndItem" />  

    from ordertable o  

    join orderitem i on o.orderitem_id = i.orderitem_id  

    where o.order_id = #{orderId}  

  </select>  

三、映射管理器resultMap:映射管理器,是Mybatis中最强大的工具,使用其可以进行实体类之间的关系,并管理结果和实体类间的映射关系

1》需要配置的属性:

id=""——表示这个映射管理器的唯一标识,外部通过该值引用;

type ="" ——表示需要映射的实体类;

2》 需要配置的参数:

标签指的是:结果集中结果唯一的列【column】 和 实体属性【property】的映射关系,

3》注意:标签管理的列未必是主键列,需要根据具体需求指定;

<result column= " " property=" " />  <result>标签指的是:结果集中普通列【column】 和 实体属性【property】的映射关系;

4》 需要维护的关系:所谓关系维护是值在主表查询时将其关联子表的结果也查询出来

四:常用的动态语句标签:通过动态sql标签可以进行条件判断,条件遍历等操作从而满足结果的需要

1》 : 使用其可以代替sql语句中的where关键字,一般防止在条件查询的最外层

2》:条件判断标签,配置属性test=" 条件字符串 ",判断是否满足条件,满足则执行,不满足则跳过

<select id="findOrderItemDetail" parameterType="pojo.Orderitem" resultMap="BaseResultMap">  

        select orderitem.orderitem_id,product.*   

        from orderitem,product  

        <where>  

            <if test="orderitemId!=null and orderitemId!=''">  

                and orderitem.orderitem_id = #{orderitemId}  

            </if>  

            <if test="productId!=null and productId!=''">  

                and orderitem.product_id = #{productId}  

            </if>  

            <if test="count!=null">  

                and orderitem.count = #{count}  

            </if>  

        </where>  

  </select>  

3》:常用于更新语句中,替代 sql中的“set”关键字,特别是在联合进行判断是,可以有效方式当某个参数为空或者不合法是错误的更新到数据库中

<update id="updateByPrimaryKeySelective" parameterType="pojo.Orderitem" >  

   update orderitem  

   <set >  

     <if test="productId != null" >  

       product_id = #{productId,jdbcType=VARCHAR},  

     </if>  

     <if test="count != null" >  

       count = #{count,jdbcType=INTEGER},  

     </if>  

   </set>  

   where orderitem_id = #{orderitemId,jdbcType=VARCHAR}  

 </update>  

4》 标签组:也是一个用于条件判断的标签组,和的不同之处在于条件从进入,去匹配中的添加,一旦匹配马上结束;若到找不到匹配项,将执行中的语句;可以理解为是 && 关系 是 || 关系

<!-- 查询学生list,like姓名、或=性别、或=生日、或=班级,使用choose -->       

<select id="getStudentListChooseEntity" parameterType="StudentEntity" resultMap="studentResultMap">       

    SELECT * from STUDENT_TBL ST        

    <where>       

        <choose>       

            <when test="studentName!=null and studentName!='' ">       

                    ST.STUDENT_NAME LIKE CONCAT(CONCAT('%', #{studentName}),'%')        

            </when>       

            <when test="studentSex!= null and studentSex!= '' ">       

                    AND ST.STUDENT_SEX = #{studentSex}        

            </when>       

            <when test="studentBirthday!=null">       

                AND ST.STUDENT_BIRTHDAY = #{studentBirthday}      

            </when>       

            <when test="classEntity!=null and classEntity.classID !=null and classEntity.classID!='' ">       

                AND ST.CLASS_ID = #{classEntity.classID}        

           </when>       

           <otherwise>                      

           </otherwise>       

        </choose>       

    </where>       

</select>     

5》标签:该标签的作用是遍历集合类型的条件

foreach元素的属性主要有 item,index,collection,open,separator,close。

    item表示集合中每一个元素进行迭代时的别名.

    index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置.

    open表示该语句以什么开始,separator表示在每次进行迭代之间以什么符号作为分隔 符.

    close表示以什么结束

用来循环 collection : 用来指定循环的数据的类型 可以填的值有:array,list,map item

<delete id="deleteByPriKeys" parameterType="java.lang.String">  

     delete from product where product_Id in  

     <foreach collection="list" item="productId" open="(" separator="," close=")">  

         #{productId,jdbcType = VARCHAR}  

     </foreach>  

 </delete>   

常用列表查询demo:

 <!-- 查询列表-->
    <select id="selectList" parameterType="TestPlayWspCompanyDTO" resultMap="TestPlayWspCompanyVOResult">
    	<include refid="selectTestPlayWspCompanyVo" />
    	<where>
    		<if test="partnerName != null and partnerName != ''">and partner_name like '%${partnerName}%'</if> 
    		<!-- CONCAT()函数用于将多个字符串连接成一个字符串 -->
    		<if test="realName != null and realName != ''">and real_name like concat('%',#{realName},'%')</if>
    		<if test="status != null ">and status =#{status}</if>
    		<!-- partners(1,2,3,4),编码串查询 ,传进来的可以是List,[](array),Map-->
    		<if test="partners !=null">
    			and partner in 
    			 <foreach item="str" collection="partners.split(',')" open="(" separator="," close=")">
            		#{str}
        		</foreach>
    		</if>
    		<!-- 创建时间查询,精确到时分秒 ,传入的是时间字符串 ,date_format函数还可以解析正常的字符串类型,%y%m%d %T格式=2008-12-29 02:10:23-->
    		<if test="createdTimeBegin != null and createdTimeBegin != ''"><!-- 转义符 &gt;  >   -->
			AND date_format(created_time,'%y-%m-%d %T') &gt;= date_format(#{createdTimeBegin},'%y%m%d %T')
			</if>
			<if test="createdTimeEnd != null and createdTimeEnd != ''"><!-- 转义符   &lt; <  -->
			AND date_format(created_time,'%y%m%d %T') &lt;= date_format(#{createdTimeEnd},'%y%m%d %T')
			</if>
			<!-- 审核时间查询,精确到时分秒,传入进来的是Date类型,数据库保存的是deteTime -->
    		 <if test="auditTimeBegin != null">
                and audit_time &gt;= #{auditTimeBegin}
            </if>
            <if test="auditTimeEnd != null">
                and audit_time &lt;= #{auditTimeEnd}
            </if>
    	</where>	
    </select>

一对一查询:尽量少去使用collection,association 标签去查询,因为如果查询有10条list,就会10次去查询关联表,io数据库的次数就多,尽量一条sql用搞定,一对多可以使用group_concat()搞定

//查询映射对象
 <resultMap type="TestPlayWspCompanyVO" id="TestPlayWspCompanyVOResult" extends="TestPlayWspCompanyResult" >
    	<association property="vehicleInfo" column="partner"  select="getVehicleInfo"/>  	
    </resultMap>

<!--  映射查车辆信息 -->
  <select id="getVehicleInfo" parameterType="java.lang.Integer" resultMap="TestPlayWspVehicleInfoResult">
	select id, partner, vehicle_type, carrying_capacity, vehicle_number, plate_number, valid_flag, created_by, 
	created_name, created_time, changed_by, changed_name, changed_time from test_play_wsp_vehicle_info
     where partner = #{partner,jdbcType=DECIMAL}
  </select>

 <!-- 车辆映射对应 -->
	<resultMap type="TestPlayWspVehicleInfo" id="TestPlayWspVehicleInfoResult">
        <result property="id"    column="id"    />
        <result property="partner"    column="partner"    />
        <result property="vehicleType"    column="vehicle_type"    />
        <result property="carryingCapacity"    column="carrying_capacity"    />
        <result property="vehicleNumber"    column="vehicle_number"    />
        <result property="plateNumber"    column="plate_number"    />
        <result property="validFlag"    column="valid_flag"    />
        <result property="createdBy"    column="created_by"    />
        <result property="createdName"    column="created_name"    />
        <result property="createdTime"    column="created_time"    />
        <result property="changedBy"    column="changed_by"    />
        <result property="changedName"    column="changed_name"    />
        <result property="changedTime"    column="changed_time"    />
    </resultMap>

分页:

<select id="queryPage" resultType="cn.com.bluemoon.model.manage.vo.servicearea.ServiceAreaPageVO">
            SELECT
                t.province_code,
                t.province_desc province_name,
                t.city_code,
                t.city_desc city_name,
                t.county_code,
                t.county_desc county_name,
                t.street_code,
                t.street_desc street_name,
                t2.id,
                t2.partner,
                t2.start_date,
                t2.end_date,
                t2.created_by,
                t2.created_name,
                t2.created_time
            FROM
                crmbp.crm_bp_area_info t
                LEFT JOIN wsp_service_area t2 ON t.street_code = t2.street_code AND t2.valid_flag = 0 and t2.start_date &lt;= current_date and t2.end_date &gt;=current_date
            <where>
                <if test="provinceCode != null">
                    and t.province_code = #{provinceCode}
                </if>
                <if test="cityCode != null">
                    and t.city_code = #{cityCode}
                </if>
                <if test="countyCode != null">
                    and t.county_code = #{countyCode}
                </if>
                <if test="streetCode != null">
                    and t.street_code = #{streetCode}
                </if>
            </where>
        ORDER BY t2.changed_time desc,t.street_code is null,t.street_code asc,t.county_code asc
        limit ${pageIndex*pageSize},${pageSize}

    </select>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值