JdbcTemplate:Jdbc模板和數據庫元數據


  通過 Jdbc 、C3P0 、Druid 的使用我們會發現即使我們做了工具的封裝,但重復性的代碼依舊很多。我們可以通過 JdbcTemplate 即 Jdbc 模板來使我們的代碼更加簡潔,邏輯更加清晰。 JdbcTemplate是Spring對JDBC的封裝。我們可以將其理解為使用Java通過JDBC操作數據庫的固定套路寫法。使開發人員對數據庫操作只關注:

  1. 數據的請求(sql)

  2. 請求的響應(查詢返回)


 

一.JdbcTemplate使用步驟:

1.導入Jar包

2.創建JdbcTemplate對象

// 傳入連接池對象,JdbcTemplate會自動維護連接池
JdbcTemplate jdbcTemplate = 
    new JdbcTemplate(MyJdbcUtils.getDataSource());

3.編寫sql語句

// 依舊使用預編譯對象的格式
String sql = "insert into user values(null,?,?) ";

4.執行並返回結果

增刪改:

//  用於執行INSERT、UPDATE、DELETE等DML語句
//  sql: 要執行的sql語句
//  args: sql執行時需要的參數|數組
public int update(final String sql,Object... args)

查詢:

//1.queryForObject返回一個指定類型**
String sql = "select pname from product where id = ?";
String pname = template.queryForObject(sql, String.class, 3);
//2.queryForMap返回一個Map集合對象
String sql = "select * from product where id = ?";
Map<String, Object> map = template.queryForMap(sql, 4);
//3.queryForList返回一個List集合對象,集合對象存儲Map類型數據
String sql = "select * from product where id in (3,4)";
List<Map<String, Object>> list = template.queryForList(sql,3,4);
//4. query使用BeanPropertyRowMapper做映射返回對象
String sql = "select * from product where id = ? ";
Product product = template.queryForObject
(sql, new BeanPropertyRowMapper<>(Product.class), 4);
// 上面為單條記錄(對象實體)   下面為多條記錄(對象實體)
String sql = "select * from product";        
List<Product> list = jdbcTemplate.query
(sql, new BeanPropertyRowMapper<>(Product.class));

Tips:

在做查詢時第四種方法使用最多,需要保證實體類的屬性名稱及數據類型和數據庫表中的字段名稱類型要保持一致。當然也可以進行自行的查詢實體封裝:

String sql = "select * from product ";
// 執行sql並接收結果集  參數1: sql語句
// 參數2: rowMapper: 本條記錄,自行封裝
List<Product> list = template.query(sql, new RowMapper<Product>(){
 @Override  // resultSet: 被遍歷到的本條記錄 i: 索引值
 public Product mapRow(ResultSet rs, int i)throws SQLException{
     Product pro = new Product();
     pro.setId(rs.getInt("id"));
     pro.setPname(rs.getString("pname"));
     pro.setPrice(rs.getDouble("price"));
     return pro;
 }
});

二.數據庫元數據:

元數據:數據庫、表、列的定義信息。

ParameterMetaData

作用:

獲取PreparedStatement所編譯的sql語句中 ? 的個數和類型

String sql = "select * 
from user where username = ? and password = ? ";
PreparedStatement pst = conn.PrepareStatement(sql);

API

PreparedStatement. getParameterMetaData(); 
//int getParameterCount() 
//獲取PreparedStatement的SQL語句參數?的個數
//int getParameterType(int param) 
//獲取指定參數的SQL類型。
//不是所有的數據庫都支持,mysql不支持

ResultSetMetaData

作用:

可用於獲取有關 ResultSet 對象中列的類型和屬性的信息。

ResultSetMetaData

//如何獲取 ResultSetMetaData
//ResultSet.getMetaData()
//int getColumnCount() 
//返回此 ResultSet 對象中的列數
//String getColumnName(int column) 
//獲取指定列的名稱
//String getColumnTypeName(int column) 
//獲取指定列的數據庫特定類型名稱

 

關注微信公眾號,隨時隨地學習

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM