`
我就是linux报错来下载包的
  • 浏览: 1437 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

自己写DButils框架

 
阅读更多
这段时间在大肆复习java,上班也是测试,由于刚来外包不熟悉也没人带,在每天坐在那里看SpringMVC已经快到源码了,自知不是班科出生但是却不乏对计算机的狂热,就像以前对LOL的狂热般,也是每晚深夜奋战在不知道有没有结果的学习上了,最近看了一个叫方立勋的javaweb来着,感觉学到了蛮多的,虽然是2010年的视频感觉还是有不少东西在里面的,每天在公交车也不会忘记看看那些架构师的修炼笔记什么的.本人常出没于各大开源学习网站,什么叫开源,没错在我等屌丝的世界里免费==开源.哈哈,当然也会有时脑一热就去github上面fork下别人的开源框架什么的来看看,自知现在的能力并不能研究下去,不过我不会放弃对源码的啃食的.

         废话不多说,先看下我今天复习到了什么:

1.看了一天的thinking in java总算是把以前一直区分不了的static final和final给区分,当然static这不是光看下thinking in java就能了解的了,所以我还是会慢慢来研究一番JVM的.但是从一些字面我们知道static修饰的成员这是属于我们类本身的,不关对象半毛钱事哈,在加载我们的类的时候就已经是将我们的static修饰的成员给加载了,而且只加载一次,所以不能你new多少对象,static修饰的成员我们永远只有一份,好像跑题了,还是聊回咱今天学习的final吧.根据thinking in java记载final有三种修饰位置,修饰数据,修饰方法,修饰类.

1)这里的数据主要是成员变量以及我们方法中的入参,而这些数据我们又可以细分其类型有主类型和对象类型的,修饰主类型时代表这个主类型一旦被初始化就不能再变了,修饰对象的话,就表示我们这个句柄(引用)就没法再指向其他的对象了,但是对象本身还是可以被改变的,数组也是特殊的对象.入参也是这么区分的,所以同理得证哈.

2).修饰方法,表示我们的方法作者不想后来的使用者修改这个方法,当然按照书中所写在方法体内容不是特别多的时候用final可以提高性能哟.

3).修饰类,表示在该类的所有方法都已经加上了final了,所以同理了,final修饰的类是不可以被继承了,但是其自身还是可以集成其他类的,比如我们的String.

注意:我们private修饰的方法其实就相当于加上了final了呢.final在一些地方可以改善性能,但是这对于我们的扩展绝逼不是建利好消息,所以慎用final.

还有要补充的一点final和static final的一些小区别,一般final修饰的数据可以先声明后通过构造器等初始化,但是static fianl修饰的数据必须是声明同时初始化啊,这里初始化并不代表我们的数据就一定要大写,大写默认是常量,也就是在编译前就已经知道值了,但是像Math,random()给我们的static final修饰的数据赋值时是在编译后才能知道其值的.


后记:

回家后翻来方立勋的视频看看模拟的写了大概半个DButils的框架吧,先睹为快.只是为了记笔记,学习学习哈.老鸟飞过.上代码:
实体类

package com.imooc.domain;

public class Account {
	private int id;
	private String name;
	private float money;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public float getMoney() {
		return money;
	}
	public void setMoney(float money) {
		this.money = money;
	}
	
}

半个框架
package com.imooc;
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;

import com.mchange.v2.c3p0.ComboPooledDataSource;
/**
 * 使用DBCP数据源获取数据库连接
 * @author pic
 *
 */
public class JdbcUtils_C3P0 {
	private static Connection conn=null;
	private static ComboPooledDataSource combo = null;
	static{
		try{
			combo=new ComboPooledDataSource();
			
		}catch(Exception e){
			e.printStackTrace();
			throw new ExceptionInInitializerError("稍后重试!!");
		}
	}
	
	public static Connection getConnection() throws SQLException {
		
		return combo.getConnection();
	}
	
	public static void main(String[] args) throws SQLException  {
		Connection conn = JdbcUtils_C3P0.getConnection();
		System.out.println(conn);
	}
	
	//2.关闭连接等一些资源
	public static void release(Connection conn,Statement st,ResultSet rs) {
		if(rs!=null){
			try {
				rs.close();
			} catch (SQLException e) {
				if(rs!=null){
					rs=null;
				}
				e.printStackTrace();
			}
		}
		if(st!=null){
			try {
				st.close();
			} catch (SQLException e) {
				if(st!=null){
					st=null;
				}
				e.printStackTrace();
			}
		}
		if(conn!=null){
			try {
				conn.close();
			} catch (SQLException e) {
				if(conn!=null){
					conn=null;
				}
				e.printStackTrace();
			}
		}
	}
	public static void update(String sql,Object[] params){
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			conn = JdbcUtils_C3P0.getConnection();
			ps = conn.prepareStatement(sql);
			for(int i=0;i<params.length;i++){
				ps.setObject(i+1, params[i]);
			}
			ps.executeUpdate();
		} catch (Exception e) {
			throw new RuntimeException(e);
		}finally{
			JdbcUtils_C3P0.release(conn, ps, rs);
		}
	}
	
	/**
	 * 我们可以自己实现提供这个handler的接口,只需要外界提供Class就好了
	 * @param sql:需要发送给数据库的sql语句
	 * @param params:占位符的参数
	 * @param handler 提供外界提供返回结果的类型的处理接口
	 * @return
	 */
	public static Object query(String sql,Object[] params,ResultSerHandler handler){
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			conn = JdbcUtils_C3P0.getConnection();
			ps = conn.prepareStatement(sql);
			for(int i=0;i<params.length;i++){
				ps.setObject(i+1, params[i]);
			}
			rs=ps.executeQuery();
			Object bean = handler.handler(rs);
			return bean;
		} catch (Exception e) {
			throw new RuntimeException(e);
		}finally{
			JdbcUtils_C3P0.release(conn, ps, rs);
		}
	}
}

interface ResultSerHandler{
	public Object handler(ResultSet rs);
}
class BeanHandler implements ResultSerHandler{
	private Class clazz;
	public BeanHandler(Class clazz){
		this.clazz=clazz;
	}
	@Override
	public Object handler(ResultSet rs) {
		try {
			//如果没数据直接返回空
			if(!rs.next()){
				return null;
			}
			//创建封装结果的bean
			Object bean = clazz.newInstance();
			ResultSetMetaData meta = rs.getMetaData();
			int count = meta.getColumnCount();
			for(int i=0;i<count;i++){
				String name = meta.getColumnName(i+1);
				Object value = rs.getObject(name);
				//反射得到列明对应的属性
				Field field = clazz.getDeclaredField(name);
				//暴力打开访问权限
				field.setAccessible(true);
				//将列明对象的结果整到bean中返回即可
				field.set(bean, value);
			}
			return bean;
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
		
	}
	
}


测试类:
package com.imooc;

import org.junit.Test;

import com.imooc.domain.Account;

public class TestUtils {
	
	@Test
	public void testAdd(){
		Account a = new Account();
		a.setName("ggg");
		a.setMoney(40000);
		add(a);
	}
	
	@Test
	public void testFindById(){
		Account account = findById(1);
		System.out.println(account.getId());
		System.out.println(account.getName());
		System.out.println(account.getMoney());
	}
	
	public void add(Account a){
		String sql = "insert into account(name,money) values(?,?)";
		Object[] params = {a.getName(),a.getMoney()};
		JdbcUtils_C3P0.update(sql, params);
	}
	
	public Account findById(int id){
		String sql = "select * from account where id=?";
		Object[] params = {id};
		Account account = (Account) JdbcUtils_C3P0.query(sql, params, new BeanHandler(Account.class));
		return account;
	}
}

打算复习完就换工作,学不到东西果断撤退,对于跳槽也是IT界的必争呀!!!
分享到:
评论

相关推荐

    dbutils框架

    **dbutils框架详解** Apache DBUtils(Database Utilities)是一个基于Java的开源数据库操作框架,它由Apache软件基金会提供,旨在简化数据库操作,提高开发效率。DBUtils的核心理念是通过提供一组实用工具类来减少...

    DBUtils框架ResultSetHandler接口使用

    DBUtils 框架 ResultSetHandler 接口使用 DBUtils 框架的 ResultSetHandler 接口是一种非常重要的接口,它用于处理 java.sql.ResultSet,将数据按要求转换为另一种形式。该接口提供了一个单独的方法:Object handle...

    DBUtils框架jar包

    DBUtils框架是一个基于Java的数据库操作工具包,它由Apache软件基金会开发并维护。这个框架的设计目的是为了简化Java程序员在处理数据库操作时的工作,尤其是在执行SQL语句、管理数据库连接和处理结果集等方面。...

    自己动手模仿Hibernate写数据库框架

    【标题】"自己动手模仿Hibernate写数据库框架"揭示了本次讨论的核心内容——尝试构建一个类似于Hibernate的数据库操作框架。Hibernate是一个流行的Java ORM(对象关系映射)框架,它简化了数据库与Java对象之间的...

    DBUtils开源框架模板

    DBUtils开源框架模板 框架模板 和jar包 配置文件已经写好 可以直接调用

    apache dbutils 框架

    Apache DBUtils是一个轻量级的Java数据库连接工具框架,它为开发者提供了简洁、高效且可靠的数据库操作API。DBUtils的主要目标是简化Java应用程序中的数据库访问,通过减少代码量和异常处理,让开发者能够更加专注于...

    Apache Dbutils +springmvc 框架demo代码

    commons-dbutils是Apache组织提供的一个开源JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。 springmvc与springmvc 整合demo

    dbutils

    `dbutils` 是一个开源的Java库,主要设计用于简化数据库操作,它不是数据访问对象(DAO)框架,也不是像Hibernate那样的对象关系映射(ORM)工具。`dbutils` 提供了一些实用功能,使得在Java程序中进行数据库交互变...

    commons-dbutils.jar.rar

    它的简单性和鲁棒性使其成为中小规模项目中的理想选择,特别是对于那些不想使用完整ORM框架(如Hibernate或MyBatis)的开发者。 6. **集成与使用** 要在项目中使用DBUtils,首先需要将对应的jar包添加到项目的类...

    Apache Dbutils JDBC 框架demo代码

    commons-dbutils是Apache组织提供的一个开源JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。因此dbutils成为很多不喜欢hibernate的公司...

    commons-dbutils-1.7

    在实际项目中,开发者可以结合Spring框架或其他ORM工具(如Hibernate或MyBatis)一起使用DbUtils,以实现更加灵活和强大的数据库操作。总的来说,Apache Commons DbUtils是Java开发中一个非常实用的工具,它通过简化...

    dbutils api

    它通常与Apache Spark等大数据框架结合使用,为开发人员提供了一系列实用的API,以简化数据操作、文件管理和任务调度。本篇文章将深入探讨`dbutils` API的核心概念、主要功能以及使用方法。 ### 1. 核心概念 - **...

    DbUtils-1.7.zip

    - 源代码可以帮助开发者扩展DbUtils,或者根据需求定制自己的数据库访问工具。 5. **应用场景**: - 快速开发小型应用,不需大型ORM框架。 - 教学示例,展示如何简化JDBC操作。 - 数据库脚本执行,如批量插入、...

    apache dbutils中文说明

    Apache DBUtils是一个开源的Java库,它为Java程序员提供了便捷的方式来处理JDBC(Java Database Connectivity)...通过利用DBUtils,Java开发者可以在不引入重量级ORM框架的情况下,更高效、安全地与数据库进行交互。

    commons-dbutils-1.6

    它不是ORM框架,如Hibernate或MyBatis,但作为轻量级的工具库,它在处理简单的数据访问任务时表现出色,特别是在那些不希望引入复杂ORM层的项目中。通过结合使用DBUtils和其他Apache Commons库,如Commons DBCP...

    commons-dbutils-1.5

    不过,需要注意的是,尽管DBUtils在很多方面简化了工作,但它并不适合所有情况,尤其是那些需要复杂SQL查询和事务逻辑的应用,可能需要更强大的ORM框架,如Hibernate或MyBatis。 总的来说,"commons-dbutils-1.5"是...

    开发类库DButils

    4. **异常处理**:DButils 将 JDBC 的检查异常(如 `SQLException`)封装为自己的运行时异常,比如 `DbUtils.DbException`。这使得异常处理更简洁,因为不需要捕获并处理多个不同的 SQL 异常。 5. **连接池支持**:...

    dbutils-1.6

    **dbutils-1.6** 是一个用于Java编程的实用工具库,主要目的是简化数据库连接和数据操作。...尽管现在有更多高级的ORM框架(如MyBatis、Hibernate),但在某些场景下,DBUtils仍然是一个高效且可靠的解决方案。

    commons-dbutils-1.3

    然而,随着Java技术和框架的发展,现代的解决方案,如Spring JDBC或MyBatis,提供了更强大和灵活的数据库操作功能。尽管如此,DBUtils的基本理念和设计模式对理解数据库编程和事务管理仍具有教育意义。

    dbutils工具包和源文件

    **dbutils工具包详解** ...虽然它没有ORM框架那样全面的功能,但对于小型项目和简单数据库操作,`dbutils` 显得高效且实用。在实际开发中,根据项目需求和团队习惯选择合适的数据库操作工具是非常重要的。

Global site tag (gtag.js) - Google Analytics