<aside> 💡 硬编码和软编码的区别是:软编码可以在运行时确定,修改;而硬编码是不能够改变的。

</aside>

使用 Mapper 代理开发,不依赖字符串字面值;同时可以很好地利用 IDE 的代码补全功能。

Untitled

  1. 定义 Mapper 接口,和同名的 SQL 映射文件在同一个目录下。

    <aside> ⚠️ 关于“同一个目录下”的问题:

    .xml 这样的文件最好放在 resource 目录下,但又要求 Mapper 接口和对应的 SQL 映射文件编译后在同一个目录下。可以在 resources 文件夹里新建一个 目录,但是写目录名的时候不能用 . ,而是要用 / 做分隔符。

    </aside>

  2. 修改 SQL 映射文件的 namespace 属性

    <mapper namespace="com.itheima.mapper.UserMapper">
        <select id="selectAll" resultType="com.itheima.pojo.User">
            select * from tb_user;
        </select>
    </mapper>
    
  3. Mapper 接口中定义方法,方法名就是 id,并保持参数类型和返回值类型一致。

    <aside> ⚠️ 注意是返回对象还是返回集合,如果是返回集合的话,用 List<>

    </aside>

    public interface UserMapper {
        List<User> selectAll();
    }
    

    同时别忘了修改 MyBatis 配置文件:

    选中映射文件,右键 Copy Path → Path From Source Root 替换掉 MyBatis 配置文件里的 resource 属性

    如果工程规范,也可以用包扫描方式方式加载 SQL 映射文件:

    Untitled

  4. 编码

    //MyBatis 代理开发
    
    public class MyBatisDemo2 {
    
        public static void main(String[] args) throws IOException {
            //1. 加载 mybatis 的核心配置文件,获取 SqlSessionFactory
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    
            //2. 获取 SQLSession 对象,用它来执行 sql
            SqlSession sqlSession = sqlSessionFactory.openSession();
    
            //3. 获取 UserMapper 接口的代理对象
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            List<User> users = userMapper.selectAll();
    
            System.out.println(users);
    
            //4. 释放资源
            sqlSession.close();
        }
    }