String resource = "mybatis-config.xml";
InputStream inputStream = null;
try {
// 获取SqlSessionFactory
inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
// 获取SqlSession
SqlSession session = factory.openSession();
try {
//method1
//Student student = session.selectOne("cn.cgq.demo.mybatis.mapper.StudentMapper.selectStudent", 10);
//method2
StudentMapper mapper=session.getMapper(StudentMapper.class);
Student student=mapper.selectStudent(new Long(10));
//输出结果
System.out.println(student.toString());
} finally {
session.close();
}
} catch (IOException e) {
e.printStackTrace();
}

在method1中可以通过SqlSession实例直接执行已映射的SQL语句

而在使用method2也是一种更直白的方式,有很多优势,首先它不是基于字符串常量的,就会更安全;

其次,如果你的 IDE 有代码补全功能,那么你可以在有了已映射 SQL 语句的基础之上利用这个功能。

使用对于给定 语句能够合理描述参数和返回值的接口(比如说BlogMapper.class),你现在不但可以执行更清晰和类型安全的代码,而且还不用担 心易错的字符串字面值以及强制类型转换。

首先需要创建一个StudentMapper的接口类,其中定义的方式,是StudentMapper.xml映射文件中的<select>标签的id属性,作为方法名,resultType作为返回值

这样代码对了,但是执行后会报错,报什么错呢

Type interface cn.cgq.demo.mybatis.bean.mapper.StudentMapper is not known to the MapperRegistry.

意思是这个接口没有注册,那么你就需要再mybatis-config.xml的配置文件中添加映射,

在<mappers>中添加<mapper class="你的那个接口类的完全包名+类名" /> //因为是class,所以跟resource不同,要用“.”

这样还是不够的,因为你还会报错

Invalid bound statement (not found): cn.cgq.demo.mybatis.bean.mapper.StudentMapper.selectStudent

就是它,说没有找到方法。在其他人的博客中说有四种情况,可能是这四种情况中出了问题


1.mapper的namespace写的不对!!!注意系修改。

2.UserDao的方法在UserDao.xml中没有,然后执行UserDao的方法会报此

3. UserDao的方法返回值是List<User>,而select元素没有正确配置ResultMap,或者只配置ResultType!

4. 如果你确认没有以上问题,请任意修改下对应的xml文件,比如删除一个空行,保存.问题解决


然而,看了看,你会发现这都对啊,没有错,。那么你的可能就是忘了为方法添加注解

@Select("select * from Student where sid=#{sid}")
public Student selectStudent(Long sid);

你没有注解是找不到这个方法的,所以会告诉你(not found),那天津爱是那个注解之后,就没什么问题了,可以正常显示

总结下来,需要这几步

1.

 StudentMapper mapper=session.getMapper(StudentMapper.class);
Student student=mapper.selectStudent(new Long(10));

那当然,获得SqlSession是必须的

2.创建接口类,定义方法,方法名要和,StudentMapper.xml的配置文件<select>的id一样,返回值为resultType

3.为方法添加注解

4.添加在mybaits-config.xml文件添加类的映射

