1. 程式人生 > 其它 >Mybatis分頁、註解開發以及lombok簡單使用

Mybatis分頁、註解開發以及lombok簡單使用

7、分頁

思考:為什麼要分頁?

  • 減少資料的處理量

7.1、使用Limit分頁

語法: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="User">
            select * from 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<String,Integer>();
            map.put("startIndex",1);
            map.put("pageSize",2);
            List<User> userList = mapper.getUserByLimit(map);
            for(User user : userList){
                System.out.println(user);
            }
            sqlSession.clo
              se();
        }
    

7.2、使用RowBounds分頁。

不再使用SQL實現分頁

  1. 介面

    public List<User> getUserByRowBounds();
    
  2. Mapper.xml

    <select id="getUserByRowBounds"resultMap="UserMap">
      select * from user
    </select>
    
  3. 測試

        @Test
        public void getUserByRowBounds(){
            SqlSession sqlSession = MyBatisUtils.getSqlSession();
            RowBounds rowBounds = new RowBounds(1, 2);
            List<User> userList = sqlSession.selectList("com.dogeleft.dao.UserMapper.getUserByRowBounds", null, rowBounds);
    
            for (User user :
                    userList) {
                System.out.println(user);
            }
            sqlSession.close();
        }
    

7.3、分頁外掛

瞭解即可,萬一以後公司架構師,說要使用,你需要知道它是什麼東西!

8、使用註解開發

8.1、面向介面程式設計

大家之前都學過面向物件程式設計,也學習過介面,但在真正的開發中,很多時候我們會選擇面向介面程式設計。

**根本原因: **

解耦可拓展,提高複用,分層開發中,上層不用管具體的實現,大家都遵守共同的標準,使得開發變得容易,規範性更好

在一個面向物件的系統中,系統的各種功能是由許許多多的不同物件協作完成的。在這種情況下,各個物件內部是如何實現自己的,對系統設計人員來講就不那麼重要了。

而各個物件之間的協作關係則成為系統設計的關鍵。小到不同類之間的通訊,大到各模組之間的互動,在系統設計之初都是要著重考慮的,這也是系統設計的主要工作內容。面向介面程式設計就是指按照這種思想來程式設計。

關於介面的理解

  • 介面從更深層次的理解,應是定義(規範,約束)與實現(名實分離的原則)的分離
  • 介面的本身反應了系統設計人員對系統的抽象理解。
  • 介面應有兩類:
    • 第一類是對一個個體的抽象,它可對應為一個抽象體(abstract class)
    • 第二類是對一個個題某一方面的抽象,即形成一個抽象面(interface)
  • 一個個體有可能有多個抽象面。抽象體與抽象面是有區別的

三個面向區別

  • 面向物件是指,我們考慮問題時,以物件為單位,考慮它的屬性及方法。
  • 面向過程是指,我們考慮問題時,以一個具體的流程(事務過程)為單位,考慮它的實現。
  • 介面設計與非介面設計是針對複用技術而言的,與面向物件(過程)不是一個問題。更多的體現就是對系統整體的架構

8.2、使用註解開發

  1. 介面

        @Select("select * from user")
        List<User> getUsers();
    
  2. 核心配置檔案新增對映到這個介面

        <mappers>
            <mapper class="com.dogeleft.dao.UserMapper"/>
        </mappers>
    
  3. 測試

        @Test
        public void getUsers(){
            SqlSession sqlSession = MyBatisUtils.getSqlSession();
    
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            for (User user : mapper.getUsers()) {
                System.out.println(user);
            }
    
    
            sqlSession.close();
        }
    

本質:反射機制實現

底層:動態代理!

Mybatis詳細執行流程!

~

8.3、CRUD

我們可以在工具類建立的時候實現自動提交事務!

    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession(true);// 自動提交事務
    }

寫介面及其註解


測試類

【注意我們必須要將介面註冊繫結到我們的核心配置檔案中】

關於@Param()註解

  • 基本型別的引數或者String型別,需要加上
  • 引用型別不需要加
  • 如果只有一個基本型別,可以忽略,但是建議大家加上
  • 我們在SQL中引用的就是我們這裡@Param()中設定的屬性名!

#{} ${}的區別,一個預編譯,一個可能造成拼接。

推薦使用#。

9、Lombok

什麼是?

  • Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java.
  • Never write another getter or equals method again, with one annotation your class has a fully featured builder, Automate your logging variables, and much more.
@Getter and @Setter
@NonNull
@ToString
@EqualsAndHashCode
@Data
@Cleanup
@Synchronized
@SneakyThrows

說明:

@Data:無參構造、getter、setter

@Data:無參構造、getter、setter、toString、hashcode、equals
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode
@ToString

怎麼用?

  1. 在IDEA中安裝Lombok外掛!

    Plugins-->查lombok

  2. 在專案匯入lombok的jar包

    在maven中新增

  3. 在實體類中添加註解

如上

什麼時候用它?

就是個簡化了程式碼的外掛。如果團隊需要用到,再使用叭。