Mybatis标签详解

发布时间:2023-05-20

MyBatis 教程

一、MyBatis介绍

MyBatis 是一种基于 Java 的持久层框架。它实现了 ORM(对象关系映射)技术,帮助开发者将 Java 对象与关系型数据库中的数据进行映射。MyBatis 将应用程序中的数据访问逻辑与 SQL 语句的编写和执行分离开来,从而更好地维护和优化应用程序。 MyBatis 的主要组成部分包括:SqlSessionFactorySqlSessionMapper 和 XML 映射文件。

二、MyBatis中Mapper详解

MyBatis 中的 Mapper 是用于定义 SQL 语句与 Java 接口方法之间的映射关系的。在 Mapper 中,我们可以使用 MyBatis 提供的标签来编写 SQL 语句,以及定义 Java 方法和 SQL 语句之间的映射关系。 Mapper 的创建一般有两种方式:基于 XML 的 Mapper 和基于注解的 Mapper。其中,基于 XML 的 Mapper 是最常见的方式,我们可以通过 XML 配置文件来定义 Mapper。 下面是一个基于 XML 的 Mapper 的代码示例:

<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
    <select id="getUserById" parameterType="int" resultType="com.example.pojo.User">
        select * from user where id = #{id}
    </select>
</mapper>

在上面的代码中,我们定义了一个名为 getUserById 的 SQL 查询语句,并将它映射到 int 类型的参数 idcom.example.pojo.User 类型的返回值上。

三、MyBatis Collection标签

MyBatis 的 Collection 标签用于处理一对多或多对多的关系,它可以将一个 Java 集合中的元素作为 SQL 的参数,或者将查询结果映射为一个 Java 集合。 Collection 标签包括 foreachwhere 两个子标签。其中,foreach 用于遍历 Java 集合,将集合中的元素作为 SQL 语句的参数进行传递;where 用于将多个条件语句组合成一个 SQL 语句的查询条件。 下面是一个基于 XML 的 Collection 标签的代码示例:

<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
    <select id="getUsersByIds" parameterType="list" resultType="com.example.pojo.User">
        select * from user where id in
        <foreach collection="list" item="id" open="(" separator="," close=")">
            #{id}
        </foreach>
    </select>
</mapper>

在上面的代码中,我们使用 foreach 标签遍历了名为 list 的 Java 集合,并将每个集合元素 id 作为 SQL 语句的参数进行传递。

四、MyBatis框架详解

MyBatis 作为一个持久层框架,其主要作用是将 Java 对象与关系数据库中的数据进行映射。它的实现过程包括:

  1. 通过 SqlSessionFactoryBuilder 创建 SqlSessionFactory 对象;
  2. 通过 SqlSessionFactory 获取 SqlSession 对象;
  3. 通过 SqlSession 对象获取 Mapper 接口的代理实例;
  4. 调用 Mapper 接口方法,执行 SQL 语句。 下面是一个基于 XML 的 MyBatis 框架的代码示例:
<!-- mybatis-config.xml -->
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driverClassName}" />
                <property name="url" value="${jdbc.url}" />
                <property name="username" value="${jdbc.username}" />
                <property name="password" value="${jdbc.password}" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/example/mapper/UserMapper.xml" />
    </mappers>
</configuration>
<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
    <select id="getUserById" parameterType="int" resultType="com.example.pojo.User">
        select * from user where id = #{id}
    </select>
</mapper>
// Java代码
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.getUserById(1);
sqlSession.close();

五、MyBatis标签大全

MyBatis 提供了众多的标签来支持我们编写 SQL 查询语句,常用的标签包括:

  • select:查询标签
  • resultType:查询结果类型标签
  • parameterType:参数类型标签
  • insert:插入标签
  • update:修改标签
  • delete:删除标签
  • if:条件判断标签
  • where:WHERE 查询条件标签
  • set:SET 更新字段标签
  • foreach:遍历集合标签
  • choose:多条件判断标签
  • trim:去除字符串首尾空格或逗号标签

六、MyBatis常用标签

下面是 MyBatis 中一些常用的标签及使用方法:

  • select:常用于执行查询操作,一般与 resultTypeparameterType 配合使用。
<!-- 查询用户信息 -->
<select id="getUserById" parameterType="int" resultType="com.example.pojo.User">
    SELECT * FROM user WHERE id = #{id}
</select>
  • insert:常用于插入数据操作,一般与 parameterType 配合使用。
<!-- 插入用户信息 -->
<insert id="addUser" parameterType="com.example.pojo.User">
    INSERT INTO user (username, password) VALUES (#{username}, #{password})
</insert>
  • update:常用于更新数据操作,一般与 parameterType 配合使用。
<!-- 更新用户信息 -->
<update id="updateUser" parameterType="com.example.pojo.User">
    UPDATE user SET password = #{password} WHERE id = #{id}
</update>
  • delete:常用于删除数据操作,一般与 parameterType 配合使用。
<!-- 删除用户信息 -->
<delete id="deleteUser" parameterType="int">
    DELETE FROM user WHERE id = #{id}
</delete>
  • if:常用于条件判断语句中,可以根据参数来动态生成 SQL 语句。
<!-- 根据名称查询用户信息 -->
<select id="getUserByName" parameterType="java.lang.String" resultType="com.example.pojo.User">
    SELECT * FROM user
    <where>
        <if test="name != null and name != ''">
            AND name = #{name}
        </if>
    </where>
</select>

七、MyBatis源码详解

MyBatis 的源码是 Java 语言编写的,其结构包括:

  • org.apache.ibatis:核心代码包
  • org.apache.ibatis.mapping:映射对象相关的代码包
  • org.apache.ibatis.parsing:解析 XML 文件相关的代码包
  • org.apache.ibatis.session:会话相关的代码包
  • org.apache.ibatis.transaction:事务相关的代码包
  • org.apache.ibatis.type:类型转换相关的代码包 MyBatis 源码中主要实现了以下功能:
  1. 通过配置对象 Configuration,读取指定的 XML 配置文件并解析其内容;
  2. 通过接口 SqlSession,封装 JDBC 操作,并提供 SQL 语句的执行功能;
  3. 通过接口 Executor,管理 SqlSession 与数据库连接的交互;
  4. 通过 MapperProxyFactoryMapperProxy,为 Mapper 接口生成代理实例,将 Java 接口与 XML 语句关联起来。