在开发中只使用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 (开发步骤)