本文是對慕課網上"搞定SSM開發"路徑的系列課程的總結,詳細的項目文檔和課程總結放在github上了.點擊查看java
//sql: String sql = "select * from user"; //加載驅動: Class.forName("com.mysql.jdbc.Driver"); //根據參數建立鏈接 Connection conn = DriverManager.getConnection(url,username,password); //建立PreparedStatement PreparedStatement statement = conn.prepareStatement(sql); //執行sql,並使用resultSet接收結果 ResultSet rs = statement.executeQuery(); //將rs裏的全部值取出來 try{ while(rs.next()){ String ... = rs.getString(1)/rs.getString("userName"); //從結果中根據列名或者列的序號取值. } }catch(SqlException ex){ }finally{ //必需要手動釋放鏈接 conn.close(); } //
以上便是一個簡單的jdbc查詢數據庫的寫法.
有什麼問題呢?
第一是sql的寫法,若是sql過長,參數過多,拼接起來很麻煩,不直觀,而且sql很難查看;
第二是Connectione的建立和銷燬須要手動控制,而這些應該是業務無關代碼.mysql
ORM框架是一種數據操做的框架,常見的好比JDBC,Hibernate,固然,Mybatis也是其中的一種.
相比於JDBC,Mybatis的優點在於能將Sql集中配置;而且能和Spring集成;將connection交給Spring託管,不須要開發者本身操做;同時也能方便進行AOP的開發.
而和hibernate對比,Mybatis則比較容易學,沒有hibernate那麼高的門檻.git
//經過配置文件獲取數據庫鏈接信息 Reader reader = Resources.getResourceAsReader("com/chentao/MicroMessage/config/mybatis-config.xml"); //經過配置信息構建一個SqlSessionFactory SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader); //經過sqlsessionfactory打開session SqlSession sqlSession = sessionFactory.openSession(); return sqlSession;
經過namespace的包名和相應接口的包名與類名進行匹配,能夠經過調用接口的方法直接使用sql的邏輯.
mybatis實現這一特性的方法是動態代理.github
根據每頁的條數,和須要查詢的頁數能夠加載整個頁面的數據;
簡單邏輯是從數據庫拿到總條數,而後計算出總頁數,而後經過數據查詢出第n到m條數據,使用limit關鍵字(mysql中)便可以拿到須要查詢的數據.sql
1:實現mybatis的Inteceptor接口
在實現類上使用註解:Intercepts來定義須要攔截哪一種類型的方法.
實現plugin方法和intercept方法;數據庫
2:在plugin中根據註解和傳進來的對象肯定是否攔截該對象.編程
3:在intercept方法中肯定是否攔截對應方法,並拿到其中參數,包括sql,增長本身的邏輯.session
4:在intercept方法中,使用invocaiton.proceed來調用原來的邏輯.mybatis
經過攔截器實現分頁是比較常見的場景.app