本文目录
- 前言
- 一、创建XML映射文件
- 二、MybatisX插件安装
- 三、mapper标签
- 四、select标签
- UserMapper接口方法
- UserMapper.xml
- 五、resultMap标签
- 定义resultMap标签
- 修改select标签
- 总结
前言
MyBatis的强大在于它的语句映射,它提供了注解和XML映射文件两种开发方式,都是为了减少我们的使用成本,屏蔽JDBC代码细节,节省代码,从而让我们更专注于SQL代码!
通过 《上文》,我们学会了常用12种注解开发,本文主要讲解XML映射文件方式开发,轻松学会创建XML映射文件和常用的select标签和resultMap标签的用法。
一、创建XML映射文件
XML映射文件的目录位置通常推荐
创建在resources
下,例如实战案例创建如下:
在tg-book-dal
的resources下创建与UserMapper.java
对应的Xml映射文件UserMapper.xml
,如下图:
要求:路径相同,名称相同。
不同行不行?可以通过
mybatis.mapper-locations
配置!建议保持默认相同!
UserMapper.xml
的内容定义如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.tg.book.dal.mapper.UserMapper">
</mapper>
二、MybatisX插件安装
这里推荐安装使用MybatisX插件,非常方便在接口与XML映射文件之间来回跳转
!以及可以生成标签
!
IDEA的File-》Settings-》Plugins
搜索MybatisX安装即可!
三、mapper标签
mapper标签
,它是最顶级的标签,也就是XML根标签,通过namespace
属性指定对应的接口
,比如这里指定的是:org.tg.book.dal.mapper.UserMapper,这样接口和XML映射文件就产生了关联,接口通过JDK动态代理生成实现类时,就会读取XML映射文件的对应配置!
如何配置呢?常用的XML标签有:
- select标签(对应写查询SQL语句)
- resultMap标签(结果映射,上文曾介绍过)
- insert标签(对应写插入INSERT语句)
- update标签(对应写修改UPDATE语句)
- delete标签(对应写删除DELETE语句)
- sql标签(对应写SQL语句,这个SQL语句可被其他语句引用的
可重用
的语句块)
四、select标签
我们先删除上文的注解方式,换成XML映射文件的方式来实现!
UserMapper接口方法
@Param
指定参数名
public interface UserMapper {
User selectByUserNamePassword(@Param("userName") String userName,@Param("password") String password);
}
这时MybatisX插件会提示一个错误,把鼠标悬浮在方法上,会提示selectByUserNamePassword方法在xml中没有定义
,我们点击Generate statement
UserMapper.xml
这时,在UserMapper.xml中会生成一个select标签
,使用id属性
指定对应的接口方法名,使用resultType属性
指定返回类型,如下图:
这里依然有一个警告:XML tag has empty body
,是因为我们没有写对应的查询select语句SQL,我们在select标签
中补充SQL语句如下:
select * from user where user_name =#{userName} and password =#{password}
SQL中的参数使用#{}
作为占位符
实际的效果与上文使用的
@Select注解
相同!
五、resultMap标签
同样的,运行后你会发现【User对象】的userId
并没有取到值,原因是【user表】的字段名叫id
,而不是userId
,名称不同所以无法获取到对应的值,我们通过resultMap
标签方式解决。
定义resultMap标签
<resultMap id="UserMap" type="org.tg.book.dal.po.User">
<id column="id" jdbcType="INTEGER" property="userId"/>
<result column="user_name" jdbcType="VARCHAR" property="userName"/>
<result column="password" jdbcType="VARCHAR" property="password"/>
</resultMap>
resultMap标签说明:
- 通过
id属性
定义唯一标识,type
属性定义结果类型 - 通过
id标签
指定主键列,result
标签指定非主键列property
指定对象的属性名column
指定数据表的列名jdbcType
指定数据表的字段类型
修改select标签
使用resultMap
属性代替了resultType
属性,resultMap属性内指定刚定义的resultMap id名称。
实际的效果与上文使用的
@Results和@Result注解
相同!
OK,到这,我们就使用XML映射文件方式,完整实现了接口方法selectByUserNamePassword!
总结
写一个数据库查询方法,简单来说,步骤如下:
- 创建接口对应的xml映射文件
- 创建查询方法对应的select标签
- 写查询selec语句SQL
- 【可选】如果【数据库字段】与【PO对象属性】不一致,需要增加结果映射resultMap标签,然后在select标签使用resultMap属性指定resultMap标签