原生态JDBC程序问题总结

MyBatis是一个持久层的框架。持久层的框架都是对JDBC的封装。

<1>对原生态JDBC程序(单独使用JDBC开发)问题总结

<1.1>jdbc程序
使用jdbc查询mysql数据库中用户表的记录

创建java工程,加入jar包
数据库驱动包:mysql/oracle

一般需要以下七个步骤:
加载JDBC驱动;

建立并获取数据库连接;

创建 JDBC Statements 对象;

设置SQL语句的传入参数;

执行SQL语句并获得查询结果;

对查询结果进行转换处理并将处理结果返回;

释放相关资源(关闭Connection,关闭Statement,关闭ResultSet);

具体代码如下

public static List<Map<String,Object>> queryForList(){ 
    //建立数据库连接 
    Connection connection = null;  
    //结果集对象
    ResultSet rs = null;  
    //预编译的statement,使用预编译的statement提高数据库性能
    PreparedStatement stmt = null;  

    List<Map<String,Object>> resultList = new ArrayList<Map<String,Object>>();  

    try {  
        // 加载JDBC驱动  
       Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();  
        String url = "jdbc:oracle:thin:@localhost:1521:ORACLEDB";  

        String user = "trainer";   
        String password = "trainer";   

        // 通过驱动管理类获取数据库连接  
        connection = DriverManager.getConnection(url,user,password);   
        //定义sql语句,?表示占位符
        String sql = "select * from userinfo where user_id = ? ";  
        //获取预处理的Statement对象 
        stmt = connection.prepareStatement(sql);  

        //设置传入参数,第一个参数为sql语句中参数的序号
        stmt.setString(1, "zhangsan");  

        //执行SQL语句  
        rs = stmt.executeQuery();  

        //处理查询结果(将查询结果转换成List<Map>格式)  
        ResultSetMetaData rsmd = rs.getMetaData();  
        int num = rsmd.getColumnCount();  

        while(rs.next()){  
            Map map = new HashMap();  
            for(int i = 0;i < num;i++){  
                String columnName = rsmd.getColumnName(i+1);  
                map.put(columnName,rs.getString(columnName));  
            }  
            resultList.add(map);  
        }  

    } catch (Exception e) {  
        e.printStackTrace();  
    } finally {  
        try {  
            // 关闭结果集  
            if (rs != null) {  
                rs.close();  
                rs = null;  
            }  
            // 关闭执行  
            if (stmt != null) {  
                stmt.close();  
                stmt = null;  
            }  
            if (connection != null) {  
                connection.close();  
                connection = null;  
            }  
        } catch (SQLException e) {  
            e.printStackTrace();  
        }  
    }        
    return resultList;  
}

<1.2>问题总结
1.数据库连接,使用时就创建,不使用时就关闭。数据库连接频繁的开启和关闭本身就造成了资源的浪费,影响系统的性能。
解决方案:可以使用数据库连接池来管理数据库的连接。

2.将sql语句硬编码到java代码中,如果sql语句需要修改,需要重新修改java代码,不利于系统维护。
解决方法:将sql语句配置在xml中。即使sql语句变化,不需要重新更改java代码。

3.在向statement设置参数时,对占位符的位置和向占位符设置的变量,硬编码在java代码中,不利于系统维护。
解决方法:将sql语句,占位符及参数全部配置在xml中。

4.从resultSet中遍历结果集数据时,存在硬编码。
System.out.println(rs.getString(“id));
解决方法:将查询结果自动映射成java对象,这样就不需要在代码中将对象写死。

带着这四点问题去学习MyBatis。

具体参考https://my.oschina.net/xianggao/blog/591482#OSC_h1_43

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值