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提供的工具类、代码简化了好多,但也不是万能的,有优点也有缺点、还是要根据实际合理使用。

posted @ 2021-05-05 23:00  初晨~  阅读(169)  评论(0编辑  收藏  举报