java (281)手写SORM之总体架构图解

4 篇文章 0 订阅

一:

这里写图片描述

二:

这里写图片描述

这里写图片描述

具体的代码如下,由于代码量多,所以只选取了部分,

如果想要全码的,请在此文回复我,留给我联系方式,我会发你

这里写图片描述

ColumnInfo

package com.imust.sorm.bean;

/**
 * 封装了表中一个字段的信息
 * @author  Zachary (为上帝所心仪的人)
 * @date    2017年10月2日
 * @project zzfSORM
 * @package com.imust.sorm.bean
 */
public class ColumnInfo {

    /**
     * 字段名称
     */
    private String name;

    /**
     * 字段的数据类型
     */
    private String dataType;

    /**
     * 字段的键类型
     */
    private int keyType;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDataType() {
        return dataType;
    }

    public void setDataType(String dataType) {
        this.dataType = dataType;
    }

    public int getKeyType() {
        return keyType;
    }

    public void setKeyType(int keyType) {
        this.keyType = keyType;
    }

    public ColumnInfo(String name, String dataType, int keyType) {
        super();
        this.name = name;
        this.dataType = dataType;
        this.keyType = keyType;
    }

    public ColumnInfo() {
        super();
    }

}

Configuration

package com.imust.sorm.bean;

/**
 * 管理配置信息
 * @author  Zachary (为上帝所心仪的人)
 * @date    2017年10月2日
 * @project zzfSORM
 * @package com.imust.sorm.bean
 */
public class Configuration {

    /**
     * 驱动类
     */
    private String driver;
    /**
     * jdbc的url
     */
    private String url;
    /**
     * 数据库的用户名
     */
    private String user;
    /**
     * 数据库的密码
     */
    private String pwd;
    /**
     * 正在使用哪个数据库
     */
    private String usingDB;
    /**
     * 项目的源码路径
     */
    private String srcPath;
    /**
     * 扫描生成java类的包(po的意思是Persistence object 持久化对象)
     */
    private String poPackage;

    public String getDriver() {
        return driver;
    }

    public void setDriver(String driver) {
        this.driver = driver;
    }
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    public String getUser() {
        return user;
    }
    public void setUser(String user) {
        this.user = user;
    }
    public String getPwd() {
        return pwd;
    }
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
    public String getUsingDB() {
        return usingDB;
    }
    public void setUsingDB(String usingDB) {
        this.usingDB = usingDB;
    }
    public String getSrcPath() {
        return srcPath;
    }
    public void setSrcPath(String srcPath) {
        this.srcPath = srcPath;
    }
    public String getPoPackage() {
        return poPackage;
    }
    public void setPoPackage(String poPackage) {
        this.poPackage = poPackage;
    }
    public Configuration(String driver, String url, String user, String pwd,
            String usingDB, String srcPath, String poPackage) {
        super();
        this.driver = driver;
        this.url = url;
        this.user = user;
        this.pwd = pwd;
        this.usingDB = usingDB;
        this.srcPath = srcPath;
        this.poPackage = poPackage;
    }
    public Configuration() {
        super();
    }


}

JavaFieldGetSet

package com.imust.sorm.bean;

/**
 * 封装了java属性和get,set方法的源代码
 * @author  Zachary (为上帝所心仪的人)
 * @date    2017年10月2日
 * @project zzfSORM
 * @package com.imust.sorm.bean
 */
public class JavaFieldGetSet {

    /**
     * 属性的源码信息  如 private int userId
     */
    private String fieldInfo;
    /**
     * get方法的源码信息 如 public int getUserId(){}
     */
    private String getInfo;

    /**
     * set方法的源码信息 如: public void setUserId(){}
     *  
     */
    private String setInfo;

    public String getFieldInfo() {
        return fieldInfo;
    }

    public void setFieldInfo(String fieldInfo) {
        this.fieldInfo = fieldInfo;
    }

    public String getGetInfo() {
        return getInfo;
    }

    public void setGetInfo(String getInfo) {
        this.getInfo = getInfo;
    }

    public String getSetInfo() {
        return setInfo;
    }

    public void setSetInfo(String setInfo) {
        this.setInfo = setInfo;
    }

    public JavaFieldGetSet(String fieldInfo, String getInfo, String setInfo) {
        super();
        this.fieldInfo = fieldInfo;
        this.getInfo = getInfo;
        this.setInfo = setInfo;
    }

    public JavaFieldGetSet() {
        super();
    }

    @Override
    public String toString() {
        System.out.println(fieldInfo);
        System.out.println(getInfo);
        return super.toString();
    }


}

TableInfo

package com.imust.sorm.bean;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 存储表结构的信息
 * @author  Zachary (为上帝所心仪的人)
 * @date    2017年10月2日
 * @project zzfSORM
 * @package com.imust.sorm.bean
 */
public class TableInfo {

