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);
// 可以加多个set
Girl 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文件中的id
Girl 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
了。
至于使用哪一个,那就看具体情况,哪一个方便就使用哪一个了。
mybatis mapper xml文件的导入方式和查询方式的更多相关文章
- MyBatis Mapper.xml文件中 $和#的区别
MyBatis Mapper.xml文件中 $和#的区别 网上有很多,总之,简略的写一下,作为备忘.例子中假设参数名为 paramName,类型为 VARCHAR . 1.优先使用#{paramN ...
- mybatis mapper xml文件配置resultmap时,id行和result行有什么区别?
mybatis mapper xml文件配置resultmap时,id行和result行有什么区别? <resultMap id = "CashInvoiceMap" typ ...
- MyBatis——Mapper XML 文件
Mapper XML 文件 MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大,映射器的 XML 文件就显得相对简单.如果拿它跟具有相同功能的 JDBC 代码进行对比,你会 ...
- 启动项目时,mapper.xml文件没有导入
原因分析:绑定的statement没有发现,原因是只有mapper接口的java文件,没有xml文件 解决方法:需要在pom文件中进行配置 <!-- 如果不添加此节点mybatis的mapper ...
- 笔记:MyBatis Mapper XML文件详解 - 映射和参数
MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大,映射器的 XML 文件就显得相对简单.如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% ...
- mybatis Mapper XML 文件
MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大,映射器的 XML 文件就显得相对简单.如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% ...
- MyBatis Mapper XML 文件 的学习详解
MyBatis 真正的力量是在映射语句中.这里是奇迹发生的地方.对于所有的力量,SQL 映射的 XML 文件是相当的简单.当然如果你将它们和对等功能的 JDBC 代码来比较,你会发现映射文件节省了大约 ...
- 笔记:MyBatis Mapper XML文件详解 - Result Maps
Result Maps(结果集) resultMap 元素是 MyBatis 中最重要最强大的元素.它就是让你远离 90%的需要从结果 集中取出数据的 JDBC 代码的那个东西, 而且在一些情形下允许 ...
- 笔记:MyBatis Mapper XML文件详解 - Cache
缓存(Cache) 从数据库中加载的数据缓存到内存中,是很多应用程序为了提高性能而采取的一贯做法.MyBatis对通过映射的SELECT语句加载的查询结果提供了内建的缓存支持.默认情况下,启用一级缓存 ...
随机推荐
- 设计模式之模板模式 template
设计模式 模板模式如果有一个流程如下step1();step2();step3();step4();step5();其中step3() step5()是需要用户自己编写使用其他步骤是固定的那么可以写成 ...
- poj1284
一个欧拉函数的应用,当时也没有太搞清,这里直接用的当时的模板 #include<iostream> #include<cstdlib> #include<cstdio&g ...
- Linux环境下java开发环境搭建一 JDK搭建
第一步:下载jdk压缩文件 第二步:上传到家目录下的soft目录下,可以采用winscp,此处下载的是.tar.gz文件 第三步:解压压缩文件,并在/usr/local目录下创建一个jdk7的目录,并 ...
- c语言基础课第三次作业
7-1找出最小值 1.实验代码 #include <stdio.h> int main(void) int n, i, m, min; scanf("%d", & ...
- tabel表格的dom操作
对table表格的操作比较麻烦,一直字符串的连接会比较麻烦 var nod = cwgk_msg_list.insertRow();//这个是上边获取过的dom元素,一般是tbody的元素,对元素进行 ...
- wx:for类表渲染
列表渲染 wx:for 在组件上使用wx:for控制属性绑定一个数组,即可使用数组中各项的数据重复渲染该组件. 默认数组的当前项的下标变量名默认为index,数组当前项的变量名默认为item < ...
- 《mysql必知必会》学习_第15章_20180806_欢
第15章:联结表 P98 外键:外键为某个表的一列A,同时这一列包含另一个表的主键值B(B属于A,等于或者小于的关系) P99 select vend_name,prod_name,prod_pric ...
- uniGUI经验几则
uniGUI经验几则 (2015-11-07 21:42:41) 转载▼ 标签: it 分类: uniGUI 1.uniTimer的妙用 很多时候,都会遇到在一个uniForm或者uniFrame加载 ...
- 2019年微服务5大趋势,你pick哪个?
2018年对于微服务来说是非常重要的一年,这一年Service Mesh开始崭露头角,解决服务间复杂的通信问题,这一年很多国内互联网公司已经有了较为成熟的微服务实践案例,网易云主办的微服务实践沙龙中也 ...
- 响应式网站设计(Responsive Web design)
页面的设计与开发应当根据用户行为以及设备环境(系统平台.屏幕尺寸.屏幕定向等)进行相应的响应和调整.具体的实践方式由多方面组成,包括弹性网格和布局.图片.CSS media query的使用等.无论用 ...