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类:封装常用反射操作
- 根据配置信息连接数据库
配置信息存放在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; } }