    /**
     * 表名
     */
    private String tname;

    /**
     * 封装了所有字段的信息
     */
    private Map<String, ColumnInfo> columns;

    /**
     * 唯一主键(目前我们只能处理表中有且只有一个主键的情况)
     */
    private ColumnInfo onlyPriKey;

    //联合主键
    private List<ColumnInfo> priKeys;

    public String getTname() {
        return tname;
    }

    public void setTname(String tname) {
        this.tname = tname;
    }

    public Map<String, ColumnInfo> getColumns() {
        return columns;
    }

    public void setColumns(Map<String, ColumnInfo> columns) {
        this.columns = columns;
    }

    public ColumnInfo getOnlyPriKey() {
        return onlyPriKey;
    }

    public void setOnlyPriKey(ColumnInfo onlyPriKey) {
        this.onlyPriKey = onlyPriKey;
    }


    public List<ColumnInfo> getPriKeys() {
        return priKeys;
    }

    public void setPriKeys(List<ColumnInfo> priKeys) {
        this.priKeys = priKeys;
    }

    public TableInfo() {
        super();
    }

    public TableInfo(String tname, Map<String, ColumnInfo> columns,
            ColumnInfo onlyPriKey, List<ColumnInfo> priKeys) {
        super();
        this.tname = tname;
        this.columns = columns;
        this.onlyPriKey = onlyPriKey;
        this.priKeys = priKeys;
    }

    public TableInfo(String tname, ColumnInfo onlyPriKey,
            List<ColumnInfo> priKeys) {
        super();
        this.tname = tname;
        this.onlyPriKey = onlyPriKey;
        this.priKeys = priKeys;
    }

    public TableInfo(String tableName, ArrayList<ColumnInfo> arrayList,
            HashMap<String, ColumnInfo> hashMap) {
    }

}

DBManager

package com.imust.sorm.core;

import java.io.IOException;
import java.util.Properties;

import com.imust.sorm.bean.Configuration;

/**
 * 根据配置信息,维持链接对象的管理(增加连接功能)
 * @author  Zachary (为上帝所心仪的人)
 * @date    2017年10月2日
 * @project zzfSORM
 * @package com.imust.sorm.core
 */
public class DBManager {

    private static Configuration conf;

    static{
        Properties pros = new Properties();

        try {
            pros.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties"));
        } catch (IOException e) {
            e.printStackTrace();
        }
        conf = new Configuration();
        conf.setDriver(pros.getProperty("driver"));
        conf.setPoPackage(pros.getProperty("poPackage"));
        conf.setPwd(pros.getProperty("pwd"));
        conf.setSrcPath(pros.getProperty("srcPath"));
        conf.setUrl(pros.getProperty("url"));
        conf.setUser(pros.getProperty("user"));
        conf.setUsingDB(pros.getProperty("usingDB"));
    }

    public static Configuration getConf() {
        return conf;
    }

}

Query

package com.imust.sorm.core;

import java.util.List;

/**
 * 负责查询(对外提供服务的一个类)
 * @author  Zachary (为上帝所心仪的人)
 * @date    2017年10月2日
 * @project zzfSORM
 * @package com.imust.sorm.core
 */
@SuppressWarnings("all")
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 跟表对应的类的clazz
     * @param id
     * @return
     */
    public void delete(Class clazz,Object id);//delete from user where id = 2

    /**
     * 删除对象在数据库中对应的记录(对象所在的类对应到表,对象的主键值对应到记录)
     * @param obj
     */
    public void delete(Object obj);

    /**
     * 更新对象对应的记录,并且只更新指定的字段的值
     * @param obj  所要跟新的对象
     * @param fieldNames 更新的属性列表
     * @return
     */
    public int udpate(Object obj,String[] fieldNames);

    /**
     * 查询返回多行记录,并将每行记录封装到clazz指定的类对象中
     * @param sql 查询的语句
     * @param clazz 封装数据的javabean类的Class对象
     * @param params  sql的参数
     * @return 查询的结果
     */
    public List queryRows(String sql,Class clazz,Object[] params);

    /**
     * 查询返回一行记录,并将该记录封装到clazz指定的类对象中
     * @param sql 查询的语句
     * @param params  sql的参数
     * @return 查询的结果
     */
    public Object queryUniqueRows(String sql,Object[] params);

    /**
     * 查询返回一个值(一行一列),并将该值返回
     * @param sql 查询的语句
     * @param params  sql的参数
     * @return 查询的结果
     */
    public Object queryValue(String sql,Object[] params);

    /**
     * 查询返回一个数字(一行一列),并将该值返回
     * @param sql 查询的语句
     * @param params  sql的参数
     * @return 查询的结果
     */
    public Number queryNumber(String sql,Object[] params);




}

如需源码,请留下联系方式!如对你有帮助,请点个赞!!哈哈

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值