通過 Jdbc ,、C3P0 ,、Druid 的使用我們會(huì)發(fā)現(xiàn)即使我們做了工具的封裝,,但重復(fù)性的代碼依舊很多。今天我們通過 JdbcTemplate 即 Jdbc 模板來使我們的代碼更加簡潔,,邏輯更加清晰,。 JdbcTemplate是Spring對JDBC的封裝。我們可以將其理解為使用Java通過JDBC操作數(shù)據(jù)庫的固定套路寫法。使開發(fā)人員對數(shù)據(jù)庫操作只關(guān)注: 數(shù)據(jù)的請求(sql),。 請求的響應(yīng)(查詢返回),。 JdbcTemplate使用步驟:
1.導(dǎo)入Jar包2.創(chuàng)建JdbcTemplate對象 // 傳入連接池對象,,JdbcTemplate會(huì)自動(dòng)維護(hù)連接池 JdbcTemplate jdbcTemplate = new JdbcTemplate(MyJdbcUtils.getDataSource()),;3.編寫sql語句 // 依舊使用預(yù)編譯對象的格式 String sql = "insert into user values(null,?,?) ";4.執(zhí)行并返回結(jié)果增刪改: // 用于執(zhí)行INSERT,、UPDATE,、DELETE等DML語句 // sql: 要執(zhí)行的sql語句 // args: sql執(zhí)行時(shí)需要的參數(shù)|數(shù)組 public int update(final String sql,Object... args)查詢: //1.queryForObject返回一個(gè)指定類型** String sql = "select pname from product where id = ?"; String pname = template.queryForObject(sql, String.class, 3),; //2.queryForMap返回一個(gè)Map集合對象 String sql = "select * from product where id = ?",; Map<String, Object> map = template.queryForMap(sql, 4); //3.queryForList返回一個(gè)List集合對象,,集合對象存儲(chǔ)Map類型數(shù)據(jù) 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); // 上面為單條記錄(對象實(shí)體) 下面為多條記錄(對象實(shí)體) String sql = "select * from product"; List<Product> list = jdbcTemplate.query (sql, new BeanPropertyRowMapper<>(Product.class));Tips:在做查詢時(shí)第四種方法使用最多,需要保證實(shí)體類的屬性名稱及數(shù)據(jù)類型和數(shù)據(jù)庫表中的字段名稱類型要保持一致,。當(dāng)然也可以進(jìn)行自行的查詢實(shí)體封裝: String sql = "select * from product "; // 執(zhí)行sql并接收結(jié)果集 參數(shù)1: sql語句 // 參數(shù)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; } });數(shù)據(jù)庫元數(shù)據(jù):
元數(shù)據(jù):數(shù)據(jù)庫,、表、列的定義信息,。 ParameterMetaData作用:獲取PreparedStatement所編譯的sql語句中 ? 的個(gè)數(shù)和類型 String sql = "select * from user where username = ? and password = ? "; PreparedStatement pst = conn.PrepareStatement(sql);API PreparedStatement. getParameterMetaData(); //int getParameterCount() //獲取PreparedStatement的SQL語句參數(shù),?的個(gè)數(shù) //int getParameterType(int param) //獲取指定參數(shù)的SQL類型。 //不是所有的數(shù)據(jù)庫都支持,mysql不支持ResultSetMetaData作用:可用于獲取有關(guān) ResultSet 對象中列的類型和屬性的信息,。 ResultSetMetaData //如何獲取 ResultSetMetaData //ResultSet.getMetaData() //int getColumnCount() //返回此 ResultSet 對象中的列數(shù) //String getColumnName(int column) //獲取指定列的名稱 //String getColumnTypeName(int column) //獲取指定列的數(shù)據(jù)庫特定類型名稱
|