mybatis源码学习-----property工具包

本文介绍了mybatis的property包,包含PropertyCopier、PropertyNamer和PropertyTokenizer三个工具类。PropertyCopier负责对象间属性复制,PropertyNamer处理属性名与方法名转换,PropertyTokenizer解析属性表达式,如在mapper.xml中的order.orderName。文中还详细解析了PropertyTokenizer的属性和迭代处理多层嵌套表达式的过程。
摘要由CSDN通过智能技术生成

property工具包简介

org.apache.ibatis.reflection.property包下共有三个工具类,PropertyCopier、PropertyNamer和PropertyTokenizer。

  • PropertyCopier:主要用于两个对象之间进行属性复制
  • PropertyNamer:主要用于完成属性名和方法名之间的转换
  • PropertyTokenizer:主要用于解析属性表达式,比如在mapper.xml中经常写的
<if test="order.orderName != null && order.orderName != ''">
	......
</if>

这里的order.orderName就是属性表达式而PropertyTokenizer工具类的作用就是解析属性表达式

PropertyCopier

属性复制器只有一个方法copyBeanProperties(Class<?> type, Object sourceBean, Object destinationBean),该方法的功能是通过递归的方法将sourceBean对象中的属性复制到destinationBean对象中,包括sourceBean和destinationBean的父对象中的属性

//final修饰,不允许进行扩展或修改。
public final class PropertyCopier {
   
  private PropertyCopier() {
   
  }
    
 public static void copyBeanProperties(Class<?> type, Object sourceBean, Object destinationBean) {
   
    Class<?> parent = type;
    while (parent != null) {
   //递归退出条件
      final Field[] fields = parent.getDeclaredFields();//获取当前类声明的所有字段
      for (Field field : fields) {
   
        try {
   
          try {
   
            //将sourceBean中的该字段的值赋给destinationBean中对应的字段
            field.set(destinationBean, field.get(sourceBean));
          } catch (IllegalAccessException e) {
   
            if (Reflector.canControlMemberAccessible()) {
   
              field.setAccessible(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值