手把手教编写一个java程序,手把手教你写一个java的orm(二)

创建映射关系

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

需要的依赖

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

javax.persistence

persistence-api

1.0

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

@Id

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

@Column

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

@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了~

我下一篇再写~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值