小滴课堂-学习笔记:JDBC进阶之数据库操作工具类和池化思想

56 篇文章 0 订阅
15 篇文章 0 订阅

logo 愿景:"让编程不再难学,让技术与生活更加有趣"


更多架构课程请访问 xdclass.net

 

目录

第1集 数据库工具类自定义DBUtils封装

第2集 性能优化之池化思想你知道多少

第3集 javaweb基础+JDBC知识总结回顾

第4集 市面上主流的DB工具类和数据库连接池介绍

 数据库连接池和Apache DBUtils实战

第1集 Apache dbcp数据库连接池封装DataSourceUtils案例实战

第2集 Apache dbutils工具快速入门实战

第3集 BeanHandler和BeanListHandler结果集处理器实战

第4集 MapHandler-ScalarHandler结果集处理器实战

第5集 QueryRunner新增update语法实战

干货文档


第1集 数据库工具类自定义DBUtils封装

简介:自定义DBUtils工具类封装

  • 优化JDBC操作,提高效率
  • javaweb项目中,使用jdbc需要添加mysql启动到tomcat里面



/**
 * DB工具类
 * 小滴课堂 https://xdclass.net
 * 讲师微信:xdclass6
 *
 */
public class CustomDBUtil {
​
    private static String url;
​
    private static String username;
​
    private static String password;
​
    private static String driver;
​
​
    static {
        try {
            Properties properties = new Properties();
​
            properties.load(CustomDBUtil.class.getClassLoader().getResourceAsStream("db.properties"));
​
            url = properties.getProperty("url");
            username = properties.getProperty("username");
            password = properties.getProperty("password");
            driver = properties.getProperty("driver");
​
            //加载JDBC驱动程序
            Class.forName(driver);
​
        }catch (Exception e){
            e.printStackTrace();
        }
    }
​
​
    /**
     * 
     * 小滴课堂 https://xdclass.net
     * 讲师微信:xdclass6
     * 
     * 获取连接
     * @return
     * @throws Exception
     */
    public static Connection getConnection() throws Exception{
​
        Connection connection = DriverManager.getConnection(url,username,password);
        return connection;
    }
​
​
    /**
     * 小滴课堂 https://xdclass.net
     * 讲师微信:xdclass6
     *
     * 关闭数据库资源
     * @param resultSet
     * @param ps
     * @param connection
     */
    public static void close(ResultSet resultSet, PreparedStatement ps, Connection connection){
​
        try{
​
            if(resultSet!=null){
                resultSet.close();
            }
​
            if(ps!=null){
                ps.close();
            }
            if(connection!=null){
                connection.close();
            }
​
        }catch (SQLException e){
            throw  new RuntimeException();
        }
​
    }
​
​
}

第2集 性能优化之池化思想你知道多少

简介: 数据库连接池化思想

  • 为什么要用连接池

    • 数据库建立Connection比较耗时,频繁的创建和释放连接引起的大量性能开销
    • 如果数据库连接得到重用,避免这些开销,也提高了系统稳定
    • 数据库连接池在初始化过程中,往往已经创建了若干数据库连接置于池中备用,对于业务请求处理而言,直接利用现有可用连接,缩减了系统整体响应时间
    • 统一的连接管理,避免数据库连接泄漏、超时占用等问题
  • 同类对比其他池化思想

    • Java线程池
    • tomcat连接池
    • 对象池(SpringIOC容器)

 

image-20200531172759694

 

 

第3集 javaweb基础+JDBC知识总结回顾

简介: Javaweb基础+JDBC知识点回顾

  • http基础

  • tomcat

  • javaweb

    • servlet
    • jsp
    • httpservletrequest
    • httpservletresponse
    • 请求转发
    • 请求重定向
    • el
    • session
    • cookie
    • 文件上传下载
    • Listener监听器
    • Filter过滤器
    • MVC
  • JDBC

     

 

第4集 市面上主流的DB工具类和数据库连接池介绍

简介:介绍市面上常见的DB工具类和数据连接池

  • 数据库工具类 : Apache commens-dbutils

    • Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,能极大简化jdbc编码的工作量,同时也不会影响程序的性能

    • 地址:https://commons.apache.org/proper/commons-dbutils/

    • 导入

      • 可以添加到tomcat的lib包
      • 可以添加到web-inf的lib包

 

 

 

 

 

logo 愿景:"让编程不再难学,让技术与生活更加有趣"

更多架构课程请访问 xdclass.net

 数据库连接池和Apache DBUtils实战

第1集 Apache dbcp数据库连接池封装DataSourceUtils案例实战

简介:Apache dbcp数据库连接池封装DataSourceUtils实战

  • 配置

    
    
    
    driverClassName = com.mysql.jdbc.Driver
    url = jdbc:mysql://127.0.0.1:3306/xd_web?useUnicode=true&characterEncoding=utf-8&useSSL=false
    username = root
    password = xdclass.net
    ​
    initialSize=2              //连接池建立时创建的连接的数量
    maxActive=15            //连接池同一时间内最多能够分配的活动连接的数量

     

  • 工具类开发

    
    
    
    public class DataSourceUtil {
    ​
        private static DataSource dataSource;
        static {
    ​
            try{
    ​
                InputStream in = DataSourceUtil.class.getClassLoader().getResourceAsStream("database.properties");
                Properties p = new Properties();
                p.load(in);
                dataSource = BasicDataSourceFactory.createDataSource(p);
    ​
            }catch (Exception e){
                e.printStackTrace();
                throw new ExceptionInInitializerError("初始化DBPC失败");
            }
        }
    ​
        public static DataSource getDataSource(){
            return dataSource;
        }
    ​
    }
    ​
    
    
    
    
    

     

