Mapper 就是“映射”的意思,Mapper 文件时 Mybatis 中的 SQL 语句的配置文件,其会在运行时加载 SQL 语句并映射相应参数。在 Mybatis 的全局配置文件中,其中最后一项就是 mapper 文件的资源路径的配置,因为创建 SqlSessionFactory 时会加载全局配置文件,这说明 Mapper 映射文件会在创建伊始就会被加载了。

一、映射文件标签

Mapper 映射文件,主要就是用来配置 SQL 映射语句的,根据不同的 SQL 语句性质,要使用不同的标签来包裹。

标签名称 标签作用
insert 用来映射插入语句
update 用来映射更新语句
delete 用来映射删除语句
select 用来映射查询语句
resultMap 自定义结果集映射
sql 配置可以被其他语句引用的SQL语句块
cache 命名空间的二级缓存设置
cache-ref 其他命名空间缓存配置的引用

1.1 insert 标签

EmployeeMapper.xml

<insert id="addEmp">insert into tbl_employee (id, last_name, email, gender)values (#{id}, #{lastName}, #{email}, #{gender})</insert>

接口 EmployeeMapper.java

package com.example.mapper;import com.example.pojo.Employee;import java.util.List;public interface EmployeeMapper {public boolean addEmp(Employee employee);
}

测试方法:

@Test
public void test04() throws IOException {SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();SqlSession sqlSession = sqlSessionFactory.openSession();try{EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);Employee employee = new Employee();employee.setLastName("zhangsan");employee.setEmail("zhangsan@123.com");employee.setGender("0");boolean addEmp = mapper.addEmp(employee);System.out.println(addEmp);// 需手动提交sqlSession.commit();} finally {sqlSession.close();}
}

控制台结果:

[main] [com.example.mapper.EmployeeMapper.addEmp]-[DEBUG] ==>  Preparing: insert into tbl_employee (id, last_name, email, gender) values (?, ?, ?, ?);
[main] [com.example.mapper.EmployeeMapper.addEmp]-[DEBUG] ==> Parameters: null, zhangsan(String), zhangsan@123.com(String), 0(String)
[main] [com.example.mapper.EmployeeMapper.addEmp]-[DEBUG] <==    Updates: 1
true

1.2 update 标签

EmployeeMapper.xml

<update id="updateEmp">update tbl_employee setlast_name=#{lastName},email=#{email},gender=#{gender}where id=#{id}
</update>

接口 EmployeeMapper.java

package com.example.mapper;import com.example.pojo.Employee;import java.util.List;public interface EmployeeMapper {public Integer updateEmp(Employee employee);
}

测试方法:

@Test
public void test05() throws IOException {SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();SqlSession sqlSession = sqlSessionFactory.openSession();try{EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);Employee employee = mapper.getEmpById(8);employee.setLastName("lisi");employee.setEmail("lisi@123.com");employee.setGender("0");Integer updateEmp = mapper.updateEmp(employee);System.out.println(updateEmp);sqlSession.commit();} finally {sqlSession.close();}
}

控制台结果:

[main] [com.example.mapper.EmployeeMapper.getEmpById]-[DEBUG] ==>  Preparing: select * from tbl_employee where id = ?
[main] [com.example.mapper.EmployeeMapper.getEmpById]-[DEBUG] ==> Parameters: 8(Integer)
[main] [com.example.mapper.EmployeeMapper.getEmpById]-[DEBUG] <==      Total: 1
[main] [com.example.mapper.EmployeeMapper.updateEmp]-[DEBUG] ==>  Preparing: update tbl_employee set last_name=?,email=?,gender=? where id=?
[main] [com.example.mapper.EmployeeMapper.updateEmp]-[DEBUG] ==> Parameters: lisi(String), lisi@123.com(String), 0(String), 8(Integer)
[main] [com.example.mapper.EmployeeMapper.updateEmp]-[DEBUG] <==    Updates: 1
1

1.3 delete 标签

EmployeeMapper.xml

<delete id="deleteEmpById">delete from tbl_employee where id = #{id}
</delete>

接口 EmployeeMapper.java

package com.example.mapper;import com.example.pojo.Employee;import java.util.List;public interface EmployeeMapper {public void deleteEmpById(Integer id);
}

测试方法:

 @Testpublic void test06() throws IOException {SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();SqlSession sqlSession = sqlSessionFactory.openSession();try{EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);mapper.deleteEmpById(7);sqlSession.commit();} finally {sqlSession.close();}}

控制台结果:

