DBUtils

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

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

JavaBean类

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

2、提供私有字段

3、提供getter/setter方法

4、提供无参构造方法

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

public class User {
	private int pid;
	private String pname;
	private double price;
	private int cid;
	
	public User(){}
	
	public int getPid() {return pid;}
	public void setPid(int pid) {this.pid = pid;}
	public String getPname() {return pname;}
	public void setPname(String pname) {this.pname = pname;	}
	public double getPrice() {return price;}
	public void setPrice(double price) {this.price = price;}
	public int getCid() {return cid;}
	public void setCid(int cid) {this.cid = cid;}
}
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 

import java.sql.SQLException;
import java.util.List;

import _3_javabean.domain.*;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.junit.Test;

import _1_C3P0连接池.C3P0Utils;

public class TestDBUtils {

	//查询所有
	@Test
	public void testQueryAll(){
		try {
			QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
			String sql = "select * from product";
			List<User> users = qr.query(sql, new BeanListHandler<User>(User.class));//注意参数,查询列表 返回javabean的列表
			for(User user :users)
				System.out.println(user.getPname()+" "+user.getPid());
		} catch (SQLException e) {
			e.printStackTrace();
		}	
	}
	//查询ID
	@Test
	public void testQueryID(){
		try {
			QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
			String sql = "select * from product where pid = ?";
			Object[] params = {5};
			User user =qr.query(sql, new BeanHandler<User>(User.class), params); //查询一个,bean操作,必须编写javabean
			System.out.println(user.getPname()+" "+user.getPid());
		} catch (SQLException e) {
			e.printStackTrace();
		}	
	}
	
	//查询用户个数
	@Test
	public void testQueryID1(){
		try {
			QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
			String sql = "select count(*) from product ";
			Long i = (Long) qr.query(sql, new ScalarHandler());//单数据 返回的是lang,
			System.out.println(i);
		} catch (SQLException e) {
			e.printStackTrace();
		}	
	}
	
	
	
	//添加方法
	@Test
	public void testAddUser(){
		try {
			//创建核心类
			QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
			//编写SQL语句
			String sql = "insert into product values(null,?,?,null,1)";
			//占位符设置值
			Object[] params = {"柳岩",23.2};
			//执行
			int row = qr.update(sql, params);
			System.out.println(row);
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	//修改方法
		@Test
		public void testUpdateUser(){
			try {
				//创建核心类
				QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
				//编写SQL语句
				String sql = "update product set pname = ? where pid = ?";
				//占位符设置值
				Object[] params = {"吕布",25};
				//执行
				int row = qr.update(sql, params);
				System.out.println(row);
				
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		
		//删除方法
		@Test
		public void testdeleteUser(){
			try {
				//创建核心类
				QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
				//编写SQL语句
				String sql = "delete from product where pid = ?";
				//占位符设置值
				Object[] params = {25};
				//执行
				int row = qr.update(sql, params);
				System.out.println(row);
				
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}	
}


Mysql总结

所学的东西:

①Junit 可代替main方法

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

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

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

C3P0 

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

⑤DBUtils 简化JDBC 

编写JavaBean  (开发步骤)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值