le:/// 形式的 URL),或类名和包名等。
(1)使用相对于类路基的资源引用
<!-- 使用相对于类路径的资源引用 -->
<mappers>
<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
<mapper resource="org/mybatis/builder/BlogMapper.xml"/>
<mapper resource="org/mybatis/builder/PostMapper.xml"/>
</mappers>
(2)使用完全限定资源定位符(URL),不推荐使用
<!-- 使用完全限定资源定位符(URL) -->
<mappers>
<mapper url="file:///var/mappers/AuthorMapper.xml"/>
<mapper url="file:///var/mappers/BlogMapper.xml"/>
<mapper url="file:///var/mappers/PostMapper.xml"/>
</mappers>
(3)使用映射器接口实现类的完全限定类名
<!-- 使用映射器接口实现类的完全限定类名 -->
<mappers>
<mapper class="org.mybatis.builder.AuthorMapper"/>
<mapper class="org.mybatis.builder.BlogMapper"/>
<mapper class="org.mybatis.builder.PostMapper"/>
</mappers>
(4)将包内的映射器接口全部注册为映射器
<!-- 将包内的映射器接口全部注册为映射器
1.当一个包下有很多的xxMapper.xml文件和基于注解实现的接口时,为了方便,可以用包方式进行引用
2.将下面的所有xml文件和注解接口都进行注册-->
<mappers>
<package name="org.mybatis.builder"/>
</mappers>
2.SQL映射文件-xxMapper.xml
2.1基本介绍
mybatis – MyBatis 3 | XML 映射器
-
Mybatis 的真正强大之处在于它的语句映射(在XxxMapper.xml中配置),如果拿它和具有相同功能的 JDBC代码进行对比,你会发现立即省掉了将近 95% 的代码。MyBatis 致力于减少使用成本,让用户能更专注于SQL 代码。
-
SQL映射文件常用的顶级元素(按照应被定义的顺序列出):
-
cache - 该命名空间的缓存配置
-
cache-ref - 引用其他命名空间的缓存配置
-
resultMap - 描述如何从数据库的结果集 中加载对象,是最复杂也是最强大的元素
-
parameterType - 将会传入这条语句的参数的类全限定名或别名
-
sql - 可被其他语句引用的可重用语句块
-
insert - 映射插入语句
-
update - 映射更新语句
-
delete - 映射删除语句
-
select - 映射查询语句
2.2映射文件详细说明
2.2.1基本使用
-
insert,delete,update,select 这些在之前讲过,分别对应增删查改的方法和SQL语句的映射
-
如果获取到刚刚添加的Monster对象的id主键(获取自增长)也讲过了
<insert id="addMonster" parameterType="Monster" useGeneratedKeys="true" keyProperty="id">
INSERT INTO `monster`
(`age`,`birthday`,`email`,`gender`,`name`,`salary`)
VALUES (#{age},#{birthday},#{email},#{gender},#{name},#{salary})
</insert>
2.2.2传入类型-POJO或String
- 当有多个条件时,传入的参数设为POJO/Entity类型的 Java对象,这样可以通过 POJO/Entity 对象的属性来接收传入的参数
- 传入 POJO/Entity 类型时,如果查询时需要有多个筛选条件,怎么在映射文件中处理?一般是使用
#{}
的方式来获取入参的多个值(注意#{}内部的名称对应的是POJO对象的属性名,和表字段无关)
- 当传入的参数类型为String时,则使用
${}
的方式来接收传入的参数
应用案例
(1)MonsterMapper.java 接口
package com.li.mapper;
import com.li.entity.Monster;
import java.util.List;
/**
* @author 李
* @version 1.0
*/
public interface MonsterMapper {
//通过id或者名字查询
public List<Monster> findMonsterByNameOrId(Monster monster);
//查询名字中含有‘精’的妖怪
public List<Monster> findMonsterByName(String name);
}
(2)映射文件MonsterMapper.xml 实现接口方法
<mapper namespace="com.li.mapper.MonsterMapper">
<!--这里 #{}的值是从传入的参数的属性中获取的,`id`表示表的字段名,
这里的parameterType可以直接使用类名,是因为在mybatis的配置文件中配置了别名-->
<select id="findMonsterByNameOrId" parameterType="Monster" resultType="Monster">
SELECT * FROM `monster` WHERE `id` = #{id} OR `name` = #{name}
</select>
<!--当传入的参数类型为String时,使用${}的方式来接收参数-->
<select id="findMonsterByName" parameterType="String" resultType="Monster">
SELECT * FROM `monster` WHERE `nam