Mybatis系列(四)映射文件

本文深入探讨Mybatis映射文件,包括查询、插入、更新和删除语句的映射,以及SQL、查询参数、结果集和缓存配置。重点介绍了如何在映射文件中定义和使用SQL语句,如select、insert、update和delete元素,以及如何处理查询结果和缓存策略。此外,文章还提到了Mybatis的名称空间和动态SQL的后续讨论。
摘要由CSDN通过智能技术生成

Mybatis系列(四)映射文件

引言

Mybatis的真正强大,在于她对SQL的映射,这也是她吸引人的地方。实现相同的功能,她要比直接使用JDBC省去95%的代码量。而且将SQL语句独立在Java代码之外,为程序的修改和纠错提供了更大的灵活性,可以直接修改SQL语句,而无需重新编译Java程序。

本文将在上一篇《Mybatis系列之简单示例》的基础上,对映射文件进行详细的讨论学习。

SQL映射文件也是XML格式,其顶级元素有以下几个:

  • select - 映射sql查询语句
  • insert - 映射sql插入语句
  • update - 映射sql更新语句
  • delete - 映射sql删除语句
  • sql - 就像程序中可以复用的函数一样,这个元素下放置可以被其他语句重复引用的sql语句
  • resultMap - 用来描述如何从数据库查询结果集中来加载对象
  • cache - 给定命名空间的缓存配置
  • cache-ref - 其他命名空间缓存配置引用
下面从语句本身开始,在上一篇《 Mybatis系列之简单示例》的基础上,为大家一一阐述各元素用法。

查询语句映射

查询语句,是sql中使用频率最高的语句,Mybatis中的查询语句映射也是很简单的。如:

	<select id="getById" parameterType="int" resultType="User">
		SELECT <span style="font-family: Arial, Helvetica, sans-serif;">user_name, user_password, nick_name, email, user_type_id, </span><span style="font-family: Arial, Helvetica, sans-serif;">is_valid, created_time</span>
		FROM sys_user WHERE user_id = #{id}
	</select>

这是一条被称作getById的查询,需要一个类型为int或是Integer的参数,查询返回一个User类型对象,对象的属性名称就是 查询语句中的列名,属性值就是查询结果行中对应的值。

请注意,上句话中斜体加粗部分,“查询语句中的列名”意味着在对查询结果进行实体映射时,使用的是查询语句中的列名进行映射的,而非数据表中的。举例说明:select user_name .....,那么对应的实体对象属性名称就是user_name;如果在查询时使用了别名,如select user_name as userName,那么对应的实体对象的属性名称就是userName。

通常情况下,数据表对字段命名规则使用下划线进行分词的,而Java中却是使用驼峰式的命名规则,那么是不是意味着我们在数据表中也要使用驼峰式命名规则,或是在查询语句中都要使用别名方式呢?其实完全不必,Mybatis早早就替我们考虑到这点的,在Mybatis核心配置文件中,只需要添加以下代码,Mybatis就可以自动的将a_column转换为aColumn。

<settings>
    <!-- 将数据库字段命名规则A_COLUMN转换为Java使用的驼峰式命名规则aCloumn -->
    <setting name="mapUnderscoreToCamelCase" value="true" />
</settings>

请注意select元素中#{id}的用法,这里就是告诉Mybatis创建一个预处理语句参数,通过JDBC,这样的参数在sql中会是用一个"?"来标识,并被传递到预处理语句中。就像下面这段代码:

// Similar JDBC code, NOT MyBatis…
String getById = "SELECT user_name, user_password, nick_name, email, user_type_id, is_valid, created_time FROM sys_user WHERE user_id=?";
PreparedStatement ps = conn.prepareStatement(getById);
ps.setInt(1,id);

当然,在获得结果集后,我们还需要额外编写很多代码,将结果集的中数据映射到一个Java对象上。如果使用Mybatis,这些全部省去了,想想都很让人兴奋。( Mybatis会将#{与}之间的内容转换为预处理语句中的"?"

select语句有,有很多属性允许我们来配置,以决定每条sql语句的作用细节。

<select
  id="getById"
  parameterType="int"
  parameterMap="deprecated"
  resultType="User"
  resultMap="userResultMap"
  flushCache="false"
  useCache="true"
  timeout="10000"
  fetchSize="256"
  statementType="PREPARED"
  resultSetType="FORWARD_ONLY">

属性 描述
  • 6
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值