Mybatis分頁+使用注解開發!


7.1、使用Limit分頁(20-12-21)

語法:SELECT * from user limit startIndex,pageSize;
SELECT * from user limit 3;	#[0,n]

使用Mybatis實現分頁,核心SQL

  1. 接口

    //分頁
    List<User> getUserByLimit(Map<String,Integer> map);
    
  2. Mapper.xml

    <select id="getUserByLimit" parameterType="map" resultMap="UserMap">
       select * from mybatis.user limit #{startIndex},#{pageSize}
    </select>
    <!--使用結果集映射-->
    
  3. 測試

        @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實現分頁

  1. 接口

    //分頁2
    List<User> getUserByRowBounds();
    
  2. mapper.xml

    <!--分頁2-->
    <select id="getUserByRowBounds" resultMap="UserMap">
    	select * from mybatis.user
    </select>
    
  3. 測試

    @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、使用注解開發

  1. 注解在接口上實現

    @Select("select * from user ")
    List<User> getUsers();
    
  2. 需要在核心配置文件中綁定接口!

    <!--綁定接口-->
    <mappers>
        <mapper class="com.kuang.dao.UserMapper"/>
    </mappers>
    
  3. 測試

    @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詳細的執行流程!


免責聲明!

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



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