首页 > 其他 > 详细

实现简单ORM案例

时间:2019-04-06 15:12:02      阅读:161      评论:0      收藏:0      [点我收藏+]

ORM框架:

• 我们希望设计一个可以实现对象和SQL自动映射的框架,但是
整体用法和设计比Hibernate简单。砍掉不必要的功能。
• 会穿插使用设计模式
• 增加
– 将对象对应成sql语句,执行sql,插入数据库中
• 删除
– 根据对象主键的值,生成sql,执行,从库中删除
• 修改
– 根据对象需要修改属性的值,生成sql,执行• 查询
– 根据结果分类:
• 多行多列:List<Javabean>
• 一行多列:Javabean
• 一行一列:
– 普通对象:Object
– 数字:Number

• 核心架构:
Query接口:负责查询(对外提供服务的核心类)
QueryFactory类:负责根据配置信息创建query对象
TypeConvertor接口:负责类型转换
TableContext类:
• 负责获取管理数据库所有表结构和类结构的关系,并可以根据表结构生成类结构。
– DBManager类:
• 根据配置信息,维持连接对象的管理(增加连接池功能)
– 工具类:
• JDBCUtils封装常用JDBC操作
• JavaFileUtils封装java文件操作
StringUtils封装常用字符串操作
ReflectUtils封装常用反射操作

•架构图:

技术分享图片

 

• 核心bean,封装相关数据:

– ColumnInfo
– Configuration
– TableInfo
封装表中一个字段的信息(字段类型、字段名、键类型)
封装配置文件信息
封装一张表的信息
• 针对SORM框架的说明:
核心思想:使用简单、性能高、极易上手!
– 配置文件
• 目前使用资源文件、后期项目复杂后可以增加XML文件配置和注解。
– 类名由表名生成,只有首字母大写有区别,其他无区别
– Java对象的属性由表中字段生成,完全对应
– 目前,只支持表中只有一个主键,联合主键不支持

• 回调接口

public interface CallBack {
public Object doExecute(Connection conn,PreparedStatement ps,ResultSet rs);
}

• 模板方法

技术分享图片
public Object executeQueryTemplate(String sql,Object[] params,Class clazz,CallBack back){
Connection conn = DBManager.getConn();
PreparedStatement ps = null;
ResultSet rs = null;
try {
ps = conn.prepareStatement(sql);
//给sql设参
JDBCUtils.handleParams(ps, params);
System.out.println(ps);
rs = ps.executeQuery();
return back.doExecute(conn, ps, rs);
}
} catch (Exception e) {
e.printStackTrace();
return null;
}finally{
DBManager.close(ps, conn);
}• 调用示例
public Object queryValue(String sql,Object[] params){
return executeQueryTemplate(sql, params, null, new CallBack() {
@Override
public Object doExecute(Connection conn, PreparedStatement ps, ResultSet rs) {
Object value = null;
try {
while(rs.next()){
value = rs.getObject(1);
}
} catch (SQLException e) {
e.printStackTrace();
}
return value;
}
});
}
executeQueryTemplate

• 使用工厂模式统计管理Query的创建
• 使用克隆模式提高Query对象的创建效率

• 连接池(Connection Pool)
– 就是将Connection对象放入List中,反复重用!
– 连接池的初始化:
• 事先放入多个连接对象。
– 从连接池中取连接对象
• 如果池中有可用连接,则将池中最后一个返回。
同时,将该连接从池中remove,表示正在使用。
• 如果池中无可用连接,则创建一个新的。
– 关闭连接
• 不是真正关闭连接,而是将用完的连接放入池中。

技术分享图片

 


• 市面上的连接池产品:
– DBCP
– c3p0
– proxool

 

实现代码:

 

实现简单ORM案例

原文:https://www.cnblogs.com/biaogejiushibiao/p/10661745.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!