面向接口编程 前面章节我们通过MyBatis的入门程序我们完成了对数据库的CRUD,只需要在命名空间 “org.mybatis.example.BlogMapper” 中定义了一个名为 “selectBlog” 的映射语句,这样你就可以用全限定名 “org.mybatis.example.BlogMapper.selectBlog” 来调用映射语句了,就像前面的例子中那样 User user = sqlSession.selectOne("findUserById", 1); 你可能会注意到,这种方式和用全限定名调用 Java 对象的方法类似。极度依赖于字符串字面值,很容易就写错,不利于程序的编码效率,于是MyBatis还支持面向Mapper接口的编程方式,类似如下一样 : BlogMapper mapper = session.getMapper(BlogMapper.class);
Blog blog = mapper.selectBlog(101);可以看到这种方式好处,首先它不依赖于字符串字面值,会更安全一点;其次,如果你的 IDE 有代码补全功能,那么代码补全可以帮你快速选择到映射好的 SQL 语句 1.1.面向接口编程步骤第1步:针对表编写Mapper接口如 :这里我们针对的是User表,故我们在com.cc.mapper包中这里创建的接口 为:UserMapper.java,其他表类似 public interface UserMapper {
User selectUser(int id);
}第2步:编写Mapper接口的映射 在config的sqlmap下创建UserMapper.xml文件,添加如下的映射 <!--
namespace : 名称空间 1、隔离sql 语句 2、绑定接口 注意:这里必须为Mapper接口的全限定名,否则报错
id:sql的映射的唯一标识
resultType:sql语句执行的结果封装的类(全限定名)
#{id}:接受传递过来的参数
-->
<mapper namespace="com.cc.mapper.UserMapper">
<!-- -User selectUser(int id); -->
<select id="selectUser" resultType="com.cc.entity.User">
select * from user where id = #{id}
</select>
</mapper>第3步:编写测试类@Test
public void testMapper() throws IOException {
SqlSession sqlSession = null;
// 1.构建SqlSessionFactory
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
try {
// 2.创建SqlSession对象
// 1)提供了在数据库执行 SQL 命令所需的所有方法。
// 2)你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句
sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.selectUser(27);
System.out.println("user:" + user);
} finally {
// 3.关闭sqlSession
sqlSession.close();
}
}
|