【MyBatis基础教学三】- SQL 映射的 XML 文件 【精品3-上】

这篇博客深入介绍了MyBatis中SQL映射XML文件的使用,包括select、insert、update和delete语句的详细配置,以及如何通过resultMap进行结果映射,大大简化了数据库操作的代码量。此外,还提到了动态SQL和参数映射的高级用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【MyBatis基础教学三】- SQL 映射的 XML 文件 【精品】

SQL 映射的 XML 文件

在这里插入图片描述

MyBatis 真正的力量是在映射语句中。这里是奇迹发生的地方。对于所有的力量,SQL 映射的 XML 文件是相当的简单。当然如果你将它们和对等功能的 JDBC 代码来比较,你会 发现映射文件节省了大约 95%的代码量。MyBatis 的构建就是聚焦于 SQL 的,使其远离于 普通的方式。 SQL 映射文件有很少的几个顶级元素(按照它们应该被定义的顺序):
  • cache - 配置给定命名空间的缓存。
  • cache-ref – 从其他命名空间引用缓存配置。
  • resultMap – 最复杂,也是最有力量的元素,用来描述如何从数据库结果集中来加 载你的对象。
  • parameterMap – 已经被废弃了!老式风格的参数映射。内联参数是首选,这个元 素可能在将来被移除。这里不会记录。
  • sql – 可以重用的 SQL 块,也可以被其他语句引用。
  • insert – 映射插入语句
  • update – 映射更新语句
  • delete – 映射删除语句
  • select – 映射查询语句
下一部分将从语句本身开始来描述每个元素的细节。
  1. select
  2. insert,update,delete
  3. sql
  4. Parameters
  5. resultMap
  6. 缓存
  7. 参照缓存
  8. 动态 SQL

1、select

查询语句是使用 MyBatis 时最常用的元素之一。直到你从数据库取出数据时才会发现将 数据存在数据库中是多么的有价值,所以许多应用程序的查询操作要比更改数据操作多的多。 对于每次插入,更新或删除,那也会有很多的查询。这是 MyBatis 的一个基本原则,也是将 重心和努力放到查询和结果映射的原因。对简单类别的查询元素是非常简单的。比如:
<select id=”selectPerson” parameterType=int” resultType=”hashmap”> 
    SELECT * FROM PERSON WHERE ID = #{
   
   id}
 </select> 
这个语句被称作selectPerson,使用一个 int(或 Integer)类型的参数,并返回一个 HashMap 类型的对象,其中的键是列名,值是列对应的值。
注意参数注释: #{id}

这就告诉 MyBatis 创建一个 PreparedStatement(预处理语句)参数。使用 JDBC,这样 的一个参数在 SQL 中会由一个“?”来标识,并被传递到一个新的预处理语句中,就像这样

// 相似的JDBC代码,不是MyBatis的 
String selectPerson = “SELECT * FROM PERSON WHERE ID=?; 
PreparedStatement ps = conn.prepareStatement(selectPerson); 
ps.setInt(1,id); 
这个例子中的 username和 password 将会由 properties 元素中设置的值来替换。driver 和 url 属性将会从包含进来的 config.properties 文件中的值来替换。这里提供很多配置的选项。

属性也可以被传递到 SqlSessionBuilder.build()方法中。例如:

SqlSessionFactory factory = 
   sqlSessionFactoryBuilder.build(reader, props);
 // ... or ... 
 SqlSessionFactory factory = 
    sqlSessionFactoryBuilder.build(reader, environment, props);
当然,这需要很多单独的 JDBC 的代码来提取结果并将它们映射到对象实例中,这就是 MyBatis 节省你时间的地方。我们需要深入了解参数和结果映射。那些细节部分我们下面来 了解。 select 元素有很多属性允许你配置,来决定每条语句的作用细节。
<select 
   id=”selectPerson” 
   parameterType=int” 
   parameterMap=”deprecated” 
   resultType=”hashmap” 
   resultMap=”personResultMap” 
   flushCache=”false” 
   useCache=”true” 
   timeout=10000” 
   fetchSize=256” 
   statementType=”PREPARED” 
   resultSetType=”FORWARD_ONLY” > 

在这里插入图片描述
在这里插入图片描述


2、insert,update,delete

数据修改语句 insert,update 和 delete 在它们的实现中非常相似:
<insert 
   id="insertAuthor" 
   parameterType="domain.blog.Author" 
   flushCache="true" 
   statementType="PREPARED" 
   keyProperty="" 
   useGeneratedKeys="" 
   timeout="20000"> 
 
<update 
   id="insertAuthor" 
   parameterType="domain.blog.Author" 
   flushCache="true" 
   statementType="PREPARED" 
   timeout="20000"> 
 
<delete 
   id=
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BLACK_113

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值