mybatis mapper xml文件的导入方式和查询方式
mybatis mapper xml文件的导入方式和查询方式
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;}
}
传入一个参数
- java基本类型
在映射文件中:
<select id="queryByID" resultType="com.weno.pojo.Girl">select * from girl where id=#{id};</select>
在Java文件中,映射方法:
Girl queryByID(int id);
传入多个参数
- 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);
- 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);
- @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文件的导入方式和查询方式相关推荐
- mybatis mapper.xml 文件共用_MyBatis 缓存原来是这么一回事儿!| 原力计划
作者 | Lw中责编 | 夕颜出品 | CSDN(ID:CSDNnews) 什么是缓存? 缓存就是存储数据的一个地方(称作:Cache),当程序要读取数据时,会首先从缓存中获取,有则直接返回,否则从其 ...
- myBatis mapper.xml 文件共用
前段时间忙项目,有很多多表联合查询,而其中很多sql是可以复用的,当时为赶进度都是复制粘贴完事,最近有一个通用很多的sql要求各种额外添加表,导致需要到处修改sql还不知道是否完全修改到,所以就在想是 ...
- mybatis入门(三)之Mapper XML 文件
转载自 mybatis Mapper XML 文件 Mapper XML 文件 MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大,映射器的 XML 文件就显得相对简单 ...
- SpringBoot+Mybatis加载Mapper.xml文件的两种方式
前言:我们在平常工作中用到mybatis去加载Mapper.xml文件,可能mapper文件放的路径不一样,由此我们需要配置多个路径,幸运的是Mybatis支持我们配置多个不同路径.现在介绍两种方法. ...
- 映射Mapper.xml文件的几种方式
第一种: mybatis-config.xml配置文件中的格式: <mappers><mapper resource="org/mybatis/builder/Author ...
- springboot mybatis 热加载mapper.xml文件(最简单)
大家好,我是烤鸭: 今天介绍一下springboot mybatis 热加载mapper.xml文件. 本来不打算写的,看到网上比较流行的方式都比较麻烦,想着简化一下. 网上流行的版本. https: ...
- (转)MyBatis框架的学习(四)——Mapper.xml文件中的输入和输出映射以及动态sql
http://blog.csdn.net/yerenyuan_pku/article/details/71893689 前面对MyBatis框架的学习中,我们对Mapper.xml映射文件多少有些了解 ...
- mybatis 鉴别其_MyBatis之Mapper XML 文件详解(四)-JDBC 类型和嵌套查询
MyBatis之Mapper XML 文件详解(四)-JDBC 类型和嵌套查询 白玉 IT哈哈 支持的 JDBC 类型 为了未来的参考,MyBatis 通过包含的 jdbcType 枚举型,支持下面的 ...
- Java数据持久层框架 MyBatis之API学习六(Mapper XML 文件详解)
对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...
最新文章
- lib和dll文件的区别和联系
- 打包caddy为docker镜像
- thread_t 数组 linux,首页 C#如何打印pthread_t
- 图像处理之均值滤波介绍及C算法实现
- .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 )...
- 如何自动导出内存映像文件?
- 用计算机弹传说之下鱼姐的bgm,传说之下战斗曲曲谱_传说之下打托丽尔的bgm
- 老年人手里有多少积蓄,该不该告诉子女?
- 程序猿,是如何逆袭的
- 移动端滚动不流畅问题
- sklearn报错 ImportError: No module named externals 问题解决
- atitit.js 各版本 and 新特性跟浏览器支持报告
- H5实现打印电子面单(淘宝菜鸟物流)
- SCI等英文文献免费下载方法总结
- 地图测量面积工具app_GPS地图测量尺
- oracle startup open ora 03113,Oracle 11g startup时报ORA-03113通信通道的文件结尾
- 【数据可视化】飞线图(航线图)在地图中的生成的三种方案
- 微信百度网盘小程序文件分享Burp抓包获得链接和提取码
- STM32F103C8T6基于HAL库移植uC/OS-III
- 树莓派摄像头——图像 视频采集
热门文章
- django restfull centos6.5 x86_64 python2.7
- 11个Visual Studio代码性能分析工具
- NSOperation下载网络图片(四)
- Jquery.LazyLoad.js修正版下载,实现图片延迟加载插件
- struts2.2.3需包含的jar包
- EntityFramework中实体类到表名的批量映射
- 模拟ssh的远程网络传输
- LeetCode 12 Integer to Roman (整数转罗马数字)
- my SQL下载安装,环境配置,以及密码忘记的解决,以及navicat for mysql下载,安装,测试连接...
- spoj Balanced Numbers(数位dp)