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

来源:互联网 发布:mac 图标不放大 编辑:程序博客网 时间:2024/06/08 10:59

一:

这里写图片描述

二:

这里写图片描述

这里写图片描述

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

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

这里写图片描述

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);}

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

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 新中付没有到账怎么办 qq把钱转错了怎么办 转账输错号码怎么办 给别人转错钱了怎么办 转账到信用卡了怎么办 银行卡限额怎么办京东 预留信息忘了怎么办 中信银行香港卡怎么办 无银行预留信息怎么办 农工商超市红利卡怎么办 余额宝转入不了怎么办 公司车辆怎么办营运证 便利店转不出去怎么办 便利店开业营业额低怎么办 现在etc超时了怎么办? 中国银行e贷逾期怎么办 招商银行e分期逾期怎么办 保单贷款还不了怎么办 离婚时按揭房怎么办 按揭房子不要了怎么办? 征信有问题怎么办房贷 夫妻一方不做房贷共还人怎么办 给你花逾期一年怎么办 文件夹密码忘记了怎么办 网址被qq拦截怎么办 手机qq邮箱中毒怎么办 邮箱附件带病毒怎么办? 打开了病毒附件怎么办? qq邮箱被拦截怎么办 邮件地址已被注册怎么办 信用卡欠款怎么办房贷 贷款还不起了怎么办 装修贷款无抵押怎么办 黑户买房做贷款怎么办 易分期无法还款怎么办 工行晚还款一天怎么办 手机银行网页打不开怎么办 顺丰分拣错误怎么办 超市生意越来越差怎么办 收到逾期催收函怎么办 手机贷逾期了怎么办