分頁查詢 1、分頁查詢的好處 MyBatis作為持久層框架,主要任務就是操作資料庫,即是對數據的增、刪、查、改,其中大多數業務是查詢功能,這也是這四個操作中最常用操作。所以為了減少資料庫的負擔,我們使用對數據進行分頁查詢,這樣的話在面對查詢大量數據時,每次只需要查詢小部分數據,隨之查詢的次數隨增加了 ...
分頁查詢
1、分頁查詢的好處
MyBatis作為持久層框架,主要任務就是操作資料庫,即是對數據的增、刪、查、改,其中大多數業務是查詢功能,這也是這四個操作中最常用操作。所以為了減少資料庫的負擔,我們使用對數據進行分頁查詢,這樣的話在面對查詢大量數據時,每次只需要查詢小部分數據,隨之查詢的次數隨增加了。
2、使用分頁的方式
第一種(常用):使用LIMIT
通用語法:
select * from [表名] limit stratIndex,pageSize;
stratIndex:開始下標
pageSize:一頁的大小
如:select * from stu limit 5,10;
表示:查詢表中的第6個數據,保存10條記錄
特殊語法
- select * from [表名] limit startIndex,-1;
stratIndex:開始下標
-1:表示查詢到最後一條數據結束
如:select * from stu limit 15,-1;
表示:查詢表中數據從第16個數據開始到表中最後一條數據為止
- select * from [表名] limit 0,pageSize;
0:從表中第一條數據開始查詢
pageSize:一頁的大小
如:select * from stu limit 5;
表示:查詢表中前5條記錄
3、使用分頁的例子
- StuMapper1介面
/** * 分頁查詢 * @param map 傳入分頁中的stratIndex,pageSize參數(使用map傳入比較方便) * @return 返回查詢的結果 */ List<Stu1> selectLimit1(Map<String,Object> map);
- StuMapper1.xml文件
<mapper namespace="com.dao.StuMapper1"> <select id="selectLimit1" parameterType="map" resultType="stu1"> select * from stu limit #{stratIndex},#{pageSize}; </select> </mapper>
- 在核心配置文件中註冊mapper
<mappers> <mapper resource="com/dao/StuMapper1.xml"/> </mappers>
- 測試
@Test public void test01(){ SqlSession sqlSession = MybatisUntils.getSqlSession(); StuMapper1 mapper = sqlSession.getMapper(StuMapper1.class); Map<String,Object> map = new HashMap<>(); map.put("stratIndex",0); map.put("pageSize",1); List<Stu1> stus = mapper.selectLimit1(map); for (Stu1 stu:stus) { System.out.println(stu); } sqlSession.close(); }
對於上面傳參是Map集合---------萬能Map集合
上面的StuMapper介面也可以寫為
List<Stu1> selectLimit(int stratIndex,int pageSize)
當有多個參數的時候,可以嘗試著使用Map集合作為參數,如果參數比較少的話,直接傳參即可
resultMap標簽的簡單使用
1、為什麼使用<resultMap>
答:當實體類中的屬性名和表中的欄位名不一致時需要使用resultMap,使用它的目的是為了映射(描述)實體類中的屬性名和表中欄位名的關係
2、例子:當實體類中的屬性名和表中欄位不一致時會出現的問題:
- 表中欄位:
- 實體類中屬性:關註屬性password
@Alias("stu1") @Data public class Stu1 { private int sno; private String sname; private int sage; private String saddress; private String password;//在表中的欄位是spwd,與表中的欄位不一致 }
- 查詢所有學生信息
StuMapper1介面
List<Stu1> selectAll();
StuMapper.xml文件
<select id="selectAll" resultType="stu1"> select * from stu </select>
- 測試結果
@Test public void test02(){ SqlSession sqlSession = MybatisUntils.getSqlSession(); StuMapper1 mapper = sqlSession.getMapper(StuMapper1.class); List<Stu1> stus = mapper.selectAll(); for (Stu1 stu:stus) { System.out.println(stu); } sqlSession.close(); }
這種結果明顯和我們想要的結果是不一樣的,出現這種結果的原因:
在執行select * from stu語句時,會查詢得到資料庫中的學生信息結果集,然後將得到的學生信息結果集 找到對應的實體類,通過對應的set方法把結果集來賦值給類中的屬性,然而這裡只有setPassword(),找不到對應的setSpwd()所以password為null。
3、解決方案有二種
第一種:自動映射(在SQL映射語句使用as)
<select id="selectAll" resultType="stu1"> select sno,sname,sage,saddress,spwd as password from stu </select>
as:給表中欄位起別名,即將表中的欄位名起別名為java實體類中的屬性名,
第二種:手動映射(使用resultMap)(推薦使用)
<select id="selectAll" resultMap="stuResult"> select * from stu </select> <resultMap id="stuResult" type="stu1"> <id property="sno" column="sno"/> <result property="sname" column="sname"/> <result property="sage" column="sage"/> <result property="saddress" column="saddress"/> <result property="password" column="spwd"/> </resultMap>
主要就是用<resultMap>來描述類中的屬性名和資料庫表中欄位名之間的關係即可。若是自動映射和手動映射一起使用,則先是自動映射再是手動映射。
resultMap的簡單介紹
1、概述
- resultMap是mybatis最重要最強大的元素,它可以讓你從90%的JDBC ResultSets結果集數據提取數據代碼中解放出來,而且它可以完成一些操作是JDBC不支持的操作。當編寫一些比較複雜SQL映射語句代碼時(如:多表聯繫查詢),一份resultMap可以實現同功能的數長達千行代碼。
- resultMap設計思想:簡單的SQL映射語句不需要用到resultMap,複雜的SQL映射語句只需要通過resultMap來描述他們之間的關係即可
2、resultMap中的屬性
id屬性:唯一標識,它的值==如<select>、<insert>、<update>、<delete>.......中resultMap屬性值
type屬性:是id值代表的類型(通常都是javaBean類型)
3、resultMap的子標簽
每個子標簽中都有property、column屬性,其中property是用來描述實體類中的屬性,column是用來描述資料庫表中的欄位(列)名,這兩個屬性完成了實體類與表之間的關係映射。
<id>:用來描述資料庫表中主鍵。
<result>:用來描述資料庫中非主鍵。
這隻是resultMap中簡單介紹,在後面中會出現一對多,多對一的情況,那時候那就是更複雜的SQL映射語句了,需要用到resultMap,當然那時候並不是這麼簡單的使用resultMap。(在MyBatis筆記6中介紹)