mybatis mapper xml文件的导入方式和查询方式

ssm框架 Mybatis 

mapper与SQLSession的关系

每个基于MyBatis的应用都是以一个SqlSessionFactory的实例为中心的。通过SqlSessionFactory可以获得SQLSession实例,然后在其中完全包含了数据库执行SQL命令所需要的所有方法。

SQLMapper是由一个Java接口和XML文件构成的,给出一定的SQL和映射规则。负责SQL的执行和返回结果。

通过SQLSession获得Mapper映射器接口,然后执行SQL操作。

mapper xml文件的导入方式

根据文件相对地址导入

例如:

<mappers><!-- 第一种引入方式 resource引入--><mapper resource="com.weno.mapper/GirlMapper.xml"></mapper>
</mappers>

通过包导入

如果有很多个mapper xml文件,一个一个去导入太麻烦了,这时候可以选择导入一个包,将包里面的Java接口文件全部导入。不过需要注意的点:文件名要相似:Girl.java和Girl.xml,同时文件目录结构要一样。

<mappers><!--第二种引入方式 通过包去引入--><package name="com.weno.mapper"/>
</mappers>

这个是2种最常见的xml文件导入方式。

Mybatis查询方式之参数传递

假如此时有一个Girl数据库表:

id name flower
17 xiaoai1 rose

Girl java文件

package com.weno.pojo;
public class Girl {private int id;private String name;private String flower;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getFlower() {return flower;}public void setFlower(String flower) {this.flower = flower;}
}

传入一个参数

  1. java基本类型
    在映射文件中:
    <select id="queryByID" resultType="com.weno.pojo.Girl">select * from girl where id=#{id};</select>

在Java文件中,映射方法:

Girl queryByID(int id);

传入多个参数

  1. java基本对象
    在映射文件中
   <select id="queryByGirl" resultType="com.weno.pojo.Girl">select * from girl where id=#{id};<!-- 会自动调用getID()函数去获取ID --></select>

在Java文件中,映射方法:

Girl queryByID(Girl g);

在测试文件中

    Girl g = new Girl();g.setId(17);// 可以加多个setGirl girl = mapper.queryByGirl(g);

  1. Map传递参数
    在映射文件中
 <select id="queryByGirl1" resultType="com.weno.pojo.Girl">select * from girl WHERE id=#{id};</select>
<!-- 其中id要跟Map里面的key一样 -->

在Java文件中,映射方法:

Girl queryByGirl1(Map<String,Object> map);

在测试文件中

    Map<String,Object> map= new HashMap<String, Object>();map.put("id",17);// id对应xml文件中的idGirl girl=mapper.queryByGirl1(map);

  1. @Param传递参数

在映射文件中

 <select id="queryByGirl2" resultType="com.weno.pojo.Girl">select * from girl WHERE id=#{id} and flower=#{flower};</select>

在Java文件中,映射方法:

    Girl queryByGirl2(int id,String flower);

测试文件

    GirlMapper mapper = sqlSession.getMapper(GirlMapper.class);Girl girl=mapper.queryByGirl2(17,"rose");

如果这时候运行,则会报错

org.apache.ibatis.exceptions.PersistenceException:
### Error querying database.  Cause: org.apache.ibatis.binding.BindingException: Parameter 'id' not found. Available parameters are [0, 1, param1, param2]
### Cause: org.apache.ibatis.binding.BindingException: Parameter 'id' not found. Available parameters are [0, 1, param1, param2]

大概意思就是,mapper方法的参数绑定异常。

原因:
这个异常的产生原因是因为,当mapper接口方法有多个参数时,java不会保存行参的记录,java在运行的时候会把方法中的参数(int id,String flower)变成这样:(int arg0,String arg1),这样我们就没有办法去传递多个参数(注意,在多个参数时才会发生)

解决方法:
3.1 将参数映射文件中的参数改为

 <select id="queryByGirl2" resultType="com.weno.pojo.Girl">select * from girl WHERE id=#{0} and flower=#{1};</select>

或者将参数改为param1和param2

<select id="queryByGirl2" resultType="com.weno.pojo.Girl">select * from girl WHERE id=#{param1} and flower=#{param2};</select>

这两个没什么区别,只不过一个是从0开始,有个是从1开始罢了。

3.2 使用@param
尽管上面的的方法能够解决这个问题,但是显而易见,这个不符合程序的设计理念,因为阅读代码的时候没办法马上理解内容。所以可以使用@Param解决这个问题。

映射方法

Girl queryByGirl3(@Param("id") int id,@Param("flower")String flower);

映射文件

    <select id="queryByGirl3" resultType="com.weno.pojo.Girl">select * from girl WHERE id=#{id} and flower=#{flower};</select>

