Mybatis 提供了映射器组件,通过接口+XML映射文件(注解)来动态产生一个映射器,完成实体类与数据表之间的映射。
实现映射器的步骤:
- 创建一个产生映射器的接口,并定义操作数据库的功能
public interface UserMapper {
/**
* 根据用户编号查询用户信息
* @param id
* @return
*/
public User getUserById(int id);
}
2.创建一个映射文件(或者使用注解)
注意事项:映射文件需要和接口在同一级目录下,并且与接口名相同
<?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属性:设置命名空间
namespace的值和接口的全限定名称一致
namespace属性的值+id属性的值 + SQL => 映射器
通过映射器能够获取到接口的动态实现对象
映射文件与接口名称一致,Mybatis就可以自动产生该接口的实现类
这个实现类也重写了这个接口中的方法,这个重写接口中的方法是如何实现的?
-->
<mapper namespace="com.dyh.demo.dao.UserMapper">
<!--
select标签用于查询
id属性:唯一标识,如果希望映射,id需要和接口中的方法名一致
parameterType属性:设置参数的类型, 可以省略
int 别名
#{} 占位符 #{标识符} 代表接口中方法的参数,只能一个参数这么用
resultType属性:设置返回类型, 在没有设置别名的情况下,
这个返回值类型如果是类类型,必须写全限定类名
Mybatis 映射的方式之一:
自动映射 : 当指定了SQL语句和实体类型
如果知道哪些字段的数据与实体bean的属性对应
如果字段名称和实体类的属性名称一致,可以自动映射
会调用实例化bean并调用set方法注入值
手动映射: resultMap
-->
<select id="getUserById"
resultType="com.dyh.demo.pojo.User">
select id , name, note from t_user where id = #{id}
</select>
</mapper>
3.需要在主配置文件中加载映射器
<!--
mappers指定多个映射文件路径
mapper子标签指定一个映射文件路径
url指定映射文件的网路路径
resource:指定映射文件路径
class:指定接口的全限定接口名
<mappers>
<mapper />
</mappers>
<mappers>
<mapper class="com.dyh.demo.dao.UserMapper"/>
<mapper class="com.dyh.demo.dao.BookMapper"/>
<mapper class="com.dyh.demo.dao.OrderMapper"/>
<mapper class="com.dyh.demo.dao.CourseMapper"/>
</mappers>
-->
<mappers>
<!--
扫描指定的包,Mybatis会为指定包下
所有映射器
接口+映射文件
接口+注解
动态产生实现类对象
-->
<package name="com.dyh.demo.dao"/>
</mappers>
4.测试类获取映射器
// oponSession返回的是DefaultSqlSession
SqlSession session = factory.openSession();
// 通过Mapper映射器获取指定接口的实现类的对象
UserMapper mapper = session.getMapper(UserMapper.class);
// 调用接口中的方法
// 执行器执行的是代理对象重写后的方法
User user = mapper.getUserById(1);