package org.apache.ibatis.metadata;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.SQLException;
public class DatabaseFactory {
private DatabaseFactory() {
}
public static Database newDatabase(Connection conn, String catalogFilter, String schemaFilter) throws SQLException {
Database database = new Database(catalogFilter, schemaFilter);
ResultSet rs = null;
try {
DatabaseMetaData dbmd = conn.getMetaData();
try {
rs = dbmd.getColumns(catalogFilter, schemaFilter, null, null);
while (rs.next()) {
String catalogName = rs.getString("TABLE_CAT");
String schemaName = rs.getString("TABLE_SCHEM");
String tableName = rs.getString("TABLE_NAME");
String columnName = rs.getString("COLUMN_NAME");
int dataType = Integer.parseInt(rs.getString("DATA_TYPE"));
Table table = database.getTable(tableName);
if (table == null) {
table = new Table(tableName);
table.setCatalog(catalogName);
table.setSchema(schemaName);
database.addTable(table);
}
table.addColumn(new Column(columnName, dataType));
}
} finally {
if (rs != null) rs.close();
}
try {
String[] tableNames = database.getTableNames();
for (int i = 0; i < tableNames.length; i++) {
Table table = database.getTable(tableNames[i]);
rs = dbmd.getPrimaryKeys(catalogFilter, schemaFilter, table.getName());
if (rs.next()) {
String columnName = rs.getString("COLUMN_NAME");
table.setPrimaryKey(table.getColumn(columnName));
}
}
} finally {
if (rs != null) rs.close();
}
} finally {
try {
conn.rollback();
} catch (Exception e) { /*ignore*/ }
}
return database;
}
}
相关推荐
MyBatis源码分析 MyBatis是一款流行的Java持久层框架,提供了强大的数据库访问能力,本文将对MyBatis的源码进行深入分析,从而帮助读者更好地理解MyBatis的工作机理。 1. MyBatis入门 MyBatis是一款基于Java的...
MyBatis的设计模式也是其强大之处,例如工厂模式用于创建SqlSession,代理模式用于实现动态SQL,单例模式用于管理Configuration对象,责任链模式用于执行SQL等。理解这些设计模式可以帮助我们更好地理解MyBatis的...
### MyBatis源码解析——由阿里巴巴P7架构师纯手工打造 #### 一、前言 在现代软件开发过程中,持久层框架如MyBatis因其简单易用、灵活高效的特点而受到广泛欢迎。作为一款优秀的Java持久层框架,MyBatis通过SQL...
本资源“mybatis源码分析视频”是针对MyBatis框架进行深入剖析的教程,通过视频和文档的形式帮助学习者理解其内部工作机制。 1. **MyBatis简介** MyBatis消除了几乎所有的JDBC代码和手动设置参数以及获取结果集。...
《MyBatis源码详解学习》是一份专为对MyBatis源码感兴趣的开发者准备的资料,它旨在帮助读者深入理解这个流行持久层框架的工作原理。MyBatis作为一个轻量级的ORM(对象关系映射)框架,因其简单易用、高度可定制化的...
通过学习这些源码,你可以深入理解SpringBoot如何启动、如何配置自动装配,以及MyBatis如何与数据库交互。同时,Shiro的使用也能帮助你掌握用户权限的控制。对于初学者,这是一个很好的实践平台,对于有经验的开发者...
阅读mybatis源码所记笔记。 基本: 1.数据源获取 2.mapper的sql语句获取 3.怎么去获得到的resultSet 重点: 1.orm是什么:体现于resultSet的数据库类型和java类型的转换 2.mybatis的一级缓存原理(简单的ifelse判断...
mybatis核心源码mybatis核心源码mybatis核心源码mybatis核心源码mybatis核心源码mybatis核心源码mybatis核心源码mybatis核心源码mybatis核心源码mybatis核心源码mybatis核心源码mybatis核心源码mybatis核心源码...
MyBatis的源码分析对于理解其工作原理、优化数据库交互以及进行二次开发至关重要。通过思维导图的方式,我们可以更直观、系统地理解MyBatis的架构和流程。 首先,MyBatis的核心概念包括SqlSessionFactory、...
在深入阅读MyBatis源码时,我们可以了解其实现原理,学习到如何优雅地处理数据库操作,包括SQL的构建、参数绑定、结果映射等。这对于提升我们的Java编程能力和理解数据库操作有很大的帮助。同时,MyBatis源码中涉及...
源码分析是理解框架工作原理的重要途径,通过阅读MyBatis的源码,我们可以深入学习其内部机制,包括SQL动态生成、结果映射、事务管理等方面。 1. SQL动态生成:MyBatis的核心之一是SQL动态语句。在XML配置文件或...
MyBatis源码解析
在深入学习Mybatis源码的过程中,我们可以了解到它的工作原理,更好地优化数据库交互,提高程序性能。 1. **Mybatis概述** Mybatis 源码的学习可以帮助开发者理解其内部机制,包括动态SQL的解析、SQL映射文件与...
Spring整合Mybatis源码解析
mybatis源码阅读 配置 配置都在配置类 映射代理 映射器代理 3.3.1版本后ExecutorType为简单,重复使用批量插入可以正确返回生成主键 密钥生成器 useGeneratedKeys为true使用Jdbc3KeyGenerator selectKey节点使用...
MyBatis 源码解析:通过源码深入理解 SQL 的执行过程 抓下来打包成了HTML文件, 方便离线观看
MyBatis的源码主要由SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession和Mapper接口等核心组件构成。SqlSessionFactoryBuilder用于创建SqlSessionFactory,它是MyBatis的核心工厂类。SqlSessionFactory则...
MyBatis是一个流行的Java持久...通过深入阅读MyBatis的中文文档和研究源代码,开发者不仅可以掌握MyBatis的基本用法,还能了解到其设计理念和内部实现,从而更好地利用这个强大的框架来构建高效、可维护的数据库应用。
《MyBatis源码分析与实战应用》 在IT行业中,MyBatis作为一个轻量级的持久层框架,因其灵活性和高效性而被广泛应用。它将SQL语句与Java代码相结合,提供了比传统JDBC更方便的数据操作方式。本文将深入探讨MyBatis的...