理解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(url, user, password);
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这样底层的技术的,我们不能因为框架的好用,方便,易学而忽视最基础的东西,这恰恰是一种阻碍你精通某一技术的障碍。而且框架也不是万能的,有很多像性能,拓展性的弱点,我们需要做的就是在学高度封装的技术时也不忘其底层的实现
- 理解dbutils对jdbc的封装
- 第十七天dbutils的使用------Commons DbUtils(Apache)第三方的:只是对JDBC编码进行了简单的封装
- Apache DbUtils - JDBC轻量级封装的工具包
- Connection DBUtils (封装了原始JDBC对数据库的操作的一个开源类库)
- DbUtils简单封装JDBC
- ORM底层封装( JDBC \ DBUtils)
- JDBC操作的封装包——Dbutils
- JDBC轻量级封装的工具包Apache DbUtils使用教程
- JDBC(十一)利用DBUtils 封装访问数据库的Dao
- 对封装的理解
- JDBC 对数据库连接的封装
- 轻量级JDBC封装DBUtils简单教程
- DbUtils component学习使用(jdbc封装工具)
- QueryRunner(DBUtils工具类)体现了:DBUtils封装了C3P0和jdbc。【三者的关系】
- 对JDBC的一些理解
- Spring对JDBC异常的封装
- spring 对jdbc的封装 aop
- hibernate对JDBC封装的简单分析
- IP地址与子网掩码
- MySQL 去掉字符串前后或中间的某一字符串
- 680
- 搭建一个ssh框架的过程
- IGBT是什麽
- 理解dbutils对jdbc的封装
- echarts画k线图(折线)
- ASP.NET中使用jQGrid
- 悬挂式数字麦克风阵列 多点视频会议
- 一个完整的线上异常捕获类
- 源码阅读---Activity生命周期控制
- 【MongoDB】复合索引
- 对拍
- 使用xxl-job调度平台时,启动执行器工程报错:unknown code for readObject at 0x3c (<)