[main] [com.example.mapper.EmployeeMapper.deleteEmpById]-[DEBUG] ==>  Preparing: delete from tbl_employee where id = ?
[main] [com.example.mapper.EmployeeMapper.deleteEmpById]-[DEBUG] ==> Parameters: 7(Integer)
[main] [com.example.mapper.EmployeeMapper.deleteEmpById]-[DEBUG] <==    Updates: 1

1.4 select 标签

EmployeeMapper.xml

<select id="getEmpById" resultType="employee">select * from tbl_employee where id = #{id}
</select>

接口 EmployeeMapper.java

package com.example.mapper;import com.example.pojo.Employee;import java.util.List;public interface EmployeeMapper {public Employee getEmpById(Integer id);
}

测试方法:

@Test
public void test03() throws IOException {SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();SqlSession sqlSession = sqlSessionFactory.openSession();try{EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);Employee emp = mapper.getEmpById(1);System.out.println(emp);} finally {sqlSession.close();}}

控制台结果:

[main] [com.example.mapper.EmployeeMapper.getEmpById]-[DEBUG] ==>  Preparing: select * from tbl_employee where id = ?
[main] [com.example.mapper.EmployeeMapper.getEmpById]-[DEBUG] ==> Parameters: 1(Integer)
[main] [com.example.mapper.EmployeeMapper.getEmpById]-[DEBUG] <==      Total: 1
Employee{id=1, lastName='tom', email='tom@123.com', gender='0'}

总结:
关于增删改:

  • Mybatis 允许增删改直接定义以下类型返回值:Integer、Long、Boolean、void
  • 需要手动提交数据 sqlSession.commit()。
    sqlSessionFactory.open() 为手动提交
    sqlSessionFactory.open(true) 为自动提交

二、标签属性含义

在insert、update、delete 及 select 配置标签中可以配置很多属性,具体可以配置的属性如下:

<select id="selectEmployee" parameterType="int"resultType="hashmap"resultMap="employeeResultMap"flushCache="false"useCache="true"timeout="10000"fetchSize="256"statementType="PREPARED"resultSetType="FORWARD_ONLY">
</select><insert id="insertEmployee"parameterType="com.example.pojo.Employee"flushCache="true"statementType="PREPARED"keyProperty=""keyColumn=""useGeneratedKeys="true"timeout="20">
</insert><update id="updateEmployee"parameterType="com.example.pojo.Employee"flushCache="true"statementType="PREPARED"timeout="20"></update><delete id="updateEmployee"parameterType="com.example.pojo.Employee"flushCache="true"statementType="PREPARED"timeout="20">
</delete>

每一个属性所代表的含义如下所示:

属性名 含义 所属标签
id SQL 映射配置的唯一标识,可以代表 SQL 配置 select¦insert¦update¦delete
parameterType 可选属性,用来传入 SQL 配置中需要的参数类型的类名或别名 select¦insert¦update¦delete
resultType 可选属性,用来配置 SQL 语句执行后期望得到的结果数据类型,配置的是结果类型的类名或别名。此属性不能与 resultMap 同时使用 select
resultMap 用来引入外部结果集配置,该结果集配置对应 SQL 结果中的每个字段名称,即将映射到 Java 对象中的哪个属性。此属性不能与 resultType 同时使用 select
flushCache 设置语句调用时,是否清空本地缓存和二级缓存,默认为false select¦insert¦update¦delete
useCache 设置语句调用时,执行结果是否保存二级缓存,对 select 元素默认为 false select
timeout 在抛出异常前,驱动程序等待数据库回应的最大秒数 select¦insert¦update¦delete
fetchSize 设置驱动程序每次批量返回结果的行数 select
statementType 设置 Mybatis 的 Statement 类型。可以配置为 STATEMENT、PREPARED 或 CALLABLE 中的一个,表示使用 Statement、PreparedStatement 或 CallableStatement 类型。默认配置为 PREPARED select¦insert¦update¦delete
resultSetType 设置 Mybatis 的结果集类型。可以配置为 FORWARD_ONLY 、SCROLL_SENSITIVE 或 SCROLL_INSENSITIVE 中的一个。默认无配置 select
databaseId 在配置 databaseIDProvider 的情况下,Mybatis 会加载所有不带 databaseId 或者匹配当前 databaseId 的语句 select¦insert¦update¦delete
resultSets 当有多个结果集的时候使用,会为 SQL 执行后返回的每个结果集设定一个名称,以逗号分隔 select
useGeneratedKeys 设置 Mybatis 使用 JDBC 的 getGeneratedKeys 方法来获取有数据库内部生成的主键(自增主键)。默认值为 false insert¦update
keyProperty 代表主键。Mybatis 会将生成的主键赋给这个列。联合主键使用逗号隔开 insert¦update
keyColumn 仅对特定数据库生效,当主键列不是表中的第一列时需要设置该属性。如果希望得到多个生成的列,也可以是以逗号分隔的属性名称列表 insert¦update

