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. 用Linux命令行获取本机外网IP地址

    引言:目前获取ip的方法中,ifconfig和ip获取函数得到的都是内网ip.有时候需要获取外网ip,目前通用的做法,是向外部服务器发送请求,解析外部服务器响应,从而得到的自己的外网ip.linux下 ...

  2. SVG的Transform使用

    SVG的Transform使用: <%@ page language="java" contentType="text/html; charset=UTF-8&qu ...

  3. Canvas createLinearGradient API

    createLinearGradient addColorStop <!DOCTYPE html> <html lang="en"> <head> ...

  4. puppet来管理文件和软件包

    puppet来管理文件和软件包 1 exec的使用,可以运行shell命令 为配置文件添加配置,指示写了关键部分,其他配置省略没写 代码示例如下: [root@pup manifests]# cat ...

  5. Nancy简单实战之NancyMusicStore(三):完善商品信息与管理

    前言 上一篇,我们做了不少准备,并且还把我们NancyFx音乐商城的首页打造好了.这一篇主要是完善我们在首页的商品浏览问题和添加对商品的管理. 下面开始正题: 商品详情 首先是查看单个商品的详情: 先 ...

  6. jmeter线程组配置

    线程组配置 线程组相当于有多个用户,同时去执行相同的一批次任务.每个线程之间都是隔离的,互不影响的.一个线程的执行过程中,操作的变量,不会影响其他线程的变量值. Delay Thread creati ...

  7. Unity3D中如何计算场景中的三角面和顶点数

    在做游戏开发时,场景中的三角面和顶点数影响着运行效率,尤其是在手机平台上,实时的知道场景中的各项指标,对性能优化来说至关重要,下面我们来实现一个小功能,来实时计算场景中的三角面和顶点数: 如果要知道场 ...

  8. 基於tiny4412的Linux內核移植 --- 实例学习中断背后的知识(1)

    作者:彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台 tiny4412 ADK Linux-4.9 概述 前面几篇博文列举了在有设备树的时候,gpio中断的 ...

  9. 【福利大放送】不止是Android,Github超高影响力开源大放送,学习开发必备教科书

    一.写在前面 最近项目重构,时间贼多,也没什么时间更新博客,个人的开源项目也是多时没有更新了:github地址,然而没有更新不代表我不在乎,后面一有空还是会继续提交的. 还是来冒个泡,给大家献上一些福 ...

  10. Use Prerender to improve AngularJS SEO

    Use Prerender to improve AngularJS SEO Nuget Package of ASP.NET MVC HttpModule for prerender.io: Ins ...