编写自定义JDBC框架
元数据- DataBaseMetaData
ResultSet getPrimaryKeys(String catalog, String schema, String table)
ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types)
为什么没有getDatabases()? ----
元数据- ParameterMetaData
getParameterCount()
获得指定参数的个数
getParameterType(int?param)
获得指定参数的sql类型
元数据- ResultSetMetaData
getColumnCount()
返回resultset对象的列数
getColumnName(int?column)
获得指定列的名称
?getColumnTypeName(int?column)
获得指定列的类型
定义框架中CUD方法
public static void executeUpdate(String sql, Object[] args)
throws SQLException {
Connection conn = JdbcUtil.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql); // sql中可能包含无数个?
for (int i = 0; i < args.length; i++) {
pstmt.setObject(i + 1, args[i]);
}
pstmt.executeUpdate();
JdbcUtil.close(pstmt, conn);
}
调用方法:
String sql = "delete from user where id = ?";
JdbcFramework.executeUpdate(sql, new Object[] { user.getId() });
** DBUtils、Spring JDBCTemplate、IBatis
元数据,就是指一些最基本的数据 (包括库、表、sql、结果集)
这些数据可以用来编写其它程序,或者框架
元数据练习:
怎样将Mysql进行导出备份 mysqldump
编写一个Java程序实现mysqldump效果!!!
查询的框架
public static List executeQuery(String sql, Object[] args,
ResultSetHandler resultSetHandler) throws SQLException {
Connection conn = JdbcUtil.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql); // sql中可能包含无数个?
for (int i = 0; i < args.length; i++) {
pstmt.setObject(i + 1, args[i]);
}
ResultSet rs = pstmt.executeQuery(); // 可能得到user、account 等不同结果集
List list = resultSetHandler.handler(rs);
JdbcUtil.close(pstmt, conn);
return list;
}
写框架的重点:把变化作为参数,不变放到框架里!
编写框架后:
页面 --- Servlet -- (业务层javabean) --- DAO模式 ---- 框架 ==== DB
1、利用反射将所有Handler写成一个,但是我的信息不够
2、如果这里面所有的Handler成为一个,那么就是一个完全的ORM框架
ORM: 对象关系映射,当你的框架是ORM时,完全可以通过对象操作数据库了
ORM框架又分为:完全的ORM和不完全的
如果在JdbcFramework框架上,你又编写了一层DAO 那么这个框架就是ORM的,但是不是完全ORM的
能看见数据库底层实现的就不是完全ORM ----- 完全ORM Hibernate
思考:如何将不同数据对象的Handler合并到一起?? --- 反射
问题:怎样保证数据库类型和Java对象中属性类型的转换!!!!!!!
补充:Hibernate是怎样实现ORM
Hibernate是通过配置实现的!!!!hbm文件
class ----- table
attr1 type ----- column1 type
attr2 type ----- column2 type