Mybatis系列之接口式编程
引言
在前面的文章《Mybatis系列之简单示例》曾有一段代码涉及到了接口式编程,当时并没有展开阐述,今天我们单独把这一段拿出来表一表。
在讲Mybatis接口式编程之前,我们先回忆一下前面是如何调用映射文件中的SQL代码的。通常情况下,都是使用SqlSession实例的selectXXX(selectOne, selectList, selectMap)方法来执行映射文件中相应的SQL语句的,这些方法都有一个共同的特征,那就是第一个参数都是String类型的,我们需要使用这个参数明确告之Mybatis我们是需要执行映射文件的哪一个元素下的SQL语句,所以这个参数内容应该是映射文件的名称空间加上相应元素的id值,如:
Object obj = session.selectOne("com.emerson.learning.mapping.user.getByID", 240);
User user = (User)obj;
... ...
这条语句告诉我们,要在名称空间com.emerson.learning.mapping.user下查找一个id为getById的元素,并执行其SQL语句。在获取返回值之后,我们还需要对其进行强类型转换。
这里存在一些潜在的问题:
- 为了确保名称空间的唯一性,通常会使用相对较长的、且有一定含义的字符串来作为其值,这样就很难保证我们在代码不出现拼写错误的情况,即使是直接从映射文件拷贝过来的,也存在不经意间被修改的可能性;
- 从selectXXX方法的签名可以看到,她的第二个参数是Object类型,那么如果我们传入的参数类型与映射文件中由parameterType属性指定的类型不一致时,将会出现不可预知的错误