Mapper XML 文件(映射文件)



小贴士:

  • 查询操作的select标签需要两个属性:id、resultType/resultMap(结果类型)

  • 增删改标签只需要一个属性:id

CRUD标签

select

insert

update

delete

映射文件中语句接收方法参数

CRUD标签都有一个属性parameterType,statement通过它指定接收的参数类型。

接收参数的方式有两种:

#{} 预编译

${} 非预编译(直接的sql拼接,不能防止sql注入)

参数类型有三种:

基本数据类型

HashMap(使用方式和pojo类似)

pojo自定义包装类型

${ }的用法

场景:数据库有两个一模一样的表。历史表,当前表

查询表中的信息,有时候从历史表中去查询数据,有时候需要去新的表去查询数据。希望使用1个方法来完成操作。

在UserMapper接口中,添加根据表名查询用户信息的方法:

在UserMapper映射文件中,添加方法对应的statement:

输出(报错):

如果你要动态传入的字段名是表名,并且sql执行是预编译的,这显然是不行的,所以你必须改成非预编译的,也就是这样:

注意:

使用${} 去接收参数信息,在一个参数时,默认情况下必须使用${value}获取参数值,

而#{} 只是表示占位,与参数的名字无关,如果只有一个参数,可以使用任意参数名接收参数值,会自动对应。

但是这并不是一种稳妥的解决方案,推荐使用@Param注解指定参数名,所以以上接口及映射文件可以改成如下:

一个参数时,在使用#{ }传参时,可以通过任意参数名接收参数;而 ${ },默认必须通过value来接收参数。

可以通过@Param注解指定参数名

#{ }接受多个参数

当mapper接口要传递多个参数时,有两种传递参数的方法:

1、 默认规则获取参数{arg0,arg1,param1,param2}

2、 使用@Param注解指定参数名

案例:实现一个简单的用户登录,根据username和password验证用户信息

在UserMapper接口中,添加登陆方法:

在UserMapper.xml配置中,添加登陆方法对应的Statement配置:

在UserMapperTest测试用例中,添加测试方法:

运行报错:

注意报错信息:没有找到参数userName,可用的参数是:[arg1,arg0,param1,param2],所以可有以下解决方案:

最终解决方案:

在接口方法中的参数前,添加@Param注解指定参数名

通常在方法的参数列表上加上一个注解@Param(“xxxx”) 表示参数的名字,然后通过${“xxxx”}或#{“xxxx”}获取参数

注意:

单个参数时,#{}与参数名无关的。${}默认通过value取值

多个参数时,#{} ${}与参数名(@Param)有关。

什么时候需要加@Param注解?什么时候不加?

单个参数不加,多个参数加

说明:

  • map & pojo 不需要加@param
  • 多参数建议加@param ,不加就需要按照param1,param2,...paramN
  • List & Array 可以不加@param 如果不加@param取值需要写 list & array
  • 如果有多个List参数那么取值 param1,param2,... paramN

sql片段

很多时候同一个sql片段,可能在很多映射文件里都有使用,这就需要添加一个映射文件,用来统一定义sql片段。

如下,在resource目录下新增CommonSQL.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">
<!-- namespace(命名空间):映射文件的唯一标识 -->
<mapper namespace="CommonSQL">
<sql id="commonSql">
id,
user_name,
password,
name,
age,
sex,
birthday,
created,
updated
</sql>
</mapper>

定义好sql片段的映射文件之后,接下来就该使用它了,首先应该把该映射文件引入到mybatis的全局配置文件中(mybatis-config.xml):

最后在需要使用该sql片段的地方通过include标签的refId属性引用该sql片段:<include refId="名称空间.sql片段的id" />

在UserMapper.xml的映射文件中,进一步改造根据用户名查询用户信息

posted @   Lz_蚂蚱  阅读(940)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起