关于使用mybatis中mapper instrances,通过session另一种操作方式
Posted 他的梦
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于使用mybatis中mapper instrances,通过session另一种操作方式相关的知识,希望对你有一定的参考价值。
1 String resource = "mybatis-config.xml"; 2 InputStream inputStream = null; 3 try { 4 // 获取SqlSessionFactory 5 inputStream = Resources.getResourceAsStream(resource); 6 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream); 7 // 获取SqlSession 8 SqlSession session = factory.openSession(); 9 try { 10 //method1 11 //Student student = session.selectOne("cn.cgq.demo.mybatis.mapper.StudentMapper.selectStudent", 10); 12 //method2 13 StudentMapper mapper=session.getMapper(StudentMapper.class); 14 Student student=mapper.selectStudent(new Long(10)); 15 //输出结果 16 System.out.println(student.toString()); 17 } finally { 18 session.close(); 19 } 20 } catch (IOException e) { 21 e.printStackTrace(); 22 }
在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.
1 StudentMapper mapper=session.getMapper(StudentMapper.class); 2 Student student=mapper.selectStudent(new Long(10));
那当然,获得SqlSession是必须的
2.创建接口类,定义方法,方法名要和,StudentMapper.xml的配置文件<select>的id一样,返回值为resultType
3.为方法添加注解
4.添加在mybaits-config.xml文件添加类的映射
以上是关于关于使用mybatis中mapper instrances,通过session另一种操作方式的主要内容,如果未能解决你的问题,请参考以下文章
关于Mybatis中Mapper是使用XML还是注解的一些思考
关于SpringBoot集成myBatis时,mapper接口注入失败的问题
关于Mybatis的mapper文件中${}和#{}的区别和注意事项
关于Mybatis的mapper.xml文件中从pojo获取属性值的问题
关于IDEA创建Mybatis的Maven项目,mybatis配置文件和mapper类配置文件查找路径及具体引用方法 以及 < build >标签中**/*.xml语法的探究