MyBatis映射器

本文详细介绍了MyBatis的配置概述,重点解析了映射器的使用,包括Map接口在多参数传递中的应用,以及如何创建和配置映射文件。此外,还探讨了insert元素的特有属性,如keyProperty、keyColumn和useGeneratedKeys,以及主键自动递增回填的机制。

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

Mybatis配置概述

MyBatis的核心配置文件配置了很多影响MyBatis行为的信息,这些信息通常只会配置在一个文件中,并且不会轻易改动。另外,与Spring框架整合后,MyBatis的核心配置文件信息将配置到Spring的配置文件中。因此,在实际开发中需要编写或修改MyBatis的核心配置文件的情况不多。

映射器

在这里插入图片描述
在SQL映射文件中元素用于映射SQL的select语句,其示例代码如下:

<!-- 根据uid查询一个用户信息 -->
<selectid="selectUserById"parameterType="Integer"resultType="com.po.MyUser">
	select * from user where uid = #{uid}
</select>
上述示例代码中,id的值是唯一标识符,它接收一个Integer类型的参数,返回一个MyUser类型的对象,结果集自动映射到MyUser属性。

在这里插入图片描述

Map接口

在实际开发中,查询SQL语句经常需要多个参数,比如多条件查询。多个参数传递时,元素的parameterType属性值的类型是什么呢?在MyBatis中允许Map接口通过键值对传递多个参数。
假设数据操作接口中有个实现查询陈姓男性用户信息功能的方法:
public List selectAllUser(Map<String, Object> param);
此时,传递给映射器的是一个Map对象,使用它在SQL中设置对应的参数,对应SQL文件代码如下:

    <!-- 查询陈姓男性用户信息 -->
	<select id="selectAllUser"  resultType="com.po.MyUser" parameterType="map">
		select * from user 
		where uname like concat('%',#{u_name},'%')
		and usex = #{u_sex}
	</select>
上述SQL文件中参数名u_name和u_sex是Map的key。

JavaBean
在src目录下,创建一个名为com.pojo的包,在包中创建一个POJO类SeletUserParam
其次,将Dao接口中的selectAllUser方法修改为:
public List selectAllUser(SeletUserParam param);
再次,将com.mybatis包中的SQL映射文件UserMapper.xml中的“查询陈姓男性用户信息”代码修改为:

    <select id="selectAllUser"  resultType="com.po.MyUser" parameterType="com.pojo.SeletUserParam">
		select * from user 
		where uname like concat('%',#{u_name},'%')
		and usex = #{u_sex}
    </select>
最后,将com.controller包中UserController的“查询多个用户”代码片段修改。

insert
元素用于映射插入语句,MyBatis执行完一条插入语句后,将返回一个整数表示其影响的行数。它的属性与元素的属性大部分相同,在本节讲解它的几个特有属性。具体如下:
keyProperty:该属性的作用是将插入或更新操作时的返回值赋值给PO类的某个属性,通常会设置为主键对应的属性。如果是联合主键,可以在多个值之间用逗号隔开。
keyColumn:该属性用于设置第几列是主键,当主键列不是表中的第一列时需要设置。如果是联合主键时,可以在多个值之间用逗号隔开。
useGeneratedKeys:该属性将使MyBatis使用JDBC的getGeneratedKeys()方法获取由数据库内部生产的主键,如MySQL、SQL Server等自动递增的字段,其默认值为false。

创建映射文件

在src目录下,创建一个名为com.mybatis.mapper包,在该包中创建映射文件UserMapper.xml。
在这里插入图片描述
上述映射文件中,元素是配置文件的根元素,它包含了一个namespace属性,该属性值通常设置为“包名+SQL映射文件名”,指定了唯一的命名空间。
在这里插入图片描述

子元素、、以及中的信息是用于执行查询、添加、修改以及删除操作的配置。在定义的SQL语句中,“#{}”表示一个占位符,相当于“?”,而“#{uid}”表示该占位符待接收参数的名称为uid。
在这里插入图片描述

主键(自动递增)回填
MySQL、SQL Server等数据库的表格可以采用自动递增的字段作为主键。有时可能需要使用这个刚刚产生的主键,用以关联其他业务。

    <!-- 添加一个用户,成功后将主键值回填给uid(po类的属性)-->
	<insert id="addUser" parameterType="com.po.MyUser" 
	keyProperty="uid" useGeneratedKeys="true">
		insert into user (uname,usex) values(#{uname},#{usex})
	</insert>

自定义主键

如果实际工程中使用的数据库不支持主键自动递增(如Oracle),或者取消了主键自动递增的规则时,可以使用MyBatis的<selectKey>元素来自定义生成主键。
    <insert id="insertUser" parameterType="com.po.MyUser">
	<!-- 先使用selectKey元素定义主键,然后再定义SQL语句 -->
	<selectKey keyProperty="uid" resultType="Integer" order="BEFORE">
	   select if(max(uid) is null, 1 , max(uid)+1) as newUid from user
	</selectKey>
	insert into user (uid,uname,usex) values(#{uid},#{uname},#{usex})
    </insert>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值