Mybatis-入门教程 第七章 其他

第七章 其他

第一节 实体类类型别名

1、目标

让Mapper配置文件中使用的实体类类型名称更简洁。

2、操作

①Mybatis全局配置文件

<!-- 配置类型的别名 -->
<typeAliases>
    <!-- 声明了实体类所在的包之后,在Mapper配置文件中,只需要指定这个包下的简单类名即可 -->
    <package name="com.atguigu.mybatis.entity"/>
</typeAliases>

②Mapper配置文件

<!-- Employee selectEmployeeById(Integer empId); -->
<select id="selectEmployeeById" resultType="Employee">
    select emp_id,emp_name,emp_salary,emp_gender,emp_age from t_emp
    where emp_id=#{empId}
</select>

3、Mybatis内置的类型别名

在这里插入图片描述

第二节 类型处理器

1、Mybatis内置类型处理器

无论是 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时,都会用类型处理器将获取的值以合适的方式转换成 Java 类型。

Mybatis提供的内置类型处理器:

在这里插入图片描述

2、日期时间处理

日期和时间的处理,JDK1.8以前一直是个头疼的问题。我们通常使用 JSR310 规范领导者 Stephen Colebourne 创建的 Joda-Time 来操作。JDK1.8已经实现全部的JSR310 规范了。

Mybatis在日期时间处理的问题上,提供了基于 JSR310(Date and Time API)编写的各种日期时间类型处理器。

MyBatis3.4以前的版本需要我们手动注册这些处理器,以后的版本都是自动注册的。

如需注册,需要下载mybatistypehandlers-jsr310,并通过如下方式注册
在这里插入图片描述

3、自定义类型处理器

当某个具体类型Mybatis靠内置的类型处理器无法识别时,可以使用Mybatis提供的自定义类型处理器机制。

  • 第一步:实现 org.apache.ibatis.type.TypeHandler 接口或者继承 org.apache.ibatis.type.BaseTypeHandler 类。
  • 第二步:指定其映射某个JDBC类型(可选操作)。
  • 第三步:在Mybatis全局配置文件中注册。

①创建自定义类型转换器类

@MappedTypes(value = Address.class)
@MappedJdbcTypes(JdbcType.CHAR)
public class AddressTypeHandler extends BaseTypeHandler<Address> {
    @Override
    public void setNonNullParameter(PreparedStatement preparedStatement, int i, Address address, JdbcType jdbcType) throws SQLException {

    }

    @Override
    public Address getNullableResult(ResultSet resultSet, String columnName) throws SQLException {

        // 1.从结果集中获取原始的地址数据
        String addressOriginalValue = resultSet.getString(columnName);

        // 2.判断原始数据是否有效
        if (addressOriginalValue == null || "".equals(addressOriginalValue))
            return null;

        // 3.如果原始数据有效则执行拆分
        String[] split = addressOriginalValue.split(",");
        String province = split[0];
        String city = split[1];
        String street = split[2];

        // 4.创建Address对象
        Address address = new Address();
        address.setCity(city);
        address.setProvince(province);
        address.setStreet(street);

        return address;
    }

    @Override
    public Address getNullableResult(ResultSet resultSet, int i) throws SQLException {
        return null;
    }

    @Override
    public Address getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
        return null;
    }
}

②注册自定义类型转换器

在Mybatis全局配置文件中配置:

<!-- 注册自定义类型转换器 -->
<typeHandlers>
    <typeHandler 
                 jdbcType="CHAR" 
                 javaType="com.atguigu.mybatis.entity.Address" 
                 handler="com.atguigu.mybatis.type.handler.AddressTypeHandler"/>
</typeHandlers>

第三节 Mapper映射

Mybatis允许在指定Mapper映射文件时,只指定其所在的包:

<mappers>
		<package name="com.atguigu.mybatis.dao"/>
</mappers>

此时这个包下的所有Mapper配置文件将被自动加载、注册,比较方便。

但是,要求是:

  • Mapper接口和Mapper配置文件名称一致
  • Mapper配置文件放在Mapper接口所在的包内

如果工程是Maven工程,那么Mapper配置文件还是要放在resources目录下:

在这里插入图片描述

第四节 插件机制

1、Mybatis四大对象

①Executor

在这里插入图片描述

②ParameterHandler

在这里插入图片描述

③ResultSetHandler

在这里插入图片描述

④StatementHandler

在这里插入图片描述

2、Mybatis插件机制

插件是MyBatis提供的一个非常强大的机制,我们可以通过插件来修改MyBatis的一些核心行为。插件通过动态代理机制,可以介入四大对象的任何一个方法的执行。著名的Mybatis插件包括 PageHelper(分页插件)、通用 Mapper(SQL生成插件)等。

如果想编写自己的Mybatis插件可以通过实现org.apache.ibatis.plugin.Interceptor接口来完成,表示对Mybatis常规操作进行拦截,加入自定义逻辑。

在这里插入图片描述

但是由于插件涉及到Mybatis底层工作机制,在没有足够把握时不要轻易尝试。

第五节 Mybatis底层的JDBC封装

org.apache.ibatis.executor.statement.PreparedStatementHandler类:

在这里插入图片描述

查找上面目标时,Debug查看源码的切入点是:

org.apache.ibatis.session.defaults.DefaultSqlSession类的update()方法

在这里插入图片描述

第六节 总结

在这里插入图片描述

  • Mybatis环境所需依赖 ★
  • 配置
    • Mybatis全局配置
    • Mapper配置 ★
  • Mapper接口 ★
  • API
    • SqlSessionFactory
    • SqlSession
  • MBG ★
  • 缓存
    • 一级缓存
    • 二级缓存
      • 自带
      • EHCache ☆
  • 原理
    • 把配置文件信息封装到Java对象中
    • 缓存底层机制
    • 四大接口
    • Mybatis底层是JDBC

总结的思维导图:

http://naotu.baidu.com/file/3fd32e13c7d4eb4dfadde0544ed905f9?token=27c10bbbf7dfc22e

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

管程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值