分頁查詢
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中介紹)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/528712.html
標籤:Java
下一篇:二分查找
