自己动手实现一个简单的ORM框架

一个最简单的ORM总结下来就两部分:

* 根据entity上的自定义注解生成mapping元数据信息
* 生成mapper接口的动态代理,根据具体的方法,动态生成sql并执行sql,然后通过反射的方式映射到具体的实体对象上去

解析自定义注解,生成元数据信息

首先我们先定义几个元信息注解:

  • @Table注解在entity类上,标注这个实体类对应的数据库的表名
/**
 * TODO
 *
 * @author : xiaojun
 * @since 10:57 2018/11/19
 */
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Table {
    /**
     * <p>
     * 实体对应的表名
     * </p>
     */
    String value() default "";
}
  • @Column标注在实体类的属性上,用来和表的字段名进行映射
package com.example.mybatisplusdemo.orm.annotation;

import java.lang.annotation.*;

/**
 * 数据库表的列名
 *
 * @author : xiaojun
 * @since 10:58 2018/11/19
 */
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Column {
    String value() default "";
}

  • @PK 用来标注表的主键字段
package com.example.mybatisplusdemo.orm.annotation;

import java.lang.annotation.*;

/**
 * 主键标识
 *
 * @author : xiaojun
 * @since 11:02 2018/11/19
 */
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface PK {
}

  • 以下是一个具体的User entity demo
package com.example.mybatisplusdemo.orm.entity;

import com.example.mybatisplusdemo.orm.annotation.Column;
import com.example.mybatisplusdemo.orm.annotation.PK;
import com.example.mybatisplusdemo.orm.annotation.Table;

import java.sql.Timestamp;

/**
 * <p>
 * 系统用户
 * </p>
 *
 * @author xiaojun
 * @since 2018-11-16
 */
@Table("sys_user")
public class User {


    @PK
    @Column("user_id")
    private Long userId;

    @Column("username")
    private String username;

    @Column("password")
    private String password;

    @Column("salt")
    private String salt;

    @Column("email")
    private String email;

    @Column("mobile")
    private String mobile;

    @Column("status")
    private Integer status;

    @Column("dept_id")
    private Long deptId;

    @Column("create_time")
    private Timestamp createTime;

    public Long getUserId() {
        return userId;
    }

    public void setUserId(Long userId) {
        this.userId = userId;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getSalt() {
        return salt;
    }

    public void setSalt(String salt)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值