高頻面試題:#{}和${}區別

如果對java中的JDBC瞭解了,想要明白#{}和${}的區別,相對來說就很簡單,下面貼出來對jdbc步驟,有興趣的可以看下,或者直接跳過:

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();
           }
       }
    }
}

#{}表示一個佔位符號(相當於jdbc的?),通過#{}可以實現preparedStatement向佔位符中設置值,自動進行java類型和jdbc類型轉換。#{}可以有效防止sql注入。 #{}可以接收簡單類型值或pojo屬性值。 如果parameterType傳輸單個簡單類型值,#{}括號中可以是value或其它名稱。

${}表示拼接sql串,通過${}可以將parameterType 傳入的內容拼接在sql中且不進行jdbc類型轉換, ${}可以接收簡單類型值或pojo屬性值,如果parameterType傳輸單個簡單類型值,${}括號中只能是value。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章