创建映射关系

​ 想要实现一个orm的功能,我觉得就是要将class和数据库中的表创建映射关系。把class的名称和表的名称,class属性名称和表的字段名称,属性类型与表的字段类型一一对应起来。可以通过配置文件,注解等等各种方式实现这个映射关系。

需要的依赖

​ 因为编写配置文件总是一件十分繁琐的事情,所以我决定使用注解的方式来实现这个映射。在项目刚开始写的时候我用的是自定义注解的方法。自己规定一套注解,后来觉得这样没有太大的必要,因为已经有jpa里的一套注解。所以直接用就好了。所以添加依赖:

<dependency><groupId>javax.persistence</groupId><artifactId>persistence-api</artifactId><version>1.0</version>
</dependency>

这里主要使用里面的三个注解:

  1. @Id

    添加在作为id 的字段上,标示为一个id,一个表中只能有一个id

  2. @Column

    添加在作为属性的字段上,name里填写表中的字段名称。

  3. @Table

    添加在作为属性的字段上,name里填写表的名称。

其他的一些注解暂时不需要,因为我不需要完整的实现jpa里面功能。

这样就可以将一个class和一个表映射起来了。完成之后一个class大致上是这样的:

sql:


CREATE TABLE `user` (                                                          `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户id',                         `name` varchar(225) DEFAULT NULL COMMENT '用户名',                              `create_date` datetime DEFAULT NULL,                                         `status` int(11) DEFAULT NULL,                                               `age` int(11) DEFAULT NULL COMMENT '年龄',                                     `mark` varchar(225) DEFAULT NULL,                                            PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2104778081 DEFAULT CHARSET=latin1 COMMENT='用户表'

class:


import java.util.Date;
import javax.persistence.Table;
import javax.persistence.Column;
import javax.persistence.Id;/*** 用户表** @author hejiaxuan*/
@Table(name = "user")
public class User {/*** 用户名*/@Column(name = "name")private String name;/*** 用户id*/@Id@Column(name = "id")private int id;/*** 年龄*/@Column(name = "age")private int age;/*** mark*/@Column(name = "mark")private String mark;/*** create_date*/@Column(name = "create_date")private Date createDate;/*** status*/@Column(name = "status")private int status;getter and setter and toString
}

数据类型

​ 上面在将各种名称做了映射之后,还要根据java中的数据类型和sql中的数据类型添加一下映射关系,因为class中的数据类型和sql中的并不通用。

​ 这个东西简单做的话其实不需要开发,在jdbc的ResultSet类中提供了一系列的方法:

String ResultSet.getString;
boolean ResultSet.getBoolean;
byte ResultSet.getByte;
short ResultSet.getShort;
int ResultSet.getInt;
long ResultSet.getLong;
float ResultSet.getFloat;
double ResultSet.getDouble;
BigDecimal ResultSet.getBigDecimal;
Bytes ResultSet.getBytes;
Date ResultSet.getDate;
Time ResultSet.getTime;

​ 这里可以根据class的属性类型来分别的调用,也可以直接调用:Object ResultSet.getObject;这个方法,让数据进行强制类型转换。但是这里有一定的规则,有些类型并不能转换成功,下面是我在写的时候遇到的可以转换成功的数据关系:

sql数据类型 java数据类型
VARCHAR String.class
CHAR String.class
TEXT String.class
MEDIUMTEXT String.class
LONGTEXT String.class
TINYTEXT String.class
BIT Boolean.class
INT int.class
BIGINT long.class
DOUBLE double.class
TINYINT int.class
FLOAT float.class
DECIMAL BigDecimal.class
INT int.class
BIGINT int.class
DECIMAL BigDecimal.class
DATETIME Date.class
TIME Date.class
DATE Date.class
TIMESTAMP Date.class

按照这种关系创建class后,一般是不会碰到什么很奇怪的错误的:-D

​ 如果想做的复杂一点,可以做一个数据类型转换的工具,可以随心所欲的转换各种数据类型。但是这里就不做了,其实也很简单的,稍微想一想就能写出来啦~~~。

这里,class和表的映射就已经结束了,已经满足了我对一个orm的需要,下一步就是要通过反射分析class并生成sql了~

我下一篇再写~~~

转载于:https://www.cnblogs.com/hebaibai/p/10294408.html

手把手教你写一个java的orm(二)相关推荐

  1. 手把手教你写一个Java的orm框架(4)

    开始准备生成sql 在上一篇里,我们已经取到了我们在生成sql语句中所需要的信息,这一篇里我们开始根据class来生成我们需要的sql.在这之前我们先确认几件事情 sql里的参数我们使用占位符的形式. ...

  2. 手把手教你写一个Matlab App(二)

    本章博客主要是介绍matlab app designer的基本功能以及如何制作封面,采用的是Matalb r2018a版本制作. 一.matlab app designer启动和基本功能的介绍 1.如 ...

  3. 手把手教你写一个Matlab App(一)

    对于传统工科的学生用的最多的编程软件应该就是matlab,其集成度高,计算能力强,容易上手,颇受大众青睐.今天挖的这个新坑,主要是分享用matlab app designer设计GUI界面的一些方法和 ...

  4. 手把手教你写一个spring IOC容器

    本文分享自华为云社区<手把手教你写一个spring IOC容器>,原文作者:技术火炬手. spring框架的基础核心和起点毫无疑问就是IOC,IOC作为spring容器提供的核心技术,成功 ...

  5. 手把手教你写一个中文聊天机器人

    本文来自作者 赵英俊(Enjoy) 在 GitChat 上分享 「手把手教你写一个中文聊天机器人」,「阅读原文」查看交流实录. 「文末高能」 编辑 | 哈比 一.前言 发布这篇 Chat 的初衷是想和 ...

  6. 手把手教你写一个生成对抗网络

    成对抗网络代码全解析, 详细代码解析(TensorFlow, numpy, matplotlib, scipy) 那么,什么是 GANs? 用 Ian Goodfellow 自己的话来说: " ...

  7. python k线合成_手把手教你写一个Python版的K线合成函数

    手把手教你写一个Python版的K线合成函数 在编写.使用策略时,经常会使用一些不常用的K线周期数据.然而交易所.数据源又没有提供这些周期的数据.只能通过使用已有周期的数据进行合成.合成算法已经有一个 ...

  8. 后端思维篇:手把手教你写一个并行调用模板

    前言 36个设计接口的锦囊中,也提到一个知识点:就是使用并行调用优化接口.所以接下来呢,就快马加鞭写第二篇:手把手教你写一个并行调用模板~ 一个串行调用的例子(App首页信息查询) Completio ...

  9. 手把手教你做一个Java贪吃蛇小游戏

    大家好,我是孙不坚1208,这篇博客给大家分享一下:如何做一个贪吃蛇小游戏(Java版)的exe应用程序,希望能给需要帮助的朋友带来方便. 手把手教你做一个Java贪吃蛇小游戏的exe应用程序 一.J ...

最新文章

  1. TCP/IP协议:链路层
  2. Vue 中的 v-if 和 v-show 修饰符
  3. UILabel上展示不同颜色的文字(NSAttributedString)
  4. ANT 运行jar包的中文乱码问题
  5. java多线程 cpu分配_java多线程总结(转载)
  6. 创建初始脚本工具mkscript.sh
  7. wxPython--学习笔记(一)
  8. 《JavaScript语言精粹》笔记(内附《JavaScript语言精粹》百度云下载链接)
  9. Cifar10数据集转换成jpg格式
  10. matlab-基础 取整函数 向0取整 取最近整数 向上取整 向下取整
  11. 使用PhantomJS网页截图
  12. 用数据说话:北京房价数据背后的数据
  13. 玩转华为ENSP模拟器系列 | 接入用户采用Windows7客户端通过IKEv2方式接入总部VdPdNd(采用证书认证方式)
  14. [经典面试题]实现memcpy库函数
  15. [历史随笔]帝国如风--元朝的另类历史
  16. 服务器硬盘选金盘好吗,硬盘怎么选?NAS 盘、监控盘、企业级盘区别?
  17. 图片点击放大,你的网页也能做到!
  18. 排列组合|分组和分配问题
  19. 支付宝SDK下载页面
  20. Kony Development Cloud

热门文章

  1. java gridlayout 设置列宽_在Kivy的GridLayout中设置网格列宽?
  2. 不会linux的php难找工作,学linux系统难吗
  3. 计算机网络—数据链路层的差错控制
  4. OpenGL基础4:最基础的单元 —— 三角形
  5. Unity3D基础39:人物角色模型
  6. 利用SQL建立数据库
  7. 拆点并查集(poj 1182: 食物链)
  8. 利用膨胀和腐蚀获取图像边缘 matlab实现
  9. matlab2c使用c++实现matlab函数系列教程-diag函数
  10. mysql 动态插入日期_mysql 如何动态传入一个时间得到此时间的某个时间点