自己动手实现一个简单的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) {
        this.salt = salt;
    }

    public String getEmail() {
    
自己动手框架是一种非常有挑战性的任务,尤其是对于 ORM(对象关系映射)、MVC(模型-视图-控制器)和IOC(控制反转)这三个框架而言。以下是对这三个框架的简要介绍,以及它们的实现过程。 首先,ORM(对象关系映射)框架是用于将数据库中的表映射为对象的一种技术。在实现ORM框架时,需要定义对象和表之间的映射关系,并提供相应的API来进行数据库的增删改查操作。还需要处理对象之间的关联关系(如一对一、一对多等),并提供事务管理、缓存等功能。 其次,MVC(模型-视图-控制器)框架是一种用于开发Web应用程序的架构模式,将应用程序分为模型、视图和控制器三层。在实现MVC框架时,需要定义模型、视图和控制器的接口,并提供相应的实现。模型负责处理数据逻辑,视图负责展示用户界面,而控制器则负责接收用户请求并进行处理,最后将结果返回给视图进行展示。 最后,IOC(控制反转)框架是一种通过依赖注入来管理对象之间的依赖关系的技术。在实现IOC框架时,需要定义依赖注入的规则,并提供相应的实现。可以使用反射机制来自动实例化对象,并将依赖的对象注入到目标对象中。还需要提供对象的生命周期管理(如单例模式、原型模式等)和对象的配置方式(如XML配置、注解配置等)。 总结来说,自己动手实现ORM、MVC和IOC框架需要掌握相关的技术和知识,并具备良好的设计和编码能力。除了理论知识外,还需要具备实际项目的经验,以便能够更好地设计和实现这些框架。同时,也需要不断学习和改进,跟上技术的发展潮流,以确保框架的高效和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值