mybatis學習筆記(1)-對原生jdbc程序中的問題總結

mybatis學習筆記(1)-對原生jdbc程序中的問題總結

標籤:mybatisjava


[TOC]mysql


本文總結jdbc編程的通常步驟,總結這樣編程存在的問題,並附上典型地jdbc示例demogit

jdbc編程步驟

  1. 加載數據庫驅動
  2. 建立並獲取數據庫連接
  3. 建立jdbc statement對象
  4. 設置sql語句
  5. 設置sql語句中的參數(使用preparedStatement)
  6. 經過statement執行sql並獲取結果
  7. 對sql執行結果進行解析處理
  8. 釋放資源(resultSet、preparedstatement、connection)

問題總結

1.數據庫鏈接,使用時就建立,不使用當即釋放,對數據庫進行頻繁鏈接開啓和關閉,形成數據庫資源浪費,影響數據庫性能。github

設想:使用數據庫鏈接池管理數據庫鏈接。sql

2.將sql語句硬編碼到java代碼中,若是sql語句修改,須要從新編譯java代碼,不利於系統維護。數據庫

設想:將sql語句配置在xml配置文件中,即便sql變化,不須要對java代碼進行從新編譯。編程

3.向preparedStatement中設置參數,對佔位符號位置和設置參數值,硬編碼在java代碼中,不利於系統維護。mybatis

設想:將sql語句及佔位符號和參數所有配置在xml中。性能

4.從resutSet中遍歷結果集數據時,存在硬編碼,將獲取表的字段進行硬編碼,不利於系統維護。學習

設想:將查詢的結果集,自動映射成java對象。

參考代碼

package com.iot.mybatis.jdbc;

//import java.sql.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * Created by Administrator on 2016/2/21.
 */
public class JdbcTest {
    public static void main(String[] args) {
        //數據庫鏈接
        Connection connection = null;
        //預編譯的Statement,使用預編譯的Statement提升數據庫性能
        PreparedStatement preparedStatement = null;
        //結果集
        ResultSet resultSet = null;

        try {
            //加載數據庫驅動
            Class.forName("com.mysql.jdbc.Driver");

            //經過驅動管理類獲取數據庫連接
            connection =  DriverManager.getConnection("jdbc:mysql://120.25.162.238:3306/mybatis001?characterEncoding=utf-8", "root", "123");
            //定義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();
                }
            }

        }

    }

}

做者@brianway更多文章:我的網站 | CSDN | oschina

相關文章
相關標籤/搜索