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

技术
©2019-2020 Toolsou All rights reserved,
非父子组件之间的三种传值办法SSM项目的excel文件上传并添加到数据库用PyMC3进行贝叶斯统计分析(代码+实例)latex中自定义的命令———\newcommandGo语言 数组初始化和基本操作shiro-oauth 启用第三方认证登录python原语--锁Lock(精华)2020年6月26日 C#类库model PageInputRedis 计数器 高并发的应用迷宫的最短路径之BFS算法(python实现)