关于使用mybatis中mapper instrances,通过session另一种操作方式的更多相关文章

  1. mybatis中mapper接口的参数设置几种方法

    方法一:忽略parameterType,加@param("xxx")注解 在mapper接口中加上@param("xxx")注解,则在配置文件中直接用即可 Li ...

  2. MyBatis 中 Mapper 接口的使用原理

    MyBatis 中 Mapper 接口的使用原理 MyBatis 3 推荐使用 Mapper 接口的方式来执行 xml 配置中的 SQL,用起来很方便,也很灵活.在方便之余,想了解一下这是如何实现的, ...

  3. 逆向工程生成的mybatis中mapper文件。mapper接口,实例化成对象

    逆向工程生成的mybatis中mapper文件中,*mapper文件只是接口,而不是类文件.但是却可以通过spring的容器获得实例. 例如: //1.获得mapper代理对象,从spring容器获得 ...

  4. Mybatis中使用association进行关联的几种方式

    这里以一对一单向关联为例.对使用或不使用association的配置进行举例.  实体类: @Data @ToString @NoArgsConstructor public class IdCard ...

  5. Action中取得request,session的四种方式

    Action中取得request,session的四种方式 在Struts2中,从Action中取得request,session的对象进行应用是开发中的必需步骤,那么如何从Action中取得这些对象 ...

  6. mybatis 中mapper 的namespace有什么用

    原文:http://zhidao.baidu.com/link?url=ovFuTn7-02s7Qd40BOnwHImuPxNg8tXJF3nrx1SSngNY5e0CaSP1E4C9E5J6Xv5f ...

  7. 关于Mybatis中Mapper是使用XML还是注解的一些思考

    XML 据说可以灵活的进行注解,但是修改以后还是要重新发布程序.当然,你可以说,在Tomcat中改了,然后热加载了,不就可以了.可是一般情况下都是几台,十几台服务器.都是用发布系统,持续集成的方式部署 ...

  8. MyBatis中Mapper的返回值类型

    insert.update.delete语句的返回值类型 对数据库执行修改操作时,数据库会返回受影响的行数. 在MyBatis(使用版本3.4.6,早期版本不支持)中insert.update.del ...

  9. ResultMap和ResultType在使用中的区别、MyBatis中Mapper的返回值类型

    在使用mybatis进行数据库连接操作时对于SQL语句返回结果的处理通常有两种方式,一种就是resultType另一种就是resultMap,下面说下我对这两者的认识和理解 resultType:当使 ...

随机推荐

  1. js架构设计模式——MVVM模式下,ViewModel和View,Model有什么区别

    MVVM模式下,ViewModel和View,Model有什么区别 Model:很简单,就是业务逻辑相关的数据对象,通常从数据库映射而来,我们可以说是与数据库对应的model. View:也很简单,就 ...

  2. 选项卡(TabHost)的功能与用法

    TabHost是一种非常实用的组件,TabHost可以很方便地在窗口上放置多个便签页,每个标签页相当于获得了一个与外部容器相同大小的组件摆法区域.通过这种方式,就可以在一个容器里放置更多组件,例如手机 ...

  3. linux:基本命令

    1.显示日期与时间:date 显示2009/08/17形式的格式:date +%Y/%m/%d 显示17:04时间格式:date +%H/%M 2.显示日历:cal 常用的命令:cal 2009:ca ...

  4. ubuntu 下安装 cudnn

    安装cudnn前后,GPU跑一个算法的速度分别是139ms和26ms ! 1. 在以下网址选择  cuDNN v5.1 Library for Linux 下载 https://developer.n ...

  5. RabbitMQ确认机制问题处理

    现象: 手动在后台创建两个消息反馈队列 代码中监听到消息队列后,对消息进行处理并确认,代码为: 运行代码后,消息未从队列扔出去. 原因及解决方案:后台手动创建队列后,在监听消息中又对队列进行声明创建, ...

  6. Swift资料大全

    简单看了一下swift的语法,个人感觉相对于object-c很是简单明了.Swift的出现并不能说明iOS开发简单了很多,有可能会变得复杂,你需要学习两门编程语言,因为在程序员的世界里,务实并不是最重 ...

  7. ajax问题

    1. 代码:var i;for(i=0;i<10;i++){      ajaxServise(i);} 在for循环中调用ajax方法  补充页面上的数据,这样写是错误的,他不会每执行一次fo ...

  8. quartz配置时间

    我们需要把log4j的配置文件放入src目录下,启动main类就可以了. Cron Expressions cron的表达式被用来配置CronTrigger实例. cron的表达式是字符串,实际上是由 ...

  9. 使用python制作ArcGIS插件(4)界面交互

    使用python制作ArcGIS插件(4)界面交互 by 李远祥 插件界面部分,除了一开始在设计器中设计的这些界面元素之外,还可以与操作系统进行一些输入输出的交互,这部分的实现全部在pythonadd ...

  10. experss框架—基础认识

    express简介: Express是一个简洁.灵活的node.js Web应用开发框架, 它提供一系列强大的功能,比如:模板解析.静态文件服务.中间件.路由控制等等,并且还可以使用插件或整合其他模块 ...