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,其中列名为键!

MapListHandler:多行处理器!把结果集转换成List>

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

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

ColumnListHandler:多行单列处理器!把结果集转换成List,使用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 users = qr.query(sql, new BeanListHandler(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.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  (开发步骤)


你可能感兴趣的:(进阶)