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语句,主要用于实现某些简单的条件判断。文章来源:https://www.toymoban.com/news/detail-652363.html
<!--查询学生列表-->
<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>元素结合可以只更新需要更新的字段。文章来源地址https://www.toymoban.com/news/detail-652363.html
<!-- 修改学生信息 -->
<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>
到了这里,关于6.1 MyBatis基础的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!