Mybatis 提供了映射器组件,通过接口+XML映射文件(注解)来动态产生一个映射器,完成实体类与数据表之间的映射。

实现映射器的步骤:

  1. 创建一个产生映射器的接口,并定义操作数据库的功能
public interface UserMapper {
    /**
     * 根据用户编号查询用户信息
     * @param id
     * @return
     */
    public User getUserById(int id);
}

2.创建一个映射文件(或者使用注解)

注意事项:映射文件需要和接口在同一级目录下,并且与接口名相同

<?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">
<!--
    mapper是根标签
        namespace属性:设置命名空间
        namespace的值和接口的全限定名称一致

        namespace属性的值+id属性的值 + SQL => 映射器
        通过映射器能够获取到接口的动态实现对象

        映射文件与接口名称一致,Mybatis就可以自动产生该接口的实现类
        这个实现类也重写了这个接口中的方法,这个重写接口中的方法是如何实现的?
-->
<mapper namespace="com.dyh.demo.dao.UserMapper">

    <!--
        select标签用于查询
            id属性:唯一标识,如果希望映射,id需要和接口中的方法名一致
            parameterType属性:设置参数的类型, 可以省略
                int 别名

            #{}  占位符   #{标识符}  代表接口中方法的参数,只能一个参数这么用

            resultType属性:设置返回类型, 在没有设置别名的情况下,
               这个返回值类型如果是类类型,必须写全限定类名

               Mybatis 映射的方式之一:
                自动映射 :  当指定了SQL语句和实体类型
                    如果知道哪些字段的数据与实体bean的属性对应

                    如果字段名称和实体类的属性名称一致,可以自动映射
                    会调用实例化bean并调用set方法注入值

                手动映射: resultMap

    -->
    <select id="getUserById"
            resultType="com.dyh.demo.pojo.User">

        select id , name, note from t_user where id = #{id}

    </select>
    
</mapper>

3.需要在主配置文件中加载映射器

<!--
        mappers指定多个映射文件路径
            mapper子标签指定一个映射文件路径
                url指定映射文件的网路路径
                resource:指定映射文件路径
                class:指定接口的全限定接口名


    <mappers>
        <mapper />
    </mappers>



    <mappers>
        <mapper class="com.dyh.demo.dao.UserMapper"/>
        <mapper class="com.dyh.demo.dao.BookMapper"/>
        <mapper class="com.dyh.demo.dao.OrderMapper"/>
        <mapper class="com.dyh.demo.dao.CourseMapper"/>
    </mappers>
    -->

    <mappers>
        <!--
            扫描指定的包,Mybatis会为指定包下
            所有映射器
                    接口+映射文件
                    接口+注解
            动态产生实现类对象
        -->
        <package name="com.dyh.demo.dao"/>
    </mappers>

4.测试类获取映射器

// oponSession返回的是DefaultSqlSession
        SqlSession session = factory.openSession();

        // 通过Mapper映射器获取指定接口的实现类的对象
        UserMapper mapper = session.getMapper(UserMapper.class);

        // 调用接口中的方法
        // 执行器执行的是代理对象重写后的方法
        User user = mapper.getUserById(1);