首页 > 代码库 > 手写SORM(simple object relation mapping)框架2—接口设计

手写SORM(simple object relation mapping)框架2—接口设计

首先在工程下建立3个包,分别是:core,utils,bean

core:

  Query接口

package com.yf.sorm.core;

import java.util.List;

/**
 * 负责查询(对外提供服务的核心类)
 * @author yangf
 *
 */
public interface Query {
    
    /**
     * 直接执行一个DML语句
     * @param sql sql语句
     * @param params 参数
     * @return 执行SQL语句后影响记录的行数
     */
    public int executeDML(String sql, Object[] params);
    
    
    /**
     * 将一个对象存储到数据库中
     * @param obj 要存储的对象
     */
    public void insert(Object obj);
    
    /**
     * * 删除clazz表示类对应的表中的记录(指定主键值id的记录)
     * @param clazz 跟表对应的类的class对象
     * @param id 主键的值
     */
    public void delete(Class<?> clazz, int id);
    
    /**
     * 输出对象在数据库中对应的记录(对象所在的类对应表,对象的主键值对应记录)
     * @param obj 对象
     */
    public void delete(Object obj);
    
    /**
     * 更新对象对应的记录,并且只更新指定的字段的值
     * @param obj 所要更新的对象
     * @param field 更新的属性列表
     * @return 执行sql语句后影响记录的行数
     */
    public int update(Object obj, String[] field);
    
    /**
     * 查询返回多行记录,并将每行记录封装到clazz指定的类的对象中
     * @param sql 查询语句
     * @param clazz 封装数据的javabean类的class对象
     * @param params sql的参数
     * @return 查询到的结果
     */
    public <T> List<T> queryRows(String sql, Class<?> clazz, Object[] params);
    
    /**
     * 查询返回一行记录,并将该记录封装到clazz指定的类的对象中
     * @param sql 查询语句
     * @param clazz 封装数据的javabean类的class对象
     * @param params sql的参数
     * @return 查询到的结果
     */
    public <T> T queryUniqueRow(String sql, Class<?> clazz, Object[] params);
    
    /**
     * 查询返回一个值(一行一列),并将该值返回
     * @param sql 查询语句
     * @param params sql参数
     * @return 查询到的结果
     */
    public <T> T queryValue(String sql, Object[] params);
    
    /**
     * 查询返回一个数字(一行一列),并将该值返回
     * @param sql 查询语句
     * @param params sql的参数
     * @return 查询到的数字
     */
    public Number queryNumber(String sql, Object[] params);
}

  TypeConvertor接口

package com.yf.sorm.core;

/**
 * 负责java数据类型和数据库数据类型的相互转换
 * @author yangf
 *
 */
public interface TypeConvertor {
    
    /**
     * 将数据库数据类型转化为java的数据类型
     * @param columnType 数据库字段的数据类型
     * @return java的数据类型
     */
    public String databaseTypeToJavaType(String columnType);
    
    /**
     * 将java数据类型转化为数据库数据类型
     * @param javaDataType java数据类型
     * @return 数据库数据类型
     */
    public String javaTypeTodatabaseType(String javaDataType);
}


bean:

  ColumnInfo类

  

package com.yf.sorm.bean;

/**
 * 封装表中一个字段的信息
 * @author yangf
 *
 */
public class ColumnInfo {
    
    /**
     * 字段名称
     */
    private String name;
    
    /**
     * 字段的数据类型
     */
    private String dataType;
    
    /**
     * 字段的键类型(0:普通键,1:主键,2:外键)
     */
    private int keyType;
    
    /**
     * 空构造器
     */
    public ColumnInfo() {
    }
    
    /**
     * 构造器
     * @param name 字段名称
     * @param dataType 字段的数据类型
     * @param keyType 字段的键类型
     */
    public ColumnInfo(String name, String dataType, int keyType) {
        super();
        this.name = name;
        this.dataType = dataType;
        this.keyType = keyType;
    }
    
    /**
     * 返回字段名称
     * @return 字段名称
     */
    public String getName() {
        return name;
    }
    
    /**
     * 设定字段名称
     * @param name 字段名称
     */
    public void setName(String name) {
        this.name = name;
    }
    
    /**
     * 返回字段的数据类型
     * @return 字段的数据类型
     */
    public String getDataType() {
        return dataType;
    }
    
    /**
     * 设定字段的数据类型
     * @param dataType 字段的数据类型
     */
    public void setDataType(String dataType) {
        this.dataType = dataType;
    }
    
    /**
     * 返回字段的键类型
     * @return 字段的键类型
     */
    public int getKeyType() {
        return keyType;
    }

    /**
     * 设定字段的键类型
     * @param keyType 字段的键类型
     */
    public void setKeyType(int keyType) {
        this.keyType = keyType;
    }
}

  TableInfo:

package com.yf.sorm.bean;

import java.util.Map;

/**
 * 存储表结构的信息
 * @author yangf
 *
 */
public class TableInfo {
    
    /**
     * 表名
     */
    private String Tname;
    
    /**
     * 所有字段的信息 key:字段名称
     */
    private Map<String, ColumnInfo> colums;
    
    /**
     * 唯一主键,本框架只支持表中有且只有一个主键的情况
     */
    private ColumnInfo onlyPriKey;

    
    /**
     * 空构造器
     */
    public TableInfo() {
    }

    /**
     * 构造器
     * @param tname 表名
     * @param colums 所有字段的信息
     * @param onlyPriKey 唯一主键
     */
    public TableInfo(String tname, Map<String, ColumnInfo> colums, ColumnInfo onlyPriKey) {
        super();
        Tname = tname;
        this.colums = colums;
        this.onlyPriKey = onlyPriKey;
    }

    /**
     * 返回表名
     * @return 表名
     */
    public String getTname() {
        return Tname;
    }

    /**
     * 设定表名
     * @param tname 表名
     */
    public void setTname(String tname) {
        Tname = tname;
    }

    /**
     * 返回所有字段的信息
     * @return 所有字段的信息
     */
    public Map<String, ColumnInfo> getColums() {
        return colums;
    }

    /**
     * 设定所有字段的信息
     * @param colums 所有字段的信息
     */
    public void setColums(Map<String, ColumnInfo> colums) {
        this.colums = colums;
    }

    /**
     * 返回唯一主键
     * @return 唯一主键
     */
    public ColumnInfo getOnlyPriKey() {
        return onlyPriKey;
    }

    /**
     * 设定唯一主键
     * @param onlyPriKey 唯一主键
     */
    public void setOnlyPriKey(ColumnInfo onlyPriKey) {
        this.onlyPriKey = onlyPriKey;
    }
}

 

手写SORM(simple object relation mapping)框架2—接口设计