mybatis实战教程(mybatis in action)之二:以接口的方式编程
By:Roy.LiuLast updated:2012-11-13
前面一章,已经搭建好了eclipse,mybatis,mysql的环境,并且实现了一个简单的查询。请注意,这种方式是用SqlSession实例来直接执行已映射的SQL语句:
session.selectOne("com.yihaomen.mybatis.models.UserMapper.selectUserByID", 1)
其实还有更简单的方法,而且是更好的方法,使用合理描述参数和SQL语句返回值的接口(比如IUserOperation.class),这样现在就可以至此那个更简单,更安全的代码,没有容易发生的字符串文字和转换的错误.下面是详细过程:
在src_user源码目录下建立 com.yihaomen.mybatis.inter 这个包,并建立接口类 IUserOperation , 内容如下:
package com.yihaomen.mybatis.inter;
import com.yihaomen.mybatis.model.User;
public interface IUserOperation {
public User selectUserByID(int id);
}
请注意,这里面有一个方法名 selectUserByID 必须与 User.xml 里面配置的 select 的id 对应(<select id="selectUserByID")
重写测试代码
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());
} finally {
session.close();
}
}
整个工程结构图现在如下:
运行这个测试程序,就可以看到结果了。
From:一号门

刚才第②种方式少了一段代码: 在Test.java中 [b]sqlSessionFactory.getCoufiguration.addMapper(IUserOperation.class);[/b] 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()); } finally { session.close(); }这个例子跑不通: 解决方案有两个: ①:User.xml中的namepace改为 接口IUserOperation的路径 ,其他的不用更改 ②:不要User.xml文件,直接在接口IUserOperation上添加mybatis的注解@select 如: public interface UserOperation { @Select("select * from users where id = #{id}") public User getUser(int id); } 这样子就可以进行正常运行,显示结果了