mybatis常用标签

1.sql片段、给sql语句传入表达式、模糊查询、where标签
  <sql id="testId">id,user_name,age,sex</sql>
  <select id="findAll" parameterType="java.util.Map" resultMap="TestBean">
select 
<include refid="testId"/>  
from table1
<where>
1=1  
<if test="userName !=null and userName !=''">
and user_name LIKE CONCAT('%', #{userName},'%')    
</if>
<if test="age !=null and age !=''">
and age ${age}    
</if>
</where>
</select>
上面的user_name是数据库中对应的字段,userName是我们在实体bean中的字段,也就是我们从dao层给sql语句传入的参   数。
LIKE CONCAT('%', #{userName},'%')这是代表模糊查询。
如果传入正常的值用'#{}'接收,'${}'是用来接收表达式的,例如:我们从前端页面传入参数 age='in(12,13,15)' ,
mapper接收时会把它作为表达式处理,而不会当做字符串处理。
if标签是对sql语句的动态处理,如果传入的userName为空就会跳过它执行下面的,防止传入的值为空时报异常。
where标签是用来放我们的判断条件。
2.trim标签及它的属性的使用
<insert id="add" parameterType="TestBean" >
       insert into table2
    <trim prefix="(" suffix=")" suffixOverrides="," prefixOverrides="">
          <if test="id != null" >
                id,
          </if>
          <if test="userName != null" >
                user_name,
          </if>     
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides="," >
          <if test="id != null" >
                #{id,jdbcType=VARCHAR},
          </if>
          <if test="userName != null" >
                #{userName,jdbcType=VARCHAR},
          </if>    
    </trim>
  </insert>
prefix:给trim标签内的sql语句加上前缀。
suffix:给trim标签内sql语句加上后缀。
suffixOverrides:去除trim标签内sql语句多余的后缀内容,如:suffixOverrides=",",去除trim标签内sql语句多余的后缀","。
prefixOverrides:trim标签内sql语句多余的前缀内容
如果不加上面的属性,拼出来的sql语句是: insert into table2  id,user_name, '1','小明'    这显然是错误的。
加上属性之后是:insert into table2  (id,user_name) values (id,userName) 。

jdbcType=VARCHAR:使用varchar类型去给数据库进行映射。

3. choose ,when, otherwise标签
<sql id="testId">id,user_name,age,sex</sql>
<select id="find" parameterType="TestBean" resultMap="TestResultMap">     
select 
<include refid="testId"/> 
from table3 
<where>     
<choose>     
<when test="name!=null and name!='' ">     
name LIKE CONCAT(CONCAT('%', #{name}),'%')      
</when>     
<when test="age!= null and age!= '' ">     
AND age = #{age}      
</when>                  
<otherwise>     
AND sex = #{sex}  
</otherwise>     
</choose>     
</where>     
</select>     
choose语句与java中的switch语句类似,choose相当于switch,when相当于case,当when标签中有一个语句执行成功就会退出when标签,
otherwise相当于default,当when标签中的所有语句都不满足条件时就会执行otherwise。


4. foreach语句 ,主要迭代一个集合,通常是用于IN 条件。List 实例将使用“list”做为键,数组实例以“array” 做为键。
<select id="find" resultMap="TestResultMap">     
select 
<include refid="testId"/> 
from table1      
where id IN       
<foreach collection="list" item="testList"  open="(" separator="," close=")">     
#{testList}      
</foreach>         
</select> 
testList是我们传入的list的属性名。
open表示sql语句以什么开始,separator表示在每次进行迭代之间以什么符号作为分隔符,close表示sql语句以什么结束.

5.set标签
<update id="update" parameterType="TestBean" >
update table4
<set >
  <if test="userId != null" >
user_id = #{userId,jdbcType=VARCHAR},
  </if>
  <if test="userName != null" >
user_name = #{userName,jdbcType=VARCHAR},
  </if>  
</set>
where id = #{id,jdbcType=VARCHAR}

    </update>

6.bind标签

<select id="find" parameterType="TestBean" ResultMap="TestBean">

    <bind name="testName" value="'%'+parameter.getName()+'%'">

    select   *     from    table5

    where    name    like    #{testName} 

</select>

可以从OGNL表达式中创建一个变量,并将其绑定到上下文。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值