`
lyjilu
  • 浏览: 174562 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

关于对JDBC操作偷懒的思考

阅读更多

可能都想过封装jdbc达到简化开发代码、提高开发效率,于是我也想弄这么一个框架,天马行空的思考开始了,

主要针对简单而常用的的CRUD操作。

 

  1. 首先,我想简化的是开发者输入一sql我就能封装好查询结果,返回给开发者,也类似于开发者如下调用

 

 

/**
	 * @author:lyjilu
	 * @throws Exception
	 */
	public List<Row> findAll() throws Exception {
		return super.findAll("select * from pop_dep");
	}
 

 

就能取得查询的结果,Row表示每一行,具体查询代码块如下:

 

/**
	 * @author:lyjilu
	 * @param conn 数据库连接 @param sql 要查询的sql
	 * @throws Exception
	 */
	public static List<Row> find(Connection conn, String sql) {
		long t1 = System.currentTimeMillis();
		ResultSet rs = null;
		PreparedStatement ps = null;
		List<Row> list = null;
		try {
			ps = conn.prepareStatement(sql);
			rs = ps.executeQuery();
			ResultSetMetaData rsmd = rs.getMetaData();
			int numberOfColumns = rsmd.getColumnCount();
			Map<String, ColumnMeta> map = new HashMap<String, ColumnMeta>();
			for (int i = 0; i < numberOfColumns; i++) {
				ColumnMeta columnMata = new ColumnMeta(
						rsmd.getColumnLabel(i + 1), 0,
						rsmd.getColumnType(i + 1),
						rsmd.getColumnTypeName(i + 1));
				map.put(rsmd.getColumnLabel(i + 1), columnMata);
			}
			String label = null;
			int type = 0;
			list = new ArrayList<Row>();
			while (rs.next()) {
				Row row = new Row();
				for (int i = 0; i < numberOfColumns; i++) {
					label = rsmd.getColumnLabel(i + 1);
					type = rsmd.getColumnType(i + 1);
					Object obj = DaoUtil.getObjectByName(rs, label, type);
					row.put(label, obj);
				}
				row.setColumnMetaMap(map);
				list.add(row);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			DaoUtil.closeDao(rs, ps, conn);
		}
		long t2 = System.currentTimeMillis();
		System.out.println(t2 - t1);
		return list;

	}

 

 其中几个类:ColumnMeta 是简单的类似于ResultSetMetaData 类,

而Row是一个组合了HashMap的类,getObjectByName方法则是通过不同类型取得值的方法

看似查询方法这样封装就已经差不多了,由于本文主要是思考,所以具体代码就简化了。那么下面就想怎么添加和修改呢

 

 

2.添加或修改

 

由于不能确定用户输入的值插入到哪表,

 

第一考虑是用户输入表名,查询一次表,就能取得表的字段及字段类型等信息,然后设置进去,进行添加操作,由于这样会每次添加会查询一次数据库,并且,还得让开发者指定要插入的表,不够合理,抛弃

 

第二考虑是用户定义实体类,和数据库一一对应,用户传递过来的就是要保存的实体,那么就可以进行保存操作,可考虑到这里的时候,又不得不考虑几个问题,

1>用户传递过来的实体名,字段名,是不是和表中的一致,不一致会有问题,

2>设置值的时候,如果实体中是String,那么就必须用PreparedStatement.setString()等,综上,那么就必须要求开发者的实体名,字段,必须和数据库一一对应,并且字段类型也必须设置正确等,如果稍不留神,就将出错。

 

第三考虑是在第二考虑基础上,增加配置,即,实体对应数据中的哪表,字段对应什么类型等等。最后保存的时候查询配置文件中的定义,就能较好的完成添加或修改操作,但是这样就增加了开发者配置实体和数据库对应关系的工作量。,说到这里,是不是觉得挺熟悉,这不就是简化版的Hibernate吗?

 

如果真的实现成第三考虑方案那样,那就会考虑到与数据库无关性,可能就是这样,HQL产生了吧,然后考虑到表间关系的复杂性,简化用户手动关联查询,于是在实体里面,就把外键关联的实体用Set(一对多是是Set<多的一方实体>)或另外的实体关联起来,于是就形成了查询一次全部查出吧,但是由于性能问题,就出现了LAZY  懒加载用以在不使用的情况下不查询出关联数据,以提高性能。

 

最后没去实现了添加修改,毕竟那基本就是Hibernate

 

为了防盗,注上本文地址原始地址:http://lyjilu.iteye.com/blog/1162171

 

0
0
分享到:
评论

相关推荐

    jdbc 操作oracle blob数据

    jdbc 操作oracle blob数据jdbc 操作oracle blob数据jdbc 操作oracle blob数据jdbc 操作oracle blob数据jdbc 操作oracle blob数据jdbc 操作oracle blob数据jdbc 操作oracle blob数据jdbc 操作oracle blob数据jdbc ...

    jdbc操作步骤

    jdbc操作步骤jdbc操作步骤jdbc操作步骤jdbc操作步骤jdbc操作步骤jdbc操作步骤jdbc操作步骤

    使用JDBC操作数据库

    在Java编程领域,JDBC(Java Database Connectivity)是连接Java应用程序和各种数据库的...通过阅读“使用JDBC操作数据库下载资料”,你可以找到更多关于JDBC实战操作的示例和详细教程,进一步提升你的数据库操作技能。

    Java jdbc操作mysql

    在Java中使用JDBC与MySQL进行交互,可以让开发者用Java代码实现对数据库的增删查改操作。 首先,使用JDBC操作MySQL需要以下步骤: 1. **引入JDBC驱动**:在Java项目中,你需要包含MySQL的JDBC驱动库(如mysql-...

    实验3 JDBC操作数据库3

    实验3 JDBC操作数据库3主要目的是通过Java的JDBC技术来熟悉和掌握数据库的连接与操作。这个实验涉及了以下几个核心知识点: ...通过这个实验,你不仅可以巩固对JDBC的理解,还能提高数据库操作的实际技能。

    JDBC操作步骤及数据库连接操作

    JDBC编程操作:JDBC操作步骤及数据库连接操作,本资源来自于魔乐李兴华老师,感谢共享,如有侵犯版权,请联系本人,定删除。

    使用jdbc操作sqlserver数据库

    使用jdbc操作sqlserver数据库

    传智播客JDBC_完成对数据库的CRUD操作.rar

    本教程“传智播客JDBC_完成对数据库的CRUD操作”主要涵盖了如何利用JDBC进行数据库的基本操作,包括创建(Create)、读取(Read)、更新(Update)和删除(Delete)数据。 一、创建(Create) 创建数据通常涉及到...

    JDBC操作 简单封装

    JDBC提供了一套API,使得开发人员能够编写数据库独立的代码,实现对数据库的增删改查等操作。然而,原始的JDBC API使用起来较为繁琐,包括加载驱动、建立连接、创建Statement或PreparedStatement对象、执行SQL语句、...

    作业6 JSP JDBC操作数据库

    作业6 JDBC操作数据库 作业类型:验证性实验 实验目的:理解JDBC接口操作数据库的方法,熟练掌握数据的增删改查。 实验内容: 1. 在MySQL或其他DBS中创建一个数据库TestDB,其中创建表user,表至少3个字段(编号,...

    非常有用的jdbc的操作数据库

    在Java世界里,JDBC是连接各种数据库的标准,无论你是使用MySQL、Oracle还是SQL Server,都可以通过JDBC进行操作。 **一、JDBC基本操作流程** 1. **加载驱动**:使用`Class.forName()`方法加载数据库驱动,例如`...

    spring对jdbc的支持jar包

    总的来说,Spring对JDBC的支持使得数据库操作更加高效、安全且易于维护。它提供了丰富的API和抽象,帮助开发者避免了繁琐的JDBC代码,使他们能更专注于业务逻辑的实现。在Spring 4.0版本中,这些功能得到了进一步...

    spring中jdbc的操作

    在Java世界里,Spring框架是应用最广泛的轻量级开源框架之一,它为开发者提供了许多便利,包括数据库操作。在本资源中,我们主要探讨的是...如果你对Spring JDBC感兴趣,这个资源中的代码会是一个很好的学习起点。

    JDBC操作技术 PDF

    **JDBC操作技术详解** Java Database Connectivity (JDBC) 是Java平台中用于与关系型数据库交互的一组标准API。它是Java编程语言的核心组件之一,允许Java开发者执行SQL语句并处理来自数据库的结果。JDBC提供了统一...

    JDBC操作数据库辅助类

    JDBC操作数据库辅助类通常是为了简化数据库操作,提高代码的可读性和可维护性而设计的。这些辅助类包括资源类、会话类和工厂类,它们各自承担着不同的职责。 1. 资源类(JdbcResourceManager) 资源类主要用于管理...

    jdbc操作Mysql数据库demo

    **JDBC操作MySQL数据库基础教程** 在Java编程中,JDBC(Java Database Connectivity)是用于与各种数据库进行交互的一套标准API。它允许Java应用程序连接并执行SQL语句,实现数据的CRUD(Create、Read、Update、...

    JDBC操作(ppt)

    **JDBC操作详解** Java Database Connectivity (JDBC) 是Java平台中用于与各种数据库进行交互的一组接口和类。这个经典PPT详细介绍了JDBC的核心概念、使用步骤以及最佳实践,帮助开发者更好地理解和运用JDBC。 1. ...

    第15天对jdbc的认识和了解jdbc如何操作数据库

    第15天对jdbc的认识和了解jdbc如何操作数据库

    jdbc操作数据库demon

    jdbc操作数据库demon,包括增删改的封装,查询以集合返回,以jsonArray返回等,相关博文地址:http://blog.csdn.net/sapce_fish/article/details/52764678

    Java用JDBC实现对Oracle数据库操作

    标题“Java用JDBC实现对Oracle数据库操作”主要涉及Java编程语言如何利用Java Database Connectivity (JDBC) API来与Oracle数据库进行交互。JDBC是Java中用于与各种数据库通信的标准接口,而Oracle数据库是一个广泛...

Global site tag (gtag.js) - Google Analytics