mybatis框架(01)

1、框架原理
sqlMapConfig.xml:(是mybatis的全局配置文件,名稱不固定的)配置了數據源、事務等mybatis運行環境
mapper.xml:配置sql語句
SqlSessionFactory:(會話工廠),根據配置文件建立工廠做用:建立SqlSession
SqlSession(會話),是一個接口,面向用戶(程序員)的接口做用:操做數據庫(發出sql增、刪、改、查)
Executor(執行器),是一個接口(基本執行器、緩存執行器)做用:SqlSession內部經過執行器操做數據庫
mapped statement(底層封裝對象)做用:對操做數據庫存儲封裝,包括 sql語句,輸入參數、輸出結果類型。java

2、傳統JDBC開發mysql

// 數據庫鏈接
        Connection connection = null;
        // 預編譯的Statement,使用預編譯的Statement提升數據庫性能
        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, "xx");
            // 向數據庫發出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) {
                    e.printStackTrace();
                }
            }
            if (preparedStatement != null) {
                try {
                    preparedStatement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

        }

這段代碼中充斥着硬編碼。
存在的問題大概分爲這麼幾種:
第一:對數據鏈接對象的使用,須要的時候就用,不須要的時候就關閉,這種頻繁的操做數據庫鏈接是一件很浪費資源的事情。
第二:sql語句編寫在java代碼中,當後期須要維護和修改sql那麼這個.java文件須要從新編譯。維護成本很高
第三:preparedStatement中設置參數,對佔位符號位置和設置參數值,硬編碼在java代碼中,不利於系統維護。
第四:遍歷結果集,我相信使用過結果集的人,會對這邊的狀況非常頭疼尤爲是查詢的字段不少的時候,一不留神字符串寫錯,那麼數據就取不到了。程序員

相關文章
相關標籤/搜索