7.1、使用Limit分頁(20-12-21)
語法:SELECT * from user limit startIndex,pageSize;
SELECT * from user limit 3; #[0,n]
使用Mybatis實現分頁,核心SQL
-
接口
//分頁 List<User> getUserByLimit(Map<String,Integer> map);
-
Mapper.xml
<select id="getUserByLimit" parameterType="map" resultMap="UserMap"> select * from mybatis.user limit #{startIndex},#{pageSize} </select> <!--使用結果集映射-->
-
測試
@Test public void getUserByLimit(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); HashMap<String, Integer> map = new HashMap<>(); map.put("startIndex",1); map.put("pageSize",3); List<User> userList = mapper.getUserByLimit(map); for (User user : userList) { System.out.println(user); } sqlSession.close(); }
7.2、RowBounds分頁
不再使用SQL實現分頁
-
接口
//分頁2 List<User> getUserByRowBounds();
-
mapper.xml
<!--分頁2--> <select id="getUserByRowBounds" resultMap="UserMap"> select * from mybatis.user </select>
-
測試
@Test public void getUserByRowBounds(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); //RowBounds實現 RowBounds rowBounds = new RowBounds(0, 2); //通過Java代碼層面實現分頁 List<User> userList = sqlSession.selectList("com.kuang.dao.UserMapper.getUserByRowBounds", null, rowBounds); for (User user : userList) { System.out.println(user); } sqlSession.close(); }
7.3、分頁插件
MyBatis 分頁插件
PageHelper
8、使用注解開發
8.1、面向接口編程
- 大家之前都學過面向對象編程,也學習過接口,但在真正的開發中,很多時候我們會選擇面向接口編程
- 根本原因 : 解耦 , 可拓展 , 提高復用 , 分層開發中 , 上層不用管具體的實現 , 大家都遵守共同的標准 , 使得開發變得容易 , 規范性更好
- 在一個面向對象的系統中,系統的各種功能是由許許多多的不同對象協作完成的。在這種情況下,各個對象內部是如何實現自己的,對系統設計人員來講就不那么重要了;
- 而各個對象之間的協作關系則成為系統設計的關鍵。小到不同類之間的通信,大到各模塊之間的交互,在系統設計之初都是要着重考慮的,這也是系統設計的主要工作內容。面向接口編程就是指按照這種思想來編程。
關於接口的理解
- 接口從更深層次的理解,應是定義(規范,約束)與實現(名實分離的原則)的分離。
- 接口的本身反映了系統設計人員對系統的抽象理解。
- 接口應有兩類:
-
- 第一類是對一個個體的抽象,它可對應為一個抽象體(abstract class);
- 第二類是對一個個體某一方面的抽象,即形成一個抽象面(interface);
- 一個體有可能有多個抽象面。抽象體與抽象面是有區別的。
三個面向區別
- 面向對象是指,我們考慮問題時,以對象為單位,考慮它的屬性及方法 .
- 面向過程是指,我們考慮問題時,以一個具體的流程(事務過程)為單位,考慮它的實現 .
- 接口設計與非接口設計是針對復用技術而言的,與面向對象(過程)不是一個問題.更多的體現就是對系統整體的架構
8.2、使用注解開發
-
注解在接口上實現
@Select("select * from user ") List<User> getUsers();
-
需要在核心配置文件中綁定接口!
<!--綁定接口--> <mappers> <mapper class="com.kuang.dao.UserMapper"/> </mappers>
-
測試
@Test public void test(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); //底層主要應用反射 UserMapper mapper = sqlSession.getMapper(UserMapper.class); List<User> users = mapper.getUsers(); for (User user : users) { System.out.println(user); } sqlSession.close(); }
本質:反射機制實現!
底層:動態代理!
Mybatis詳細的執行流程!