手写简单ORM框架

ORM(Object-Relational Mapping,对象关系映射),是将JAVA中的对象与数据库中的数据对应,基本思想是,类与数据库中的表结构相对应、类中属性与字段对应、表中记录与对象对应。

整体架构

核心类及接口

Query:负责查询,对外提供服务的核心类(增删改查操作)

QueryFactory类:负责根据配置信息创建query对象(若配置信息为queryClass=com.ustc.core.MySQLQuery,则创建MySqlQuery类的对象;queryClass=com.ustc.core.OracleQuery则创建OracleQuery类的对象)

TableContext类:负责获取管理数据库所有表结构和类结构的关系,并可以根据表结构生成类结构。

DBManager类:根据配置信息,维持连接对象的管理(获取配置信息、创建连接、关闭连接)

TypeConvertor接口:负责类型转换


核心bean(封装相关数据)

ColumnInfo类:封装表中一个字段信息(字段类型、字段名、键类型等)

Configuration类:封装配置文件信息

TableInfo类:封装一张表的信息

JavaFiledGetSet类:封装与表结构相对应的java类的属性、get及set方法的源码


工具类

JDBCUtils类:封装常用的JDBC操作

StringUtils类:封装常用字符串操作

JavaFileUtils:封装Java文件操作

ReflectUtils类:封装常用反射操作


  1. 根据配置信息连接数据库

配置信息存放在Configuration类的对象中,该对象在DBManager类中创建,DBManager主要用于获取配置信息,根据配置信息连接数据库以及关闭数据库。

1.1配置信息

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/sorm?useSSL=false
user=root
pwd=123456
usingDB=mysql
srcPath=C\:\\WorkSpace\\eclipse\\orm\\src
poPackage=com.ustc.test.po
queryClass=com.ustc.core.MySQLQuery

1.2配置信息管理类

package com.ustc.core;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

import com.ustc.bean.Configuration;

/**
 * 根据配置信息,维持连接对象的管理
 * @author GuoJun
 *
 */
public class DBManager {

	/**
	 * 连接信息
	 */
	private static Configuration conf;
	
	/**
	 * 将配置信息写入Configuration
	 */
	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"));
		conf.setQueryClass(pros.getProperty("queryClass"));
		
		//加载tableContext
		System.out.println(TableContext.class);
		
	}
	
	/**
	 * 创建连接对象
	 * @return
	 */
	public static Connection creatConn() {
		try {
			Class.forName(conf.getDriver());
			return DriverManager.getConnection(conf.getUrl(), //直接建立连接,后期增加连接池处理,提高效率
					conf.getUser(),conf.getPwd());
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
		
	}
	
	/**
	 * 关闭连接
	 * @param con 要关闭的连接
	 * @param ps 
	 * @param rs
	 */
	public static void close(Connection con, PreparedStatement ps, ResultSet rs) {
		try {
			con.close();
		} catch (SQLException e1) {
			e1.printStackTrace();
		}
		try {
			if(ps != null)
				ps.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		try {
			if(rs != null)
				rs.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 关闭连接
	 * @param con
	 * @param ps
	 */
	public static void close(Connection con, PreparedStatement ps) {
		try {
			con.close();
		} catch (SQLException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		try {
			if(ps != null)
				ps.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
	}
	
	/**
	 * 获取配置信息
	 * @return
	 */
	public static Configuration getConfiguration() {
		return conf;
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值