在软件开发三层模式的持久层中,mybatis被广泛认为是可用的最简单的持久化框架之一。

    mybatis提供一种“半自动化”的ORM实现,重点维护了POJO与SQL之间的映射关系。它的基本配置,这里就暂不赘述了,我们重点讲一下它的流程及其SQL常用实现。

    当我们完成基本的配置之后,将按照下面的流程逐步执行。

    1、加载配置并初始化。开始加载配置文件,将SQL的配置信息加载成为一个个MappedStatement对象(包括了传入参数映射配置、执行的SQL语句、结果映射配置),存储在内存中。

    2、接收调用请求。调用Mybatis提供的API,为SQL的ID和传入参数对象,将请求传递给下层的请求处理层进行处理。

    3、处理操作请求。API接口层传递请求过来,为SQL的ID和传入参数对象。处理过程:a、根据SQL的ID查找对应的MappedStatement对象;b、根据传入参数对象解析MappedStatement对象,得到最终要执行的SQL和执行传入参数;c、获取数据库连接,根据得到的最终SQL语句和执行传入参数到数据库执行,并得到执行结果;d、根据MappedStatement对象中的结果映射配置对得到的执行结果进行转换处理,并得到最终的处理结果;e、释放连接资源。
    4、返回处理结果将最终的处理结果返回。
 
    下面我们以一个实际的xml文件来熟悉一下实体结果和SQL之间的映射关系的实现。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-mybatis.org/DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!-- 上面的两句描述是mybatits的SQL映射固定写法 -->

<!-- 下面的mapper根节点表示mybatits的SQL映射的内容,他们拥有一个namespace命名空间,它的值是一个接口的全路径,表示下面的内容与命名空间路径的接口存在映射关系 -->

</resultMap>

<!-- >
insert into t_user(id,user_name,sex) values (null,#{u.userName},#{u.sex})
</insert>

<!-- 动态SQL包括foreach,set--if,where--if,trim--if,include--sql,choose--when -->

 

<!-- 动态SQL之foreach的用法 -->
<insert >
(#{u.userName},#{u.sex})
</foreach>
</insert>


<!-- 动态SQL之set if的用法 -->
update t_user
<set>
<if test="u.userName != null">
user_name = #{u.userName},
</if>

<if test="u.sex != null">
sex = #{u.sex}
</if>

</set>

<where>
id = #{id}
</where>
</update>

 

<!--使用resultMap-->

<select >
and sex like CONCAT('%',#{sex},'%')
</when>
<otherwise>1=1</otherwise>
</choose>
</where>
</select>

</mapper>

    

 

相关文章: