说明:这一节我们面向接口编程,MyBatis 面向接口编程的好处是,减少了面向字符串编程出错的几率。
注意事项:
(1)配置文件中还是要写上 xml 文件的地址:

<mappers>
    <mapper resource="com/liwei/mybatis/mapper/UserMapper.xml"/>
</mappers>

如果没有写,MyBatis 就加载不了配置文件。

(2)写一个接口,例如:

public interface UserMapper {

    User selectUserByID(Integer id);

}

注意:接口的类名、包名要和配置文件的包名、文件名一模一样,而且配置文件的 namespace 一定要是包名 + 接口名(配置文件名)。这里又体现了约定优于配置。

MyBatis 实战-使用 maven 构建(2)- 面向接口编程_mybatis

3、相关代码:

public interface UserMapper {

    User selectUserByID(Integer id);

}
<mapper namespace="com.liwei.mybatis.mapper.UserMapper">

    <select id="selectUserByID" parameterType="int" resultType="User">
        select * from `user` where id = #{id}
    </select>

</mapper>
@Test
public void test02(){
    SqlSession session = sqlSessionFactory.openSession();
    UserMapper userMapper =session.getMapper(UserMapper.class);

    try {
        User user =  userMapper.selectUserByID(1);
        System.out.println("user => " + user);
    } finally {
        session.close();
    }
}
Mybatis实战教程(mybatis in action)之二:以接口的方式编程

前面一章,已经搭建好了eclipse、mybatis、mysql的环境,并且实现了一个简单的查询。请注意,这种方式是用SqlSession实例来直接执行已映射的SQL语句:
session.selectOne(“com.liwei.mybatis.models.UserMapper.selectUserByID”, 1)
其实还有更简单的方法,而且是更好的方法,使用合理描述参数和SQL语句返回值的接口(比如IUserOperation.class),这样就实现了更简单,更安全的代码,对比我们在入门示例中的例子来说,就没有容易发生的字符串文字和转换的错误,下面是详细过程:

在src源码目录下建立 com.liwei.mybatis.inter 这个包,并建立接口类 IUserOperation , 内容如下:

package com.liwei.mybatis.inter;

import com.liwei.mybatis.model.User;

public interface IUserOperation {
    User selectUserByID(int id);
}

注意事项(非常重要):
(1)请注意,这里面有一个方法名 selectUserByID 必须与 User.xml 里面配置的 select 的id 对应(<select id="selectUserByID")。
(2)这里 namespace 必须是 UserMapper 接口的路径,不然要运行的时候要报错 “is not known to the MapperRegistry”
MyBatis 实战-使用 maven 构建(2)- 面向接口编程_xml_02
接下来,我们重新编写测试代码:

package com.liwei.test;

import java.io.IOException;
import java.io.Reader;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import com.liwei.mybatis.inter.IUserOperation;
import com.liwei.mybatis.model.User;

public class TestInterface {
    private static SqlSessionFactory sqlSessionFactory;
    private static Reader reader;

    static {
        try {
            reader = Resources.getResourceAsReader("Configuration.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        SqlSession session = sqlSessionFactory.openSession();
        try {

            // 注意:使用接口的方式编程的方法调用
            IUserOperation userOperation = session.getMapper(IUserOperation.class);
            User user = userOperation.selectUserByID(1);

            System.out.println(user.getUserAddress());
            System.out.println(user.getUserName());
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

整个工程结构图现在如下:
MyBatis 实战-使用 maven 构建(2)- 面向接口编程_mybatis_03