这是我参与11月更文挑战的第18天,活动详情查看:2021最后一次更文挑战
ParameterType
- 一个基本类型的参数,可以通过
#{参数名}
获取
1 | xml复制代码<?xml version="1.0" encoding="UTF-8" ?> |
- 多个参数时采用Map,通过
#{Key}
获取
1 | java复制代码Map<String, Object> map = new HashMap<>(); |
1 | xml复制代码<?xml version="1.0" encoding="UTF-8" ?> |
- 对象传递参数,通过
#{属性名}
获取
1 | xml复制代码<?xml version="1.0" encoding="UTF-8" ?> |
- 使用注解,在接口方法的参数前加 @Param() 属性,直接取 @Param() 中设置的值即可,不需要单独设置参数类型
1 | java复制代码import org.apache.ibatis.annotations.Param; |
1 | xml复制代码<?xml version="1.0" encoding="UTF-8" ?> |
关于@Param
使用 @Param 注解用于给方法参数起一个名字。使用原则:
- 在方法只接受一个参数的情况下,可以不使用 @Param。
- 在方法接受多个参数的情况下,建议一定要使用 @Param 注解给参数命名。
- 如果参数是 JavaBean , 则不能使用@Param。
- 不使用 @Param 注解时,参数只能有一个,并且是Javabean。
#与$的区别
- #{} 的作用主要是替换预编译语句(PrepareStatement)中的占位符? 【推荐使用】
1 | sql复制代码INSERT INTO user (name) VALUES (#{name}); |
- ${} 的作用是直接进行字符串替换
1 | sql复制代码INSERT INTO user (name) VALUES ('${name}'); |
ResultType
自动映射
resultMap
元素是 MyBatis 中最重要最强大的元素。它可以让你从 90% 的 JDBCResultSets
数据提取代码中解放出来。- 实际上,在为一些比如连接的复杂语句编写映射代码的时候,一份
resultMap
能够代替实现同等功能的长达数千行的代码。 - ResultMap 的设计思想是,对于简单的语句根本不需要配置显式的结果映射,而对于复杂一点的语句只需要描述它们的关系就行了
简单映射语句示例,不需要显指定 resultMap
。比如:
1 | xml复制代码<?xml version="1.0" encoding="UTF-8" ?> |
上述语句只是简单地将所有的列映射到 HashMap
的键上,这由 resultType
属性指定。虽然在大部分情况下都够用,但是 HashMap 不是一个很好的模型。你的程序更可能会使用 JavaBean 或 POJO(Plain Old Java Objects,普通老式 Java 对象)作为模型。
手动映射
返回值类型为 resultMap,编写 resultMap,实现手动映射!
1 | xml复制代码<?xml version="1.0" encoding="UTF-8" ?> |
注解开发
适用于简单的 SQL 语句,利用注解开发就不需要 mapper.xml 映射文件
- 在接口中添加注解
1 | java复制代码package mapper; |
- 在mybatis的核心配置文件中注入
1 | xml复制代码<!--注册 Mapper--> |
- 测试 OK 即可
一对多
多个学生对应一个老师
- 创建学生实体类
1 | java复制代码@Data |
- 编写 StudentMapper 接口
1 | java复制代码public interface StudentMapper { |
- 编写 Mapper.xml 文件
1 | xml复制代码<?xml version="1.0" encoding="UTF-8" ?> |
注:当子查询需要传多个参数时
1 | XML复制代码<?xml version="1.0" encoding="UTF-8" ?> |
多对一
一个老师对应多个学生
- 创建教师实体类
1 | java复制代码@Data |
- 编写 TeacherMapper 接口
1 | java复制代码public interface TeacherMapper { |
- 编写 Mapper.xml 文件
1 | xml复制代码<?xml version="1.0" encoding="UTF-8" ?> |
本文转载自: 掘金