mybatis实战教程(mybatis in action)之二:以接口的方式编程

前面一章,已经搭建好了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();
    	}
	}


整个工程结构图现在如下:


运行这个测试程序,就可以看到结果了。

上一篇: mybatis实战教程(mybatis in action)之一:开发环境搭建
下一篇: mybatis实战教程(mybatis in action)之四:实现关联数据的查询

Avatar

N3verL4nd 评论于: 2017-05-09

namespace换为接口

Avatar

wwwl 评论于: 2016-11-14

垃圾教程[face59]

Avatar

无名 评论于: 2016-09-14

哈哈哈,传说中的dao层

Avatar

无名 评论于: 2016-09-14

传说中的dao层

Avatar

aflyun 评论于: 2015-09-30

刚才第②种方式少了一段代码:
在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();
        }

Avatar

aflyun 评论于: 2015-09-30

这个例子跑不通:
解决方案有两个:
①:User.xml中的namepace改为 接口IUserOperation的路径 ,其他的不用更改
②:不要User.xml文件,直接在接口IUserOperation上添加mybatis的注解@select
如:
public interface UserOperation {
	@Select("select * from users where id = #{id}")
	public User getUser(int id);
}

这样子就可以进行正常运行,显示结果了

Avatar

牛穿疯 评论于: 2015-09-02

[quote=doris]如果用接口的话。需要改好几个地方才能成功。
1.User.xml改成IUserOperation.xml
2.IUserOperation.xml中的namespace改成接口IUserOperation的路径
3.configuration.xml中的mappers之前是引用的User.xml,现在相应改成IUserOperation.xml的路径。
这样子测试成功了。[/quote]
其实只需要改第二条就好了

Avatar

竣扬工作室 评论于: 2015-06-22

教程写的很好,只是漏了修改User.xml配置文件的命名空间,需改成接口类的路径

Avatar

Hanker 评论于: 2015-04-02

doris说的没错

Avatar

doris 评论于: 2014-11-28

如果用接口的话。需要改好几个地方才能成功。
1.User.xml改成IUserOperation.xml
2.IUserOperation.xml中的namespace改成接口IUserOperation的路径
3.configuration.xml中的mappers之前是引用的User.xml,现在相应改成IUserOperation.xml的路径。
这样子测试成功了。

Avatar

liandu 评论于: 2014-05-04

namespace 改成 comyihaomenmybatisinterIUserOperation

Avatar

liandu 评论于: 2014-05-04

修改userxml文件的命名空间为 com yihaomen mybatis inter UserMapper 依然不对  Type interface com yihaomen mybatis inter IUserOperation is not known to the MapperRegistry

Avatar

liandu 评论于: 2014-05-04

修改userxml文件的命名空间为 com yihaomen mybatis inter UserMapper 依然不对啊  报错 Type interface com yihaomen mybatis inter IUserOperation is not known to the MapperRegistry

Avatar

1只猪 评论于: 2013-12-11

应该提示下Oracle数据库的话,去掉查询语句那单引。。。。

Avatar

天地无忧 评论于: 2013-11-20

痛并入门着。java搞web真不容易。seetwo@qq.com

Avatar

星翼之翔 评论于: 2012-12-26

非常感谢你的教程~~其实我今天才刚刚接触这个半自动化的ROM框架啦。以前都是随大流用Hibernate,后来发现其弊端和优点几乎一样多~~所以为了多掌握一门技术,就在百度谷歌找教程。官网的指南让人失望,虽然英语对我来说不是什么困难,但感觉基本不是针对入门和实践写的,全是以特性为章节来写,让人不知所云。你的就简单明了,直接说怎么在项目里用,操作性很强。就像我学什么都喜欢先把hello world跑起来一样!看到下一章节才发现你已经说了这个问题了,囧。
相信把你的这套教程看完,入门就算完成了,剩下的就要靠自己挖掘了,再次感谢!!

Avatar

星翼之翔 评论于: 2012-12-26

楼主写的很好,不过忘记修改user.xml文件中的命名空间了,不改成接口路径的话,程序运行会报错
[reply=轻舞肥羊,2012-12-26 08:28 PM]确实是要修改 user.xml中的命名空间。你很细心.[/reply]
 评论 ( What Do You Think )
名称
邮箱
网址
评论
验证
   
 

 


  • 微信公众号

  • 我的微信

站点声明:

1、一号门博客CMS,由Python, MySQL, Nginx, Wsgi 强力驱动

2、部分文章来源于互联网, 若有侵权, 联系邮箱:summer@yihaomen.com, 同时欢迎大家注册用户,主动发布文章.

3、鄂ICP备14001754号-3, 鄂公网安备 42280202422812号