Mybatis 映射文件相关推荐

  1. MyBatis映射文件(一)

    目录 一.MyBatis映射文件 1.insert.update.delete元素 2.主键生成方式 3.参数(Parameters)传递 (1)单个参数 (2)多个参数 (3)命名参数 (4)POJ ...

  2. 3 了解MyBatis映射文件

    3.1 认识映射文件: 介绍:     MyBatis的映射文件主要用于定义业务操作命令,实现对象与数据表字段的映射,并控制对最终结果的封装.MyBatis是针对SQL构建,相对具有相同功能的JDBC ...

  3. Mybatis映射文件!CDATA[[]] 转义问题

    有没有觉得在mybatis映射文件写>(大于),<(小于)的时候贼麻烦,还得把"<",">"换位为"<", & ...

  4. Mybatis映射文件SQL语句模糊查询,#和$的区别和注意事项

    Mybatis映射文件SQL语句模糊查询 1. "%"#{value}"%" 在参数中不需要添加 %_ 推荐使用 2. '%${value}%' 在参数中不需要 ...

  5. MyBatis映射文件如何给数据库的int类型字段“插入”string类型记录

    MyBatis映射文件如何给数据库的int类型字段"插入"string类型记录. 数据库中对应字段名称和类型如下: 给数据库的int类型字段"插入"string ...

  6. 利用Maven逆向工程生成mybatis映射文件

    一,pom.xml 注意修改逆向工程配置文件的路径 <build><pluginManagement><plugins><plugin><grou ...

  7. oracle 监听拒绝连接,报mybatis映射文件错误Listener refused the connection with the following error: ORA-12519, TNS

    以下错误是:数据库连接数问题. 仔细检查映射文件.xml文件正确 后来发现是数据库最大连接数已满 修改之alter system set processes = 4000 scope = spfile ...

  8. MyBatis映射文件1(增删改、insert获取自增主键值)

    增删改 Mybatis为我们提供了<insert>.<update>.<delete>标签来对应增删改操作 在接口中写增删改的抽象方法 void addEmp(Em ...

  9. 配置MyBatis映射文件以及核心配置文件模板

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.db.properties模板 二.映射文件mapper.xml模板 三.---------MyBatis核心文件 ...

最新文章

  1. 修改 Docker 的默认存储路径
  2. .Net/C# 实现: FlashFXP 地址簿中站点密码的加解密算法
  3. QML 性能优化建议(二)
  4. stm32 stm8 产品型号
  5. jquery实现回车键触发事件
  6. scn exercise view.setModel will trigger binding creation in Fiori
  7. 11G Oracle RAC添加新表空间时数据文件误放置到本地文件系统的修正
  8. 怎样能确保计算机安全,如何确保电脑安全
  9. python排序算法实现_排序算法整理(Python实现)
  10. 获取和设置消息队列的属性msgctl,删除消息队列
  11. 从“挂科大王”到网络安全布道者,云舒的那些“面壁”时刻
  12. 局域网屏幕共享_教学一体机多屏共享
  13. 【渝粤教育】国家开放大学2019年春季 1366英语教学理论与实践 参考试题
  14. macOS SwiftUI 指示器组件规范之 02 评级指标 Rating Indicators
  15. php微信支付分取消订单,PHP实现微信支付和退款
  16. YUI中一些方法总结
  17. 【MySQL】数据库机房架构与跨城容灾详解(实战篇)(MySQL专栏启动)
  18. 基因数据处理52之cs-bwamem集群版运行(1千万条100bp的reads)
  19. Mac下ImageMagick安装(libpng)
  20. Java使用javax.mail.jar发送邮件并允许发送附件

热门文章

  1. vsto画箱体图 箱线图 xlboxwhisker
  2. 【转载】Oracle 大字段处理
  3. Android 无标题 全屏设置
  4. 判断一点是否在多边形内(附Java实现代码)
  5. 《C++ Primer》读书笔记——第十三章_拷贝控制
  6. ChatGPT让我变成了“超人”-如何提升团队30%效能质量提高100%的阶段性总结报告
  7. uni-app打包后ios证书申请和ios应用市场发布(windows主机发布)
  8. What are 20 questions to detect fake data scientists?
  9. 《变形金刚2》剧情细节大揭秘(100%剧透!)
  10. pta厘米换算英尺英寸