MyBatis 学习笔记(二)SQL映射XML文件标签 select、insert、update | XML获取多个参数 | MyBatis实现多表查询 | resultMap标签映射

参考资料


SPOC

一、MyBatis SQL映射文件——输入输出


学习目标:

  • 掌握通过SQL映射文件进行增删改查
  • 掌握参数的使用
  • 掌握resultMap

1.1 SQL映射的XML文件 *Mapper.xml

SQL 映射 XML文件 的顶级标签(有前后顺序)

标签名 属性 / 描述
mapper 最外层标签,属性 namespace,用于指定Mapper接口类的引用位置,比如com.uni.UserMapper
cache 配置给定命名空间的缓存
cache-ref 从其他命名空间引用缓存配置
resultMap 用来描述数据库结果集和对象的对应关系
sql 可以重用的SQL块,也可以被其他语句引用
insert 映射插入语句
update 映射更新语句
delete 映射删除语句
select 映射查询语句

1.2 mapper 标签

属性:namespace 表示命名空间

  • namespace和子标签(select、insert、update等)的id 联合保证唯一,区别不同的mapper
  • 绑定DAO接口
    • namespace的命名必须跟某个接口同名
    • 接口中的方法与映射文件中SQL语句id一一对应
<?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="com.uni.User"> 
	<select id= "queryAllUser" ...>
    	...
    </select>

</mapper>

1.3 select 标签

  • select 是MyBatis中最常用的元素之一
  • select 语句有很多属性可以详细配置每一条语句
属性 描述
id 命名空间中唯一的标识符,接口中的方法与映射文件中SQL语句一 一对应
parameterType 传入SQL语句的参数类型
resultType SQL语句返回值类型的完整类名或者别名

1.4 XML中获取传入的参数

查询单个用户通常是需要指定id的,比如在mysql中是这样的:

select * from user where id = 1;

所以在接口中可以这样定义方法:

UserMapper.java

public interface UserMapper{
   
    User queryUserById(int id);
}

而在XML中如何获取到这个传入的参数呢?

这里可以通过#{} 获取这个参数,若只有一个参数,parameterType 参数可以省略不写,#{}里的内容可任意填,不过只能取一个)

#{}不能用于字符串拼接

UserMapper.xml

<!-- 根据ID查询用户 -->
<select id="queryUserById" resultType="com.uni.pojo.User">
    select * from smbms_user where id = #{id}
</select>

测试:

@Test
public void testQueryUserById(){
   
    SqlSession sqlSession = MyBatisUtil.getSession();
    User user = sqlSession.getMapper(UserMapper.class).queryUserById(1);
    System.out.println(user);
    sqlSession.close();
}

1.4.1 多参案例(一)模糊查询

现使用 smbms_user表的username用户名和sex性别两个字段来进行模糊查询,使用到的sql语句:

select * from smbms_user where userName like CONCAT('%超%') and sex = '男';

这句话能查询带超字且性别为男的所有用户,现使用MyBatis实现,要点有:

  • parameterType可不写
  • 使用#{param1} 表示第一个参数

原理:

  • 自动封装成Map类型的数据,key: param1 … paramN,或者参数的索引, value: 传入的参数值
  • 自定义名称 @Param注解

方式一:使用param按顺序取参

UserMapper.java

List<User> queryUserLikeNameAndGender(String name, int gender);

UserMapper.xml

<!-- 根据名称和性别进行模糊查询 -->
<select id="queryUserLikeNameAndGender" resultType="com.uni.pojo.User
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值