理解dbutils对jdbc的封装

来源:互联网 发布:举几个截面数据的例子 编辑:程序博客网 时间:2024/06/12 18:41

        我们知道jdbc是一种使用java代码发送sql语句的技术,虽然近些年来,随着像hibernate,mybatis等优秀方便程序员开发的ORM框架的出现,jdbc技术逐渐淡出人们的视野,但是由于jdbc能给予最高能动性于程序员,能够发挥最高的性能等特点,一些需要定制优化性能的场景常常需要jdbc,毕竟ORM框架是面对对象的,性能,定制性不如jdbc。jdbc虽好,但由于很底层,发送sql语句进行操作数据时很是繁琐,例如如果要查询数据,必须要将查询在Resultset的字段数据逐一遍历,再封装到类对象中。这时候,dbutils的出现就是要减轻这种繁琐,而又保留了jdbc高性能的特点。下面是结合jdbc核心API谈谈dbutils的实现,帮助大家更好地理解jdbc和dbutils

        下面是jdbc能够向数据库发送sql语句的步骤:

1:注册驱动,并连接上数据库

Driver driver = new com.mysql.jdbc.Driver();

DriverManager.registerDriver(driver);

2.连接到具体的数据库

private String url = "jdbc:mysql://localhost:3306/day17";  // jdbc协议:数据库子协议:主机:端口/连接的数据库

private String user = "root";//用户名

private String password = "root";//密码

Connection conn = DriverManager.getConnection(urluserpassword);

3.查询数据

Statement stmt = conn.createStatement();

//准备sql

String sql = "SELECT * FROM student";

//执行sql

ResultSet rs = stmt.executeQuery(sql);

//遍历结果

while(rs.next()){

int id = rs.getInt("id");

String name = rs.getString("name");

String gender = rs.getString("gender");

System.out.println(id+","+name+","+gender);

}

4.关闭连接

 

if(stmt!=null)

try {

stmt.close();

} catch (SQLException e) {

e.printStackTrace();

throw new RuntimeException(e);

}

if(conn!=null)

try {

conn.close();

} catch (SQLException e) {

e.printStackTrace();

throw new RuntimeException(e);

}


          我们可以看到,jdbc整个过程还是挺繁琐的,下面我们看看dbutils的使用(结合c3p0 jdbc连接池)

1.加载src目录下的c3p0-config.xml文件(此过程和jdbc建立和数据库的连接过程相类似,不过这种加载xml的方式更加灵活,方便)

    c3p0-config.xml 内容

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/project</property>
<property name="user">root</property>
<property name="password">root</property>
<property name="initialPoolSize">5</property>
<property name="maxPoolSize">5</property>
<property name="minPoolSize">1</property>
<property name="acquireIncrement">2</property>
</default-config>
</c3p0-config>

      加载内容(默认加载src目录下的c3p0-config.xml文件)

             private static ComboPooledDataSource dataSource = new ComboPooledDataSource();
/**
* 获取数据源 
* @return 数据源
*/
public static ComboPooledDataSource getDataSource() {
return dataSource;
}

2.利用数据源进行查询数据(Course)

try {
QueryRunner queryRunner=new QueryRunner(JdbcUtil.getDataSource());
String sql="select * from course where cID=?";
Course course = queryRunner.query(sql,new BeanHandler<Course>(Course.class),cID);
return course;
} catch (SQLException e) {
e.printStackTrace();
}
return null;

}


    好了,jdbc和dbutils两个查询例子相类似,明显dbutils的更简洁,更加面向对象。那我们现在主要分析dbutils例子中每一步的作用,首先是加载配置文件,在这一步,是c3p0连接池的API起到了加载的作用,这样就建立起和数据库的连接了,里面的参数大家看上去也一目了然的,就不必多说了,此步骤后,不仅和数据库建立起了连接,而且c3p0还帮助我们管理连接到数据库的线程,很是方便。然后QueryRunner queryRunner=new QueryRunner(JdbcUtil.getDataSourse)这一步可以理解为把与数据库的连接赋予了QueryRunner这个API,QueryRunner实例就可以利用这能力胡作非为了,queryRunner.query(sql,new BeanHandler<Course>(Coure.class),cID)这句就是把course字段数据从数据库查询出来,而且自动封装成course对象,超级方便的是不?但前提是数据库的course字段名字和程序中字段变量名字要一一对应。说回用jdbc实现这类查询功能时,很是麻烦,dbutils直接一步到位,其实底层还是要jdbc帮忙的!大概的原理就是,通过查询出来的字段数据和反射技术的结合实现的!

     其实任何的所谓框架,都是离不开像jdbc这样底层的技术的,我们不能因为框架的好用,方便,易学而忽视最基础的东西,这恰恰是一种阻碍你精通某一技术的障碍。而且框架也不是万能的,有很多像性能,拓展性的弱点,我们需要做的就是在学高度封装的技术时也不忘其底层的实现




原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 吃凉东西牙疼怎么办 吃糖导致的牙疼怎么办 微商退货不退钱怎么办 创维电视要收费怎么办 域名已被注册了怎么办 腿上皮肤干燥像鱼鳞怎么办 货拉拉抢不到单怎么办 京东优惠券删了怎么办 吃了发黄的大米怎么办 误吃了霉味大米怎么办 吃了发霉的食物怎么办 面包发霉了吃了怎么办 长期吃了地沟油怎么办 吃了地沟油呕吐怎么办 dnf冲到别人账号怎么办 皮肤买错大区了怎么办 微信实名超过5个怎么办 微信绑定超过5个怎么办 300英雄忘了账号怎么办 163邮箱登陆不上怎么办 手机收不到微信怎么办 苹果微信反应慢怎么办 微信网速特别慢怎么办 微信突然卡住了怎么办 微信一直卡死怎么办 微信打开卡了怎么办 微信卡住不动了怎么办 微信突然卡死了怎么办 手机京东e卡使用怎么办 携程礼品卡欺诈,怎么办 携程礼品卡诈骗怎么办 易事通卡过期了怎么办 设备被淘宝黑了怎么办 饭店排风噪音大怎么办 善融商城不发货怎么办 ps渲染图像很慢怎么办 买房子收据丢了怎么办 买房子发票丢了怎么办 买房的收据丢了怎么办 首付款收据丢了怎么办 预购房收据丢了怎么办