Java -- JDBC学习笔记9、Apache的DBUtils使用
1、Apache的DBUtils
Commons dbutils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能简化JDBC应用程序的开发。同时,不会影响程序的性能。
2、DBUtils简介
- Dbutils是Java编程中数据库操作实用小工具,小巧、简单、实用
- 对于数据表的查询操作,可以把结果转换为List、Aray、set等集合。便于操作
- 对于数据表的DML操作,也变得很简单、只需要写SQL语句。
3、DBUtils主要内容
Resultsethandler接口:转换类型接口
- BeanHandler类:实现类,把一条记录转换成对象、也就是查询单个对象。
- BeanListhandler类:实现类,把多条记录转换成List集合、也就是查询所有。
- ScalarHandler类:实现类,适合获取一行一列的数据。比如查询数据库表行数。
QueryRunner:执行sq语句的类
- 增、删、改: update()
- 查询: query()
3、DBUtils使用步骤
- 导入jar包、分别是MySQL、druid、commons-dbutils。
- 添加配置文件。
3.1、具体代码
- DBUtils工具类:
public class DBUtils
{
private static DruidDataSource ds;
static
{
Properties properties = new Properties();
try
{
properties.load(DBUtils.class.getResourceAsStream("/database.properties"));
ds = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);
}
catch (IOException e)
{
e.printStackTrace();
}
catch (Exception exception)
{
exception.printStackTrace();
}
}
public static Connection getConnection()
{
try
{
return ds.getConnection();
}
catch (SQLException sqlException)
{
sqlException.printStackTrace();
}
return null;
}
public static DataSource getDataSource()
{
return ds;
}
}
- Dao层接口:
public interface UserInfoDao
{
int insert(UserInfo userInfo);
int update(UserInfo userInfo);
int delete(int id);
UserInfo select(int id);
List<UserInfo> selectAll();
}
- 实现Dao接口:
public class UserInfoDaoImpl implements UserInfoDao
{
private QueryRunner queryRunner = new QueryRunner(DBUtils.getDataSource());
/**
* 新增
* @param userInfo
* @return 受影响行数
*/
@Override
public int insert(UserInfo userInfo)
{
Object[] arr = {userInfo.getName(), userInfo.getAge()};
try
{
int result = queryRunner.update("insert into UserInfo(Name,Age) values(?,?)", arr);
return result;
}
catch (SQLException sqlException)
{
sqlException.printStackTrace();
}
return 0;
}
/**
* 修改
* @param userInfo 修改内容
* @return 受影响行数
*/
@Override
public int update(UserInfo userInfo)
{
Object[] arr = {userInfo.getName(), userInfo.getAge(), userInfo.getId()};
try
{
int result = queryRunner.update("update UserInfo set Name=?,Age=? where id=?", arr);
return result;
}
catch (SQLException sqlException)
{
sqlException.printStackTrace();
}
return 0;
}
/**
* 删除
* @param id 条件主键
* @return 受影响行数
*/
@Override
public int delete(int id)
{
try
{
int result = queryRunner.update("delete from UserInfo where id = ?", id);
return result;
}
catch (SQLException sqlException)
{
sqlException.printStackTrace();
}
return 0;
}
/**
* 查询单个
* @param id 条件
* @return 单个对象
*/
@Override
public UserInfo select(int id)
{
try
{
UserInfo userInfo = queryRunner.query("select * from UserInfo where id=?", new BeanHandler<UserInfo>(UserInfo.class), id);
return userInfo;
}
catch (SQLException sqlException)
{
sqlException.printStackTrace();
}
return null;
}
/**
* 查询所有
* @return 结果集合
*/
@Override
public List<UserInfo> selectAll()
{
try
{
return queryRunner.query("select * from UserInfo", new BeanListHandler<UserInfo>(UserInfo.class));
}
catch (SQLException sqlException)
{
sqlException.printStackTrace();
}
return null;
}
}
使用Apache提供的工具类、代码简化了好多,但也不是万能的,有优点也有缺点、还是要根据实际合理使用。