第2集 Apache dbutils工具快速入门实战

简介:Apache dbutils工具快速入门实战

  • DbUtils 中的核心类/接口

    • QueryRunner

      • 查询执行器,提供对sql语句操作的API

      • update(String sql,Object...params) 可执行 增-INSERT、删-DELETE、改-UPDATE

      • query(String sql,ResultSetHandler rsh,Object...params) 可执行 查询-SELECT

         

    • ResultSetHandler

      • 结果集处理类,执行处理一个结果集对象,将数据转变并处理为任何一种形式

        • BeanHandler 结果集中的第一行数据封装到一个对应的JavaBean实例
        • BeanListHandler 结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里
        • MapHandler 结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值
        • MapListHandler 结果集中的每一行数据都封装到一个Map里,然后再存放到List
        • ScalarHandler 结果集中第一行数据指定列的值,常用来进行单值查询

     

 

  • 例子

    
    
    
    QueryRunner queryRunner = new QueryRunner(DataSourceUtil.getDataSource());
    ​
    public User findById(int id)  {
            String sql = "select * from user where id = ? ";
            User user = null;
            try {
                user = queryRunner.query(sql,new BeanHandler<>(User.class,processor),id);
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return user;
    }
    
    
    
    

     

 

第3集 BeanHandler和BeanListHandler结果集处理器实战

简介:BeanHandler和BeanListHandler多个结果集处理器实战

  • BeanHandler : 结果集中的第一行数据封装到一个对应的JavaBean实例



  /**
     * 小滴课堂jdbc实战
     *
     * 根据id找用户
     *
     * @param id
     * @return
     */
    public User findById(int id){
        String sql = "select * from user where id=?";
        User user = null;
        try {
            user  =  queryRunner.query(sql,new BeanHandler<>(User.class,processor),id);
​
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return user;
    }
  • 开启驼峰映射:数据库字段映射Java类



 //开启驼峰映射
    private BeanProcessor bean = new GenerousBeanProcessor();
    private RowProcessor processor = new BasicRowProcessor(bean);
  • BeanListHandler: 结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里



public List<User> list(){
        String sql = "select * from user";
       List<User> list = null;
        try {
            list  =  queryRunner.query(sql,new BeanListHandler<>(User.class,processor));
​
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return list;
    }



第4集 MapHandler-ScalarHandler结果集处理器实战

简介:MapHandler和ScalarHandler结果集处理器实战

  • MapHandler : 结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值

    
    
    
      /**
         * 小滴课堂jdbc实战
         * 有问题加讲师微信:  xdclass6
         
         * 根据id找用户 MapHandler
         *
         * @param id
         * @return
         */
        public Map<String,Object> findByIdWithMap(int id){
            String sql = "select * from user where id=?";
            Map<String,Object> map = null;
            try {
                map  =  queryRunner.query(sql,new MapHandler(),id);
    ​
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return map;
        }
    

     

  • MapListHandler : 结果集中的每一行数据都封装到一个Map里,然后再存放到List

    
    
    
    /**
         * 小滴课堂jdbc实战 https://xdclass.net
         * 有问题加讲师微信:  xdclass6
         * 查找全部用户 MapListHandler
         *
         * @return
         */
    ​
        public List<Map<String,Object>> listWithMap(){
            String sql = "select * from user";
            List<Map<String,Object>> list = null;
            try {
                list  =  queryRunner.query(sql,new MapListHandler());
    ​
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return list;
        }
    
    
    

     

  • ScalarHandler : 结果集中第一行数据指定列的值,常用来进行单值查询

    
    
    
     public int countUser(){
    ​
            String sql = "select count(*) from user";
    ​
            Long count = null;
    ​
            try{
    ​
                count = (Long)queryRunner.query(sql,new ScalarHandler<>());
    ​
            }catch (Exception e){
                e.printStackTrace();
            }
            return count.intValue();
    ​
        }
    ​
    
    
    

     

 

第5集 QueryRunner新增update语法实战

简介:QueryRunner新增记录update实战

  • update新增

    
    
    
    
    public int save(User user) throws Exception {
            String sql = "insert into user (phone,pwd,sex,img,create_time,role,username,wechat) values(?,?,?,?,?,?,?,?)";
    ​
            Object [] params = {
                    user.getPhone(),
                    user.getPwd(),
                    user.getSex(),
                    user.getImg(),
                    user.getCreateTime(),
                    user.getRole(),
                    user.getUsername(),
                    user.getWechat()
            };
    ​
    //        String sql = "delete from user where id= ?";
    //        Object [] params = { 1};
    ​
            int i = 0;
            try{
    ​
               i = queryRunner.update(sql,params);
    ​
            }catch (Exception e){
                e.printStackTrace();
                throw new Exception();
            }
    ​
            return i;
    ​
        }
    
    
    
    

     

干货文档

                                                        关注公众号发送:“CSDN干货文档”  即可领取

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dev666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值