数据库之DBUtils

在开发中只使用JDBC会使得代码冗余过多,为简化代码对相同的地方进行抽取,使用DBUtils类对JDBC进行封装

由于返回的会是JavaBean类对象,所以我们要编写自己的JavaBean类。一般放在domain文件夹中。

JavaBean类

1、实现接口java.io.Serializable 可省略

2、提供私有字段

3、提供getter/setter方法

4、提供无参构造方法

如下:编写了一个User类用来接受对象


    
    
  1. public class User {
  2. private int pid;
  3. private String pname;
  4. private double price;
  5. private int cid;
  6. public User(){}
  7. public int getPid() { return pid;}
  8. public void setPid(int pid) { this.pid = pid;}
  9. public String getPname() { return pname;}
  10. public void setPname(String pname) { this.pname = pname; }
  11. public double getPrice() { return price;}
  12. public void setPrice(double price) { this.price = price;}
  13. public int getCid() { return cid;}
  14. public void setCid(int cid) { this.cid = cid;}
  15. }
DBUtils三个核心功能的介绍

1、QueryRunner类提供了对sql操作的api

QueryRunner(DataSource ds) 提供连接池,底层自动维护连接Connection。update方法执行更新数据,query执行操作数据。

2、ResultSetHandler接口定义了select操作后怎样封装结果集。用来将ResultSet转换为目标类的工具。

 MapHandler:单行处理器!把结果集转换成Map<String,Object>,其中列名为键!

MapListHandler:多行处理器!把结果集转换成List<Map<String,Object>>;

BeanHandler:单行处理器!把结果集转换成Bean,该处理器需要Class参数,即Bean的类型;

BeanListHandler:多行处理器!把结果集转换成List<Bean>;

ColumnListHandler:多行单列处理器!把结果集转换成List<Object>,使用ColumnListHandler时需要指定某一列的名称或编号,例如:new ColumListHandler(“name”)表示把name列的数据放到List中。

ScalarHandler:单行单列处理器!把结果集转换成Object。一般用于聚集查询,例如select count(*) from tab_student。

3、DbUtils类,工具类,定义了关闭资源和事务处理的方法。

closeQuietly 关闭连接   commitAndCloseQuietly 提交并关闭连接 rollbackAndCloseQuietly 回滚并关闭i链接


测试DBUtils 


    
    
  1. import java.sql.SQLException;
  2. import java.util.List;
  3. import _3_javabean.domain.*;
  4. import org.apache.commons.dbutils.QueryRunner;
  5. import org.apache.commons.dbutils.handlers.BeanHandler;
  6. import org.apache.commons.dbutils.handlers.BeanListHandler;
  7. import org.apache.commons.dbutils.handlers.ScalarHandler;
  8. import org.junit.Test;
  9. import _1_C3P0连接池.C3P0Utils;
  10. public class TestDBUtils {
  11. //查询所有
  12. @Test
  13. public void testQueryAll(){
  14. try {
  15. QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
  16. String sql = "select * from product";
  17. List<User> users = qr.query(sql, new BeanListHandler<User>(User.class)); //注意参数,查询列表 返回javabean的列表
  18. for(User user :users)
  19. System.out.println(user.getPname()+ " "+user.getPid());
  20. } catch (SQLException e) {
  21. e.printStackTrace();
  22. }
  23. }
  24. //查询ID
  25. @Test
  26. public void testQueryID(){
  27. try {
  28. QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
  29. String sql = "select * from product where pid = ?";
  30. Object[] params = { 5};
  31. User user =qr.query(sql, new BeanHandler<User>(User.class), params); //查询一个,bean操作,必须编写javabean
  32. System.out.println(user.getPname()+ " "+user.getPid());
  33. } catch (SQLException e) {
  34. e.printStackTrace();
  35. }
  36. }
  37. //查询用户个数
  38. @Test
  39. public void testQueryID1(){
  40. try {
  41. QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
  42. String sql = "select count(*) from product ";
  43. Long i = (Long) qr.query(sql, new ScalarHandler()); //单数据 返回的是lang,
  44. System.out.println(i);
  45. } catch (SQLException e) {
  46. e.printStackTrace();
  47. }
  48. }
  49. //添加方法
  50. @Test
  51. public void testAddUser(){
  52. try {
  53. //创建核心类
  54. QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
  55. //编写SQL语句
  56. String sql = "insert into product values(null,?,?,null,1)";
  57. //占位符设置值
  58. Object[] params = { "柳岩", 23.2};
  59. //执行
  60. int row = qr.update(sql, params);
  61. System.out.println(row);
  62. } catch (SQLException e) {
  63. e.printStackTrace();
  64. }
  65. }
  66. //修改方法
  67. @Test
  68. public void testUpdateUser(){
  69. try {
  70. //创建核心类
  71. QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
  72. //编写SQL语句
  73. String sql = "update product set pname = ? where pid = ?";
  74. //占位符设置值
  75. Object[] params = { "吕布", 25};
  76. //执行
  77. int row = qr.update(sql, params);
  78. System.out.println(row);
  79. } catch (SQLException e) {
  80. e.printStackTrace();
  81. }
  82. }
  83. //删除方法
  84. @Test
  85. public void testdeleteUser(){
  86. try {
  87. //创建核心类
  88. QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
  89. //编写SQL语句
  90. String sql = "delete from product where pid = ?";
  91. //占位符设置值
  92. Object[] params = { 25};
  93. //执行
  94. int row = qr.update(sql, params);
  95. System.out.println(row);
  96. } catch (SQLException e) {
  97. e.printStackTrace();
  98. }
  99. }
  100. }


Mysql总结

所学的东西:

①Junit 可代替main方法

②JDBC  (开发步骤)   数据库接口  每次都需要获得连接和释放资源,因此抽取一个工具类JdbcUtils

③配置文件 xx.properties 使用ResourceBundle加载

④连接池  共享连接  自定义连接池/C3P0/DBCP 

C3P0 

配置文件 c3p0-config.xml 放于src文件中 编写了一个连接池的工具类 C3P0Utils

⑤DBUtils 简化JDBC 

编写JavaBean  (开发步骤)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值