这样就可以开开心心的使用我的flower了。

至于使用哪一个,那就看具体情况,哪一个方便就使用哪一个了。

转载于:https://www.cnblogs.com/xiaohuiduan/p/9867666.html

mybatis mapper xml文件的导入方式和查询方式相关推荐

  1. mybatis mapper.xml 文件共用_MyBatis 缓存原来是这么一回事儿!| 原力计划

    作者 | Lw中责编 | 夕颜出品 | CSDN(ID:CSDNnews) 什么是缓存? 缓存就是存储数据的一个地方(称作:Cache),当程序要读取数据时,会首先从缓存中获取,有则直接返回,否则从其 ...

  2. myBatis mapper.xml 文件共用

    前段时间忙项目,有很多多表联合查询,而其中很多sql是可以复用的,当时为赶进度都是复制粘贴完事,最近有一个通用很多的sql要求各种额外添加表,导致需要到处修改sql还不知道是否完全修改到,所以就在想是 ...

  3. mybatis入门(三)之Mapper XML 文件

    转载自   mybatis Mapper XML 文件 Mapper XML 文件 MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大,映射器的 XML 文件就显得相对简单 ...

  4. SpringBoot+Mybatis加载Mapper.xml文件的两种方式

    前言:我们在平常工作中用到mybatis去加载Mapper.xml文件,可能mapper文件放的路径不一样,由此我们需要配置多个路径,幸运的是Mybatis支持我们配置多个不同路径.现在介绍两种方法. ...

  5. 映射Mapper.xml文件的几种方式

    第一种: mybatis-config.xml配置文件中的格式: <mappers><mapper resource="org/mybatis/builder/Author ...

  6. springboot mybatis 热加载mapper.xml文件(最简单)

    大家好,我是烤鸭: 今天介绍一下springboot mybatis 热加载mapper.xml文件. 本来不打算写的,看到网上比较流行的方式都比较麻烦,想着简化一下. 网上流行的版本. https: ...

  7. (转)MyBatis框架的学习(四)——Mapper.xml文件中的输入和输出映射以及动态sql

    http://blog.csdn.net/yerenyuan_pku/article/details/71893689 前面对MyBatis框架的学习中,我们对Mapper.xml映射文件多少有些了解 ...

  8. mybatis 鉴别其_MyBatis之Mapper XML 文件详解(四)-JDBC 类型和嵌套查询

    MyBatis之Mapper XML 文件详解(四)-JDBC 类型和嵌套查询 白玉 IT哈哈 支持的 JDBC 类型 为了未来的参考,MyBatis 通过包含的 jdbcType 枚举型,支持下面的 ...

  9. Java数据持久层框架 MyBatis之API学习六(Mapper XML 文件详解)

    对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...

最新文章

  1. lib和dll文件的区别和联系
  2. 打包caddy为docker镜像
  3. thread_t 数组 linux,首页 C#如何打印pthread_t
  4. 图像处理之均值滤波介绍及C算法实现
  5. .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 )...
  6. 如何自动导出内存映像文件?
  7. 用计算机弹传说之下鱼姐的bgm,传说之下战斗曲曲谱_传说之下打托丽尔的bgm
  8. 老年人手里有多少积蓄,该不该告诉子女?
  9. 程序猿,是如何逆袭的
  10. 移动端滚动不流畅问题
  11. sklearn报错 ImportError: No module named externals 问题解决
  12. atitit.js 各版本 and 新特性跟浏览器支持报告
  13. H5实现打印电子面单(淘宝菜鸟物流)
  14. SCI等英文文献免费下载方法总结
  15. 地图测量面积工具app_GPS地图测量尺
  16. oracle startup open ora 03113,Oracle 11g startup时报ORA-03113通信通道的文件结尾
  17. 【数据可视化】飞线图(航线图)在地图中的生成的三种方案
  18. 微信百度网盘小程序文件分享Burp抓包获得链接和提取码
  19. STM32F103C8T6基于HAL库移植uC/OS-III
  20. 树莓派摄像头——图像 视频采集

热门文章

  1. django restfull centos6.5 x86_64 python2.7
  2. 11个Visual Studio代码性能分析工具
  3. NSOperation下载网络图片(四)
  4. Jquery.LazyLoad.js修正版下载,实现图片延迟加载插件
  5. struts2.2.3需包含的jar包
  6. EntityFramework中实体类到表名的批量映射
  7. 模拟ssh的远程网络传输
  8. LeetCode 12 Integer to Roman (整数转罗马数字)
  9. my SQL下载安装,环境配置,以及密码忘记的解决,以及navicat for mysql下载,安装,测试连接...
  10. spoj Balanced Numbers(数位dp)