传统jdbc的编程步骤与mybatis相比较

2.1 jdbc编程步骤
1、 加载数据库驱动
2、 创建并获取数据库链接
3、 创建jdbc statement 对象
4、 设置sql 语句
5、 设置sql 语句中的参数( 使用preparedStatement)
6、 通过statement 执行sql 并获取结果
7、 sql 执行结果进行解析处理
8、 释放资源(resultSet preparedstatement connection)

  public static void main(String[] args ) {
    Connection connection = null ;
    PreparedStatement preparedStatement = null ;
    ResultSet resultSet = null ;
    try {
       // 加载数据库驱动
       Class. forName ( "com.mysql.jdbc.Driver" );
       // 通过驱动管理类获取数据库链接
       connection = DriverManager. getConnection ( "jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" , "root" , "root" );
       // 定义sql语句 ?表示占位符
       String sql = "select * from user where username = ?" ;
       // 获取预处理statement
       preparedStatement = connection .prepareStatement( sql );
       // 设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值
       preparedStatement .setString(1, "王五" );
       // 向数据库发出sql执行查询,查询出结果集
       resultSet = preparedStatement .executeQuery();
       // 遍历查询结果集
       while ( resultSet .next()) {
           System. out .println( resultSet .getString( "id" ) + "  " + resultSet .getString( "username" ));
       }
    } catch (Exception e ) {
       e .printStackTrace();
    } finally {
       // 释放资源
       if ( resultSet != null ) {
           try {
              resultSet .close();
           } catch (SQLException e ) {
              // TODO Auto-generated catch block
              e .printStackTrace();
           }
       }
       if ( preparedStatement != null ) {
           try {
              preparedStatement .close();
           } catch (SQLException e ) {
              // TODO Auto-generated catch block
              e .printStackTrace();
           }
       }
       if ( connection != null ) {
           try {
              connection .close();
           } catch (SQLException e ) {
              // TODO Auto-generated catch block
              e .printStackTrace();
           }
       }
    }
}

2.2 jdbc 问题总结如下:
1、 数据库连接创建、释放频繁造成系统资源浪费,从而影响系统性能。如果使用数据库连接池可解决此问题。
2、Sql 语句在代码中硬编码,造成代码不易维护,实际应用中sql 变化的可能较大,sql 变动需要改变java 代码。
3、 使用preparedStatement 向占有位符号传参数存在硬编码,因为sql 语句的where 条件不一定,可能多也可能少,修改sql 还要修改代码,系统不易维护。
4、 对结果集解析存在硬编码(查询列名),sql 变化导致解析代码变化,系统不易维护,如果能将数据库记录封装成pojo 对象解析比较方便。

2.3 Mybatis 解决 jdbc 编程的问题
1、 数据库连接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库连接池可解决此问题。
解决: SqlMapConfig.xml 中配置数据连接池,使用连接池管理数据库链接。
2、Sql 语句写在代码中造成代码不易维护,实际应用sql 变化的可能较大,sql 变动需要改变java 代码。
解决: Sql 语句配置在XXXXmapper.xml 文件中与java 代码分离。
3、 sql 语句传参数麻烦,因为sql 语句的where 条件不一定,可能多也可能少,占位符需要和参数一一对应。
解决:Mybatis 自动将java 对象映射至sql 语句,通过statement 中的parameterType 定义输入参数的类型。
4、 对结果集解析麻烦,sql 变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo 对象解析比较方便。
解决:Mybatis 自动将sql 执行结果映射至java 对象,通过statement 中的resultType 定义输出结果的类型。

版权声明:本文为qq_18142501原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。