凯伦说,公众号ID: KailunTalk,努力写出最优质的技术文章,欢迎关注探讨。

在上篇博客-[JDBC] 处理ResultSet,构建Java对象中提到,我们需要分析Mybatis在转换Result到需要的Java业务对象时做的三件事,如下:

1. 解决了数据库列名到Java列名的映射。

2.解决了数据库类型到Java类型的转换工作。

3.在转换过程中具备一定的容错能力。

其实核心就是:

1.数据库中的列名怎么和对象中的字段对应起来。

2.数据库中的列的类型怎么转换到合适的Java类型,不引起转换失败。

今天我们先来看第一点,数据库中的列名怎么和对象中的字段对应起来。首先是日常PO(Persistant Object) CityPO,里面有五个字段。

public class CityPO {

Integer id;

Long cityId;

String cityName;

String cityEnName;

String cityPyName;

本次要查询的数据库中的列名如下所示。

mysql> mysql> desc SU_City;

+--------------+-------------+------+-----+-------------------+-----------------------------+

| Field | Type | Null | Key | Default | Extra |

+--------------+-------------+------+-----+-------------------+-----------------------------+

| id | int(11) | NO | PRI | NULL | auto_increment |

| city_id | int(11) | NO | UNI | NULL | |

| city_name | varchar(20) | NO | | | |

| city_en_name | varchar(20) | NO | | | |

| city_py_name | varchar(50) | NO | | | |

| create_time | datetime | NO | | CURRENT_TIMESTAMP | |

| updatetime | datetime | NO | MUL | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |

+--------------+-------------+------+-----+-------------------+-----------------------------+

7 rows in set (0.01 sec)

我们是按照驼峰式命名,把数据库中的列名对应到了对象的字段名。如下是Mybatis的接口类和映射文件。

public interface CityMapper {

CityPO selectCity(int id);

}

/p>

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

select id,city_id,city_name,city_en_name from SU_City where id = #{id}

在上面的映射文件中,namespace指定了这个接口类的全限定类名,紧随其后的select代表是select语句,id是接口类中函数的名字,resultType代表了从这条语句中返回的期望类型的类的完全限定名或别名,在此例子中是我们的业务对象CityPO的类路径。

主要有三种方案

1.驼峰式命名开关,或者不开,数据库列和字段名全一致。

2.Select时指定AS。

3.resultMap 最稳健。

这篇主要看一下第一种,附上示例和部分源码走读。

1.驼峰命名开关。

因为CityPO的列名是完全根据数据库列名驼峰式命名后得到的,因此Mybatis提供了一个配置项。开启开配置项后,在匹配时,能够根据数据库列名找到对应对应的驼峰式命名后的字段。

我们从源码角度解读一下,Mybat处理ResultSet的映射默认都在DefaultResultSetHandler中完成。

处理行数据的时候的时候主要在下面

对应到对象 数据库驼峰_从源码角度理解Mybatis字段映射(一) - 驼峰式命名相关推荐

  1. 从源码角度理解ConstraintLayout#onMeasure对child的measure调用次数

    熟悉绘制流程的都知道,ViewGroup可以决定child的绘制时机以及调用次数. 今天我们简单看下较为复杂的ConstraintLayout,看一下它对子View的onMeasure调用次数具体是多 ...

  2. 从源码角度理解LinearLayout#onMeasure对child的measure调用次数

    熟悉绘制流程的都知道,ViewGroup可以决定child的绘制时机以及调用次数. 今天我们就从LinearLayout开始学起,看一下它对子View的onMeasure调用次数具体是多少. 简单起见 ...

  3. 从源码角度理解FrameLayout#onMeasure对child的measure调用次数

    熟悉绘制流程的都知道,ViewGroup可以决定child的绘制时机以及调用次数. 今天我们就从最简单的FrameLayout开始学起,看一下它对子View的onMeasure调用次数具体是多少. 简 ...

  4. 封装成jar包_通用源码阅读指导mybatis源码详解:io包

    io包 io包即输入/输出包,负责完成 MyBatis中与输入/输出相关的操作. 说到输入/输出,首先想到的就是对磁盘文件的读写.在 MyBatis的工作中,与磁盘文件的交互主要是对 xml配置文件的 ...

  5. 从源码角度分析 Mybatis 工作原理

    作者:vivo互联网服务器团队-Zhang Peng 一.MyBatis 完整示例 这里,我将以一个入门级的示例来演示 MyBatis 是如何工作的. 注:本文后面章节中的原理.源码部分也将基于这个示 ...

  6. 从源码角度理解 FragmentTransaction实现

    谈到fragment的使用,肯定绕不过FragmentTransaction事务,对fragment的操作必定用到它,其提供show,hide,add,remove,replace等常用的fragme ...

  7. tomcat源码_从源码角度讲Tomcat在SpringBoot 中是如何启动的?

    我们知道 SpringBoot 给我们带来了一个全新的开发体验,我们可以直接把 web 程序达成 jar 包,直接启动,这就得益于 SpringBoot 内置了容器,可以直接启动,本文将以 Tomca ...

  8. java comparator 降序排序_【转】java comparator 升序、降序、倒序从源码角度理解

    原文链接:https://blog.csdn.net/u013066244/article/details/78997869 环境 jdk:1.7+ 前言 之前我写过关于comparator的理解,但 ...

  9. MyBatis源码-深入理解MyBatis Executor的设计思想

    文章目录 Pre JDBC的执行过程 JDBC Demo JDBC Statement 接口 MyBatis执行过程 四大组件 组件之间的关系 Executor 执行器组件 架构总览 接口继承关系 P ...

最新文章

  1. Linux无法打开sda硬盘,linux – 无法挂载’/ dev / sda’
  2. centos部署mysql5.6免安装版
  3. springboot 不同环境不同的配置
  4. 根据企业信息化应用需求来分析工作流平台的选型
  5. java-多线程操作全(Thread)-Timer简单使用
  6. 域用户权限|安装软件
  7. Zend Debugger 配置
  8. 251f与ips屏显示器对比_8百左右预算,2020年PS平面设计/摄影后期显示器推荐/选购指南(全高清+高色域屏)...
  9. java对列表数据排序_如何在Java中对列表进行排序
  10. LINUX Centos7利用七牛空间做定时备份 qshell定时备份,定时上传到七牛空间
  11. windows超级工具AlantopTool
  12. 江苏省计算机二级python往年卷_历年江苏省计算机二级考试真题及答案2008-2009
  13. 天之涯地之角,raid信息丢了怎么找—记磁盘阵列数据恢复过程
  14. C语言:十进制、BCD码互换
  15. 菜鸟笔记--函数基础
  16. 江苏五大姓氏世家,第一王,第二张,看看你是不是来自名门望族
  17. CSS实例(一):漂亮的表格样式(使用CSS样式表控制表格样式)
  18. ajax无线遥控器,利用python+tkinter做一个简单的智能电视遥控器
  19. 软件著作权申请——使用了MIT-licence开源框架
  20. tp控制器进阶页面跳转重定向、

热门文章

  1. 数据库每日一题 2020.05.07
  2. 不用Oracle?基于MySQL数据库下亿级数据的分库分表
  3. 呐,你要的新年攻略和文章汇总
  4. 一条SQL语句的千回百转
  5. 文字识别:关键信息提取的3种探索方法
  6. 一个数据库管理员的自我救赎之路
  7. 实战分享丨MySQL 与Django版本匹配相关经验
  8. 中俄国际社区大佬共话Java,苦Lambda表达式久矣?
  9. 小熊派IoT开发板系列教程正式发布——免费学习
  10. 华为云一站式AI开发平台ModelArts获2019全球智博会金奖