数据库代码简化

JDBC代码简化–DBUtils

第一部分:DBUtils的介绍
使用传统的JDBC开发,冗余的代码过多。为了简化代码,使用DBUtils进行开发。
DBUtils是Java编程中的数据库操作实用工具,它封装了对JDBC的操作,简化了JDBC的操作,大大简化了代码。
第二部分:DBUtils的核心类
1.QueryRunner(DataSource ds),提供数据源(连接池),DBUtils底层会自动维护连接对象。

QueryRunner的核心方法:
    update(String sql,Object...params):该方法用于执行数据的添加,删除,和更新相关操作。
    query(String sql,ResultSetHandler<T> rsh,Object...params):该方法用于执行数据库的查询操作。

注:如果是调用了QueryRunner()无参的构造方法来创建QueryRunner对象,则在需要数据库进行添加,删除,更新操作就要调用update(Connection con,String sql,Object…params)方法;查询操作调用query(Connection con,String sql,ResultSetHandler rsh,Object…params)

第四部分:DBUtils的实例
4.1:添,删,改的例子
    步骤:
        1.导入相应的jar包,如:数据库驱动,c3p0的jar包,DBUtils的jar包.
        2.编写c3p0的配置文件
        3.编写c3p0的工具类,用于获取数据源
        4.编写BDUtils的代码,先创建QueryRunner对象,在编写SQL语句,如果需要参数就设置参数,执行SQL语句.
c3p0的配置文件:c3p0-config.xml
<?xml version="1.0" encoding="UTF-8"?>
        <c3p0-config>
          <default-config>
            <!-- 加载的类名 -->
            <property name="driverClass">com.mysql.jdbc.Driver</property>
            <!-- 数据库的url地址 -->
            <property name="jdbcUrl">jdbc:mysql://localhost:3306/mydatabase</property>
            <!-- 用户名 -->
            <property name="user">root</property>
            <!-- 密码 -->
            <property name="password">123</property>

            <property name="maxIdleTime">30</property>
            <!-- 最大连接数 -->
            <property name="maxPoolSize">100</property>
            <!-- 最小连接数 -->
            <property name="minPoolSize">10</property>
            <!-- 控制数据源中PreparedStatement的对象数量 -->
            <property name="maxStatements">200</property>
          </default-config>

          <!-- This app is massive! -->
          <named-config name="mysql"> 
            <property name="driverClass">com.mysql.jdbc.Driver</property>
            <property name="jdbcUrl">jdbc:mysql://localhost:3306/mydatabase</property>
            <property name="user">root</property>
            <property name="password">123</property>

            <property name="maxIdleTime">30</property>
            <property name="maxPoolSize">100</property>
            <property name="minPoolSize">10</property>
            <property name="maxStatements">200</property>
          </named-config>
        </c3p0-config>
c3p0的工具类:
package com.wgy.JDBC.Utils;

        import java.sql.Connection;
        import java.sql.SQLException;

        import com.mchange.v2.c3p0.ComboPooledDataSource;

        public class C3P0Utils {
            // 创建下面的类会自动加载位于src目录下的配置文件(c3p0-config.xml),并且加载名字为MySQL的数据
            // ComboPooledDataSource dataSource2 = new ComboPooledDataSource("mysql");
            private static ComboPooledDataSource dataSource = new ComboPooledDataSource("mysql");
            private static Connection con = null;

            public static ComboPooledDataSource getComboPooledDataSource() {
                return dataSource;
            }

            public static Connection getConnection() {
                try {
                    return dataSource.getConnection();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block

                    e.printStackTrace();
                    throw new RuntimeException(e);
                }
            }
        }

    DBUtils的测试类:
        package com.wgy.JDBC.Datasource.Test;

        import java.sql.SQLException;

        import org.apache.commons.dbutils.DbUtils;
        import org.apache.commons.dbutils.QueryRunner;
        import org.junit.Test;

        import com.wgy.JDBC.Utils.C3P0Utils;

        public class DBUtilsTest {

            //使用DBUtils实现数据的删除
            @Test
            public void DelectUser(){

                try {
                    QueryRunner qr = new QueryRunner(C3P0Utils.getComboPooledDataSource());
                    String sql = "DELETE FROM new_user_table WHERE uid = ?";
                    Object[] params = {13};
                    int rows = qr.update(sql, params);
                    if(rows>0){
                        System.out.println("删除成功");
                    }else{
                        System.out.println("删除失败");
                    }
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

            //使用DBUtils实现数据的更行
            @Test
            public void updateUser(){

                try {
                    QueryRunner qr = new QueryRunner(C3P0Utils.getComboPooledDataSource());
                    String sql = "update new_user_table set uage = ? where uid = ?";
                    Object[] pararms = {20,13};
                    int rows = qr.update(sql, pararms);
                    if(rows>0){
                        System.out.println("更新成功");
                    }else{
                        System.out.println("更新失败");
                    }
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

            //使用DBUtils實現數據的添加
            @Test
            public void InsertUser(){
                try {

                    QueryRunner qr = new QueryRunner(C3P0Utils.getComboPooledDataSource());
                    //編寫sql語句
                    String sql = "insert into new_user_table values(null,?,?)";
                    //設置參數
                    Object[] params = {"汾九",1};
                    //執行SQL語句
                    int rows = qr.update(sql,params);
                    if(rows>0){
                        System.out.println("插入成功");
                    }else{
                        System.out.println("插入失敗");
                    }
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }

    4.2:查询的例子
        步骤:
            1.导入相应的jar包,如:数据库驱动,c3p0的jar包,DBUtils的jar包.
            2.编写c3p0的配置文件
            3.编写c3p0的工具类,用于获取数据源
            4.编写BDUtils的代码,先创建QueryRunner对象,在编写SQL语句,如果需要参数就设置参数,执行SQL语句.
    c3p0的配置文件:c3p0-config.xml
        <?xml version="1.0" encoding="UTF-8"?>
        <c3p0-config>
          <default-config>
            <!-- 加载的类名 -->
            <property name="driverClass">com.mysql.jdbc.Driver</property>
            <!-- 数据库的url地址 -->
            <property name="jdbcUrl">jdbc:mysql://localhost:3306/mydatabase</property>
            <!-- 用户名 -->
            <property name="user">root</property>
            <!-- 密码 -->
            <property name="password">123</property>

            <property name="maxIdleTime">30</property>
            <!-- 最大连接数 -->
            <property name="maxPoolSize">100</property>
            <!-- 最小连接数 -->
            <property name="minPoolSize">10</property>
            <!-- 控制数据源中PreparedStatement的对象数量 -->
            <property name="maxStatements">200</property>
          </default-config>

          <!-- This app is massive! -->
          <named-config name="mysql"> 
            <property name="driverClass">com.mysql.jdbc.Driver</property>
            <property name="jdbcUrl">jdbc:mysql://localhost:3306/mydatabase</property>
            <property name="user">root</property>
            <property name="password">123</property>

            <property name="maxIdleTime">30</property>
            <property name="maxPoolSize">100</property>
            <property name="minPoolSize">10</property>
            <property name="maxStatements">200</property>
          </named-config>
        </c3p0-config>

    c3p0的工具类:
        package com.wgy.JDBC.Utils;

        import java.sql.Connection;
        import java.sql.SQLException;

        import com.mchange.v2.c3p0.ComboPooledDataSource;

        public class C3P0Utils {
            // 创建下面的类会自动加载位于src目录下的配置文件(c3p0-config.xml),并且加载名字为MySQL的数据
            // ComboPooledDataSource dataSource2 = new ComboPooledDataSource("mysql");
            private static ComboPooledDataSource dataSource = new ComboPooledDataSource("mysql");
            private static Connection con = null;

            public static ComboPooledDataSource getComboPooledDataSource() {
                return dataSource;
            }

            public static Connection getConnection() {
                try {
                    return dataSource.getConnection();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block

                    e.printStackTrace();
                    throw new RuntimeException(e);
                }
            }
        }
DBUtils的测试类:
package com.wgy.JDBC.Datasource.Test;

        import java.sql.SQLException;
        import java.util.List;

        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 com.wgy.JDBC.Utils.C3P0Utils;
        import com.wgy.domain.User;

        public class DBUtilsTestQuery {

            // 查询所有对象
            @Test
            public void QueryUserAll() {
                try {
                    // 1.获取核心类QueryRunner
                    QueryRunner qr = new QueryRunner(C3P0Utils.getComboPooledDataSource());
                    // 2.编写SQL语句
                    String sql = "select * from new_user_table";
                    // 3.执行SQL语句
                    List<User> list = qr.query(sql, new BeanListHandler<User>(User.class));
                    for (User user : list) {
                        System.out.println(user.getUid() + "," + user.getUname() + "," + user.getUage());
                    }
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    throw new RuntimeException(e);
                }
            }

            //通过id查询对象
            @Test
            public void QueryUserById(){
                try {
                    //1.创建核心类
                    QueryRunner qr = new QueryRunner(C3P0Utils.getComboPooledDataSource());
                    //2.编写SQL语句
                    String sql = "select * from new_user_table where uid = ?";
                    //3.设置参数
                    int id = 2;
                    //4.执行SQL语句
                    User user = qr.query(sql, id, new BeanHandler<User>(User.class));
                    System.out.println(user.getUid() + "," + user.getUname() + "," + user.getUage());
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        //查询所有用户的数量
        @Test
        public void QueryCount(){
            try {
                QueryRunner qr = new QueryRunner(C3P0Utils.getComboPooledDataSource());
                String sql = "select count(*) from new_user_table";
                long count = (long) qr.query(sql, new ScalarHandler());
                System.out.println(count);
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

注:在使用QueryRunner方法调用query方法时,处理器的选择标准如下:

        1.  MapHandler:单行处理器!把结果集转换成Map<String,Object>,其中列名为键!
        2.  MapListHandler:多行处理器!把结果集转换成List<Map<String,Object>>;
        3.  BeanHandler:单行处理器!把结果集转换成Bean,该处理器需要Class参数,即Bean的类型;
        4.  BeanListHandler:多行处理器!把结果集转换成List<Bean>;
        5.  ColumnListHandler:多行单列处理器!把结果集转换成List<Object>,使用ColumnListHandler时需要指定某一列的名称或编号,例如:new ColumListHandler(“name”)表示把name列的数据放到List中。
        6.  ScalarHandler:单行单列处理器!把结果集转换成Object。一般用于聚集查询,例如select count(*) from tab_student。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值