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

  • 相关阅读:
    百度编辑器 Ueditor使用记录
    JS实现继承的几种方式
    IOS 浏览器上设置overflow: auto 不可滚动
    throw new Error('Cyclic dependency' + nodeRep)
    如何理解springaop
    SQL连接的分类
    Eclipse创建Maven-Web项目及解决 jre版本和web.xml版本问题
    SQL的几种连接:内连接、左联接、右连接、全连接、交叉连接
    Centos7下面安装eclipse
    Centos7 下编译 Openjdk8
  • 原文地址:https://www.cnblogs.com/dcy521/p/14733253.html
Copyright © 2011-2022 走看看