<aside> 💡 硬编码和软编码的区别是:软编码可以在运行时确定,修改;而硬编码是不能够改变的。
</aside>
使用 Mapper 代理开发,不依赖字符串字面值;同时可以很好地利用 IDE 的代码补全功能。
定义 Mapper 接口,和同名的 SQL 映射文件在同一个目录下。
<aside> ⚠️ 关于“同一个目录下”的问题:
.xml 这样的文件最好放在 resource 目录下,但又要求 Mapper 接口和对应的 SQL 映射文件编译后在同一个目录下。可以在 resources 文件夹里新建一个 目录,但是写目录名的时候不能用 .
,而是要用 /
做分隔符。
</aside>
修改 SQL 映射文件的 namespace 属性
<mapper namespace="com.itheima.mapper.UserMapper">
<select id="selectAll" resultType="com.itheima.pojo.User">
select * from tb_user;
</select>
</mapper>
Mapper 接口中定义方法,方法名就是 id,并保持参数类型和返回值类型一致。
<aside> ⚠️ 注意是返回对象还是返回集合,如果是返回集合的话,用 List<>
</aside>
public interface UserMapper {
List<User> selectAll();
}
同时别忘了修改 MyBatis 配置文件:
选中映射文件,右键 Copy Path → Path From Source Root 替换掉 MyBatis 配置文件里的 resource 属性
如果工程规范,也可以用包扫描方式方式加载 SQL 映射文件:
编码
//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();
}
}