标签:
一、为什么要使用dbutils
使用dbutils可以极大程度的简化代码书写,使得开发进度更快,效率更高
二、dbutils下载地址
http://commons.apache.org/proper/commons-dbutils/download_dbutils.cgi
出现的ds为数据源对象,可以是某个数据库连接池的DataSource,也可以是自定义数据库连接池的DataSource,这里我是用了dbcp数据库连接池。
1 package day16.regular.utils; 2 3 import java.io.IOException; 4 import java.sql.Connection; 5 import java.sql.SQLException; 6 import java.util.Properties; 7 8 import javax.sql.DataSource; 9 10 import org.apache.commons.dbcp2.BasicDataSourceFactory; 11 12 13 //使用第三方jar包创建dbcp连接池 14 public class DataSourceUtils_DBCP { 15 private DataSourceUtils_DBCP(){}//使用私有修饰构造方法,可以防止创建对象,这样可以确保只有一个DataSource对象 16 private static DataSource ds; 17 static 18 { 19 Properties properties=new Properties(); 20 try { 21 properties.load(DataSourceUtils_DBCP.class.getClassLoader().getResourceAsStream("config_dbcp.properties")); 22 ds=BasicDataSourceFactory.createDataSource(properties); 23 } catch (IOException e) { 24 e.printStackTrace(); 25 } catch (Exception e) { 26 e.printStackTrace(); 27 } 28 } 29 public static Connection getConnection() 30 { 31 Connection conn=null; 32 try { 33 conn=ds.getConnection(); 34 } catch (SQLException e) { 35 e.printStackTrace(); 36 } 37 return conn; 38 } 39 public static DataSource getDataSource() 40 { 41 return ds; 42 } 43 }
private static DataSource ds=DataSourceUtils_DBCP.getDataSource();
三、更新操作方法示例(delete语句略)。
public void testInsert() { QueryRunner run=new QueryRunner(ds); String sql="insert into people(id,name,age,sex) values(?,?,?,?)"; try { run.update(sql,"001","小强",12,"男"); } catch (SQLException e) { e.printStackTrace(); } }
使用dbutils可以实现预编译。
四、ArrayListHandler用法(不需掌握)。
public void testSelect_ArrayListHandler() throws SQLException { QueryRunner run=new QueryRunner(ds); String sql="select * from people"; List<Object[]>arr=run.query(sql,new ArrayListHandler()); //执行该方法将所有的结果存放到了一个list中,每一行结果保存到一个object数组中 for(Object obj[]:arr) { for(Object o:obj) { System.out.print(o+" "); } System.out.println(); } /** * 001 小强 12 男 002 张三 13 男 003 李四 14 男 004 王五 14 男 005 赵六 14 男 006 陈七 14 男 */ }
五、BeanHandler和BeanListHandler用法(重点掌握)
1.BeanHandler:调用QueryRunner的query方法,并提供相应的参数,就可以获取一个已经封装好了的Bean对象(需要实现准备好一个javaBean,字段名要完全匹配)。
public void testSelect_BeanHandler() throws SQLException { QueryRunner run=new QueryRunner(ds); String sql="select * from people"; People people=run.query(sql,new BeanHandler<People>(People.class)); //使用该方法能够自动将结果集的第一行封装到一个Bean对象中。 System.out.println(people); /** * People [id=001, name=小强, age=12, sex=男] */ }
2.BeanListHandler:调用QueryRunner的query方法,并提供相应的参数,就可以获取一个List对象,该对象中的每一个元素都是一个javabean对象。
public void testSelect_BeanListHandler() throws SQLException { QueryRunner run=new QueryRunner(ds); String sql="select * from people"; List<People>list=run.query(sql, new BeanListHandler<People>(People.class)); for(People people:list) { System.out.println(people); } /** * People [id=001, name=小强, age=12, sex=男] People [id=002, name=张三, age=13, sex=男] People [id=003, name=李四, age=14, sex=男] People [id=004, name=王五, age=14, sex=男] People [id=005, name=赵六, age=14, sex=男] People [id=006, name=陈七, age=14, sex=男] */ }
六、ColumnListHandler:获取某个字段的所有取值,并封装到一个List对象中(不要求掌握)。
public void testSelect_ColumnListHandler() throws SQLException { QueryRunner run=new QueryRunner(ds); String sql="select * from people"; List<String>list=run.query(sql, new ColumnListHandler<String>("sex"));//不带任何参数的默认查询第一行 for(String obj:list) { System.out.println(obj); } /** * 男 男 男 男 男 男 */ }
七、KeyedHandler:获取一个键值对,键为表的主键,值为一个Map对象,该封装了一行数据的键值对,键是字段名(重点掌握)。
public void testSelect_KeyHandler() throws SQLException { //该方法不重要,不需要重点掌握 QueryRunner run=new QueryRunner(ds); String sql="select * from people"; Map<String, Map<String, Object>>map=run.query(sql, new KeyedHandler<String>("id")); Iterator<String>it=map.keySet().iterator(); while(it.hasNext()) { Map<String,Object>m=map.get(it.next()); System.out.println(m); } /* {id=004, name=王五, age=14, sex=男} {id=005, name=赵六, age=14, sex=男} {id=006, name=陈七, age=14, sex=男} {id=001, name=小强, age=12, sex=男} {id=002, name=张三, age=13, sex=男} {id=003, name=李四, age=14, sex=男} */ }
八、MapHandler:封装第一行数据到一个Map对象(不需要掌握)。
public void testSelect_MapHandler() throws SQLException { QueryRunner run=new QueryRunner(ds); String sql="select * from user"; Map<String, Object>map=run.query(sql,new MapHandler()); //该执行结果只封装第一行。 System.out.println(map); /* {id=0001, name=小强, age=12}*/ }
九、MapListHandler:封装每一行数据到一个Map,并保存到一个List中。(重点掌握)
public void testSelect_MapListHandler() throws SQLException { QueryRunner run=new QueryRunner(ds); String sql="select * from user"; List<Map<String,Object>> list=run.query(sql, new MapListHandler()); /** * 该语句的执行结果是将数据库的查询结果存放到List中,其中每一行存放到一个Map对象中。 */ for(Map<String,Object> map:list) { System.out.println(map); } /* {id=0001, name=小强, age=12} {id=0002, name=小明, age=13} */ }
十、ScalarHandler:使用聚合函数(如count、sum等)的时候可以使用该方法简化书写(重点掌握)
public void testSelect_ScalarHandler() throws SQLException { QueryRunner run=new QueryRunner(ds); String sql="select count(1) from user"; Object value=run.query(sql, new ScalarHandler<Object>()); //ScalarHandler用于执行带有聚合函数的查询,执行count方法的时候比较方便。 System.out.println(value); }
/*
2
*/
【Java EE 学习第16天】【dbutils的使用方法】
标签:
原文地址:http://www.cnblogs.com/kuangdaoyizhimei/p/4684109.html