Mybatis标签快速入门

本文详细介绍了MyBatis中<select>,<update>,<delete>,<resultMap>,<if>,<foreach>,<choose>,<where>,<set>,<trim>等标签的用法,以及如何处理参数类型和结果映射,展示了在动态SQL生成中的常见操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mybatis介绍

官网地址: https://mybatis.org/mybatis-3/zh/index.html

  • MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。

  • MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。

  • MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

  • MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。

  • 2013年11月迁移到Github。

Mybatis标签

select标签:

  • id :唯一的标识符.

  • parameterType:传给此语句的参数的全路径名或别名 例:com.test.aaa.User或user

  • resultType :语句返回值类型或别名。注意,如果是集合,那么这里填写的是集合的泛型,而不是集合本身(resultType 与resultMap 不能并用)

<select id="userList" parameterType="user" resultType="User">
    select * from user where name =#{name}
</select>

update/insert/delete

  • id :唯一的标识符

  • parameterType:传给此语句的参数的全路径名或别名 例:com.test.aaa.User

<delete id="deleteUser" parameterType="int"> 
  delete from user where id = #{id} 
</delete>

resultMap标签:

  • id:该resultMap的标志(type类的别名)

  • type:返回值的类名,此例中返回EStudnet类全路径名

result标签:
  • property 类属性名

  • column 列名

<resultMap type="com.test.aaa.User" id="UserMap">
    <result property="userId" column="user_id"/>
    <result property="userName" column="user_name"/>
</resultMap>

if 标签:

  • if 判断条件是否为真,为真时拼接标签内的sql

<select id=" getStudentName " parameterType="Student" resultMap="studentMap">    
select * from student ST      
<if test="studentName!=null and studentName!='' ">     
    WHERE ST.student_name LIKE CONCAT(CONCAT('%', #{studentName}),'%')      
</if>   
</select> 

foreach 标签:

  • collection :其属性的值有三个分别是list、array、map三种,对应的参数类型为:List、数组、map集合

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

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

  • open :前缀

  • close :后缀

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

<select id="getUserList" parameterType="list" resultType="map">
    select user_id,user_name from user where user_id in
    <foreach collection="list" index="item" item="item" open="(" separator="," close=")">
            #{item}
    </foreach>
</select>

choose 标签:

  • 有时候我们并不想应用所有的条件,而只是想从多个选项中选择一个。MyBatis提供了choose 元素,按顺序判断when中的条件出否成立,如果有一个成立,则choose结束。当choose中所有when的条件都不满则时,则执行 otherwise中的sql。类似于Java 的switch 语句,choose为switch,when为case,otherwise则为default。

  • if是与(and)的关系,而choose是或(or)的关系。

<select id="getStudent" parameterType="Student" resultMap="studentMap">     
    select * from student st      
    <where>     
        <choose>     
            <when test="studentSex!= null and studentSex!= '' ">     
                    AND st.student_sex = #{studentSex}      
            </when>     
            <when test="studentBirthday!=null">     
                AND ST.student_birthday = #{studentBirthday}      
            </when>     
            <otherwise>     
                  AND ST.class_id = #{classEntity.classID}      
            </otherwise>     
        </choose>     
    </where>     
</select> 

Where标签:

  • 如果where包含的标签中有返回值的话,它就插入一个‘where’。此外,如果标签返回的内容是以AND 或OR 开头的,则它会剔除掉。

<select id="getStudent" parameterType="Student" resultMap="studentMap">   
    select * from student ST      
    <where>     
        <if test="studentName!=null and studentName!='' ">     
            ST.student_name like CONCAT(CONCAT('%', #{studentName}),'%')      
        </if>     
        <if test="studentSex!= null and studentSex!= '' ">     
            AND ST.student_sex = #{studentSex}      
        </if>     
    </where>     
</select>    

set+if标签:

  • 使用set标签可以将动态的配置SET 关键字,和剔除追加到条件末尾的任何不相关的逗号。

  • 需要配合if标签使用

<update id="updateStudent" parameterType="Student">     
    update student     
    <set>     
        <if test="studentName!=null and studentName!='' ">     
            student_name = #{studentName},      
        </if>     
        <if test="studentSex!=null and studentSex!='' ">     
            student_sex = #{studentSex},      
        </if>        
    </set>     
    WHERE student_id = #{studentID};      
</update>     

trim标签:

  • prefix : 给sql语句拼接的前缀

  • suffix : 给sql语句拼接的后缀

  • prefixOverrides : 去除sql语句前面的关键字或者字符,该关键字或者字符由prefixOverrides属性指定,假设该属性指定为"AND",当sql语句的开头为"AND",trim标签将会去除该"AND"

  • suffixOverrides : 去除sql语句后面的关键字或者字符,该关键字或者字符由suffixOverrides属性指定

<insert id="insertStudent" parameterType="com.test.aaa.Student">
        insert into student
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="studentId != null">student_id,</if>
            <if test="studentName != null">student_name,</if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="studentId != null">#{studentId},</if>
            <if test="studentName != null">#{studentName},</if>
        </trim>
    </insert>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值