JdbcTemplate是Spring對JDBC的封裝。我們可以將其理解為使用Java通過JDBC操作數據庫的固定套路寫法。使開發人員對數據庫操作只關注:
-
數據的請求(sql)
-
請求的響應(查詢返回)
一.JdbcTemplate使用步驟:
2.創建JdbcTemplate對象
// 傳入連接池對象,JdbcTemplate會自動維護連接池 JdbcTemplate jdbcTemplate = new JdbcTemplate(MyJdbcUtils.getDataSource());
// 依舊使用預編譯對象的格式 String sql = "insert into user values(null,?,?) ";
增刪改:
// 用於執行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));
在做查詢時第四種方法使用最多,需要保證實體類的屬性名稱及數據類型和數據庫表中的字段名稱類型要保持一致。當然也可以進行自行的查詢實體封裝:
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不支持
作用:
可用於獲取有關 ResultSet 對象中列的類型和屬性的信息。
ResultSetMetaData
//如何獲取 ResultSetMetaData //ResultSet.getMetaData() //int getColumnCount() //返回此 ResultSet 對象中的列數 //String getColumnName(int column) //獲取指定列的名稱 //String getColumnTypeName(int column) //獲取指定列的數據庫特定類型名稱
關注微信公眾號,隨時隨地學習