6.1 MyBatis基础

本文介绍了MyBatis,一个支持SQL查询和高级映射的持久层框架,对比了与JDBC的关系,详细讲解了其工作原理、配置元素如<mapper>和SQL映射,以及动态SQL的使用。

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

1.MyBatis概述

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

MyBatis是一个支持普通SQL查询、存储过程以及高级映射的持久层框架,它消除了几乎所有的JDBC代码和参数的手动设置以及对结果集的检索,使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录,使得Java开发人员可以使用面向对象的编程思想来操作数据库。

2.MyBatis工作原理

MyBatis框架是一个ORM(Object/Relation Mapping,即对象关系映射)框架。所谓的ORM就是一种为了解决面向对象与关系型数据库中数据类型不匹配的技术,它通过描述Java对象与数据库表之间的映射关系,自动将Java应用程序中的对象持久化到关系型数据库的表中。

使用ORM框架后,应用程序不再直接访问底层数据库,而是以面向对象的方式来操作持久化对象,ORM框架会通过映射关系将这些面向对象的操作转换成底层的SQL操作,ORM框架的工作原理如下图所示。

3.MyBatis与JDBC对比

JDBC

MyBatis

SQL与代码耦合度高
代码冗长、开发效率低

SQL与代码耦合度高
代码冗长、开发效率低

4.常用配置元素

MyBatis映射文件中的常用元素有<mapper>、<insert>、<delete>、<update>、<select>、<resultMap>、<sql>等。

属性

说明

<mapper>

映射文件的根元素,该元素只有一个namespace属性(命名空间)。

<select>

用于映射查询语句。

<insert>

用于映射插入语句。

<delete>

用于映射删除语句。

<update>

用于映射更新语句。

<resultMap>

描述数据库结果集和对象的对应关系。

<sql>

可以重用的SQL块,也可以被其他语句使用。

<select>元素

<select>元素用来映射查询语句,它可以从数据库中查询数据并返回。使用<select>元素执行查询操作示例代码如下:

<!--查询单个学生信息-->
<select id="queryStudent" parameterType="java.lang.String" resultType="com.wfit.boot.model.Student">
    select *
    from t_student
    where id = #{id}
</select>
  • id,表示命名空间中<select>元素的唯一标识,通过该标识可以调用这条查询语句。

  • parameterType ,它是一个可选属性,用于指定SQL语句所需参数类的全限定名或者别名,其默认值是unset。

  • resultType,用于指定执行这条SQL语句返回的全限定类名或别名。

<insert>元素

<insert>元素用于映射插入语句,在执行完<insert>元素中定义的SQL语句后,会返回插入记录的数量。使用< insert >元素执行插入操作示例代码如下:

<!--新增学生信息-->
<insert id="saveStudent" parameterType="com.wfit.boot.model.Student">
insert into t_student values(
            #{id},
            #{name},
            #{age},
            #{sex},
            #{birthday},
            #{idCard},
            #{phone}
    )
</insert>

<update>元素

<update>元素用于映射更新语句,它可以更新数据库中的数据。在执行完元素中定义的SQL语句后,会返回更新的记录数量。使用<update>元素执行更新操作示例代码如下:

<!--修改学生信息-->
<update id="updateStudent" parameterType="com.wfit.boot.model.Student">
    update t_student
    set name = #{name},age = #{age}
    where id = #{id}
</update>

<delete>元素

<delete>元素用于映射删除语句,在执行完<delete>元素中的SQL语句之后,会返回删除的记录数量。使用<delete>元素执行删除操作示例代码如下所示:

<!--删除学生信息-->
<delete id="delStudent" parameterType="java.lang.String">
    delete from t_student where id = #{id}
</delete>

5.动态SQL

在实际项目的开发中,开发人员在使用JDBC或其他持久层框架进行开发时,经常需要根据不同的条件拼接SQL语句,拼接SQL语句时还要确保不能遗漏必要的空格、标点符号等,这种编程方式给开发人员带来了非常大的不便,而MyBatis提供的SQL语句动态组装功能,恰能很好地解决这一问题。

动态SQL常用元素<if>、<choose>(<when>、<otherwise>)、<where>、<trim>、<set>、<foreach>等。

属性

说明

<if>

判断语句,用于单条件判断

<choose>(<when>、<otherwise>)

相当于Java中的switch...case...default语句,用于多条件判断

<where>

简化SQL语句中where的条件判断

<trim>

可以灵活地去除多余的关键字

<set>

用于SQL语句的动态更新

<foreach>

循环语句,常用于in语句等列举条件中

<if>元素

在MyBatis中,<if>元素是最常用的判断元素,它类似于Java中的if语句,主要用于实现某些简单的条件判断。

<!--查询学生列表-->
<select id="queryStudent" resultType="Student" parameterType="java.util.Map">
    select *
    from t_student
    where 1 = 1
    <if test='name != null and name != ""'>
        and name like CONCAT('%',#{name},'%')
    </if>
    <if test='idCard != null and idCard != ""'>
        and idcard like CONCAT('%',#{idCard},'%')
    </if>
</select>

<set>元素

<set>元素主要用于更新操作,它可以在动态SQL语句前输出一个set关键字,并将SQL语句中最后一个多余的逗号去除。<set>元素与<if>元素结合可以只更新需要更新的字段。

<!-- 修改学生信息 -->
<update id="updateStudent" parameterType="java.util.Map">
    update t_student
    <set>
        <if test='name != null and name != ""'>
            name = #{name},
        </if>
        <if test='idCard != null and idCard != ""'>
            idcard = #{idCard},
        </if>
    </set>
    where id = #{id}
</update>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

田园Coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值