对应到对象 数据库驼峰_从源码角度理解Mybatis字段映射(一) - 驼峰式命名
凯伦说,公众号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字段映射(一) - 驼峰式命名相关推荐
- 从源码角度理解ConstraintLayout#onMeasure对child的measure调用次数
熟悉绘制流程的都知道,ViewGroup可以决定child的绘制时机以及调用次数. 今天我们简单看下较为复杂的ConstraintLayout,看一下它对子View的onMeasure调用次数具体是多 ...
- 从源码角度理解LinearLayout#onMeasure对child的measure调用次数
熟悉绘制流程的都知道,ViewGroup可以决定child的绘制时机以及调用次数. 今天我们就从LinearLayout开始学起,看一下它对子View的onMeasure调用次数具体是多少. 简单起见 ...
- 从源码角度理解FrameLayout#onMeasure对child的measure调用次数
熟悉绘制流程的都知道,ViewGroup可以决定child的绘制时机以及调用次数. 今天我们就从最简单的FrameLayout开始学起,看一下它对子View的onMeasure调用次数具体是多少. 简 ...
- 封装成jar包_通用源码阅读指导mybatis源码详解:io包
io包 io包即输入/输出包,负责完成 MyBatis中与输入/输出相关的操作. 说到输入/输出,首先想到的就是对磁盘文件的读写.在 MyBatis的工作中,与磁盘文件的交互主要是对 xml配置文件的 ...
- 从源码角度分析 Mybatis 工作原理
作者:vivo互联网服务器团队-Zhang Peng 一.MyBatis 完整示例 这里,我将以一个入门级的示例来演示 MyBatis 是如何工作的. 注:本文后面章节中的原理.源码部分也将基于这个示 ...
- 从源码角度理解 FragmentTransaction实现
谈到fragment的使用,肯定绕不过FragmentTransaction事务,对fragment的操作必定用到它,其提供show,hide,add,remove,replace等常用的fragme ...
- tomcat源码_从源码角度讲Tomcat在SpringBoot 中是如何启动的?
我们知道 SpringBoot 给我们带来了一个全新的开发体验,我们可以直接把 web 程序达成 jar 包,直接启动,这就得益于 SpringBoot 内置了容器,可以直接启动,本文将以 Tomca ...
- java comparator 降序排序_【转】java comparator 升序、降序、倒序从源码角度理解
原文链接:https://blog.csdn.net/u013066244/article/details/78997869 环境 jdk:1.7+ 前言 之前我写过关于comparator的理解,但 ...
- MyBatis源码-深入理解MyBatis Executor的设计思想
文章目录 Pre JDBC的执行过程 JDBC Demo JDBC Statement 接口 MyBatis执行过程 四大组件 组件之间的关系 Executor 执行器组件 架构总览 接口继承关系 P ...
最新文章
- Linux无法打开sda硬盘,linux – 无法挂载’/ dev / sda’
- centos部署mysql5.6免安装版
- springboot 不同环境不同的配置
- 根据企业信息化应用需求来分析工作流平台的选型
- java-多线程操作全(Thread)-Timer简单使用
- 域用户权限|安装软件
- Zend Debugger 配置
- 251f与ips屏显示器对比_8百左右预算,2020年PS平面设计/摄影后期显示器推荐/选购指南(全高清+高色域屏)...
- java对列表数据排序_如何在Java中对列表进行排序
- LINUX Centos7利用七牛空间做定时备份 qshell定时备份,定时上传到七牛空间
- windows超级工具AlantopTool
- 江苏省计算机二级python往年卷_历年江苏省计算机二级考试真题及答案2008-2009
- 天之涯地之角,raid信息丢了怎么找—记磁盘阵列数据恢复过程
- C语言:十进制、BCD码互换
- 菜鸟笔记--函数基础
- 江苏五大姓氏世家,第一王,第二张,看看你是不是来自名门望族
- CSS实例(一):漂亮的表格样式(使用CSS样式表控制表格样式)
- ajax无线遥控器,利用python+tkinter做一个简单的智能电视遥控器
- 软件著作权申请——使用了MIT-licence开源框架
- tp控制器进阶页面跳转重定向、