mybatis常用标签(refidforeachtrim)

Posted 遨游在知识的海洋里无法自拔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis常用标签(refidforeachtrim)相关的知识,希望对你有一定的参考价值。

1.问题来源

在之前查询数据库的时候基本都是使用

select * from student;
SELECT name, prod_price FROM products;

但是很多时候我们并不需要查询数据库中的全部字段,直接查全部字段会降低效率,同时很多字段的组合是经常被使用到的,每次都单独写出来很麻烦

2.Mybatis解决
对于上述问题,Mybatis的映射文件中为我们引入了<include refid="Base_Column_List" /> ,意思就是固定几个需要查询的字段,在sql语句中不需要写具体的字段了。具体使用如下:

<sql id="Base_Column_List">
    id, username, password, email, phone, question, answer, role, create_time, update_time
</sql>
 
<select id="selectByUsername" parameterType="java.lang.String" resultMap="BaseResultMap">
    select
    <include refid="Base_Column_List" />
    from mall_user
    where username = #username,jdbcType=VARCHAR
</select>


2、mybatis动态sql中foreach标签的使用

foreach标签主要用于构建in条件,他可以在sql中对集合进行迭代。如下:

<delete id="deleteBatch"> 

delete from user where id in

<foreach collection="array" item="id" index="index" open="("  close=")" separator=","> #id </foreach>

</delete>

我们假如说参数为----  int[] ids = 1,2,3,4,5  ----那么打印之后的SQL如下:

delete form user where id in (1,2,3,4,5)
释义:
collection:collection属性的值有三个分别是list、array、map三种,分别对应的参数类型为:List、数组、map集合,我在上面传的参数为数组,所以值为array

item :表示在迭代过程中每一个元素的别名

index:表示在迭代过程中每次迭代到的位置(下标)

open :前缀

close:后缀

separator:分隔符,表示迭代时每个元素之间以什么分隔

我们通常可以将之用到批量删除、添加等操作中。

相当于mysql里的游标!!!


3、mybatis动态sql中的trim标签的使用


trim标记是一个格式化的标记(format),可以完成set或者是where标记的功能,如下代码:

1、

select * from user 

<trim  prefix="WHERE" prefix override="AND |OR">

<if test="name != null and name.length()>0"> AND name= #name</if>

<if test="gender != null and gender.length()>0"> AND gender= #gender</if>

</trim>

假如说name和gender的值都不为null的话打印的SQL为:

select * from user where   #  name = 'xx' and gender = 'xx'

在红色# 标记的地方是不存在第一个and的,上面两个属性的意思如下:

prefix:前缀      

prefixoverride:去掉第一个and或者是or

2、

update user

<trim prefix="set" suffix override="," suffix=" where id =#id ">

<if test="name != null and name.length()>0"> name=#name ,</if>

<if test="gender != null and gender.length()>0"> gender=#gender , </if>

</trim>

假如说name和gender的值都不为null的话打印的SQL为:

update user set name='xx' , gender='xx' #  whereid='x'

在红色标记的地方不存在逗号,而且自动加了一个set前缀和where后缀,上面三个属性的意义如下,其中prefix意义如上:

suffixoverride:去掉最后一个逗号(也可以是其他的标记,就像是上面前缀中的and一样)

suffix:后缀

以上是关于mybatis常用标签(refidforeachtrim)的主要内容,如果未能解决你的问题,请参考以下文章

MyBatis常用标签及标签使用技巧

MyBatis03配置文件中的常用标签及属性

mybatis常用标签

mybatis常用标签(转)

mybatis常用的动态标签

[刘阳Java]_MyBatis_映射文件的常用标签总结_第5讲