Mybatis框架基礎-03
1.分頁
分頁的目的:減少資料的處理量
用Mybatis實現分頁
- 介面
//分頁查詢
List<student> getstuBylimit(Map<String,Integer> map);
- Mapper.Xml
<!--分頁查詢-->
<select id="getstuBylimit" parameterType="map" resultType="com.wang.pojo.student">
select * from student limit #{startindex},#{pagesize};
</select>
- 測試
@Test
public void getlimit(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
StuMapper mapper = sqlSession.getMapper(StuMapper.class);
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("startindex",2);
map.put("pagesize",2);
List<student> students = mapper.getstuBylimit(map);
for (student student : students) {
System.out.println(student);
}
}
核心就是實現limit查詢
2.使用註解開發
- 在mybatis的核心配置檔案中mapper的註冊可以解綁,改為繫結介面類
<mappers>
<mapper class="com.wang.dao.StuMapper"></mapper>
</mappers>
- 介面註解
//註解開發
@Select("select * from student")
List<student> getstu();
- 測試
@Test
public void getlimit(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
StuMapper mapper = sqlSession.getMapper(StuMapper.class);
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("startindex",2);
map.put("pagesize",2);
List<student> students = mapper.getstuBylimit(map);
for (student student : students) {
System.out.println(student);
}
}
- 使用註解開發時,若介面的方法中含有多個引數則每個引數前面必須加上@Param註解
- 在註解sql中取到的引數是根據@Param來獲取的,xml方式同樣!!
- @Param註解,若引數是基本資料型別需要加上,引用資料型別則不需要加上,如果只有一個就基本型別的話,可以忽略
3. 建立複雜的查詢環境
1. 多對一模式
使用巢狀查詢
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.wang.dao.StudentMapper">
<select id="getStudent" resultMap="StudentTeacher">
select * from student;
</select>
<resultMap id="StudentTeacher" type="Student">
<result property="id" column="id"/>
<result property="name" column="name"/>
<!-- 複雜的屬性單獨處理-->
<!-- 物件用association,集合用collection-->
<association property="teacher" column="id" javaType="Teacher" select="getTeacher"/>
</resultMap>
<select id="getTeacher" resultType="Teacher">
select * from teacher where id = #{id};
</select>
</mapper>
按照結果集查詢 可以寫直接的sql語句,之後將屬性一一對應即可
<select id="getStudent" resultMap="StudentTeacher">
select * from teacher,student where student.id = teacher.id;
</select>
<resultMap id="StudentTeacher" type="Student">
<result property="id" column="sid"/>
<result property="name" column="name"/>
<association property="teacher" javaType="Teacher">
<result property="id" column="tid"></result>
</association>
</resultMap>
2.一對多模式
小結
- 關聯 -association 多對一
- 集合 collection 一對多
- Javatype or oftype
- javatype 用來指定實體類中的型別
- oftype 用來指定泛型的約束型別
4. 動態SQL
這個特性是解決sql語句拼接時造成的麻煩
1. if標籤
<select id="if" parameterType="map">
select * from student where
<if test="title != null">
title = #{title}
</if>
</select>
2. choose標籤 (類似於switch標籤 )
<select id="choose" parameterType="map">
select * from student
<where>
<choose>
<when test="title != null">
title = #{title}
</when>
<when test="author != null">
and author = #{author}
</when>
<otherwise>
and views = #{views}
</otherwise>
</choose>
</where>
</select>
更新時用set’標籤
3. sql標籤
是把sql語句單獨寫在一起,然後通過include標籤 引入
sql標籤裡不能存在where標籤
<sql id="if-t-a">
<if test="title != null">
title = #{title}
</if>
<if test="author != null">
and author = #{author}
</if>
</sql>
<select id="if" parameterType="map">
select * from student
<where>
<include refid="if-t-a"></include>
</where>
</select>
4. Foreach標籤(對集合遍歷)
拼接
select * from student where 1=1 and (id= 1 or id= 2 or id =3)
<select id="foreach" parameterType="map" resultMap="blog">
select * from student
<where>
<foreach collection="ids" item="id" open="and (" close=")" separator="or">
id = #{id}
</foreach>
</where>
</select>
- collection 是集合名稱
- item 是每一個元素的名稱
- open :是拼接的開始
- close:拼接的結束
- separator:分隔符
- 測試的時候先建立一個map,在建立一個list加入map裡面
- colection中的值是key 需要用集合list來接收,從list中add值來遍歷
小結
- 動態sql就是根據不同的條件生成不同的sql語句
和編碼一樣,因為有標籤的存在,更具有邏輯性和可讀性!! - 建議先寫好sql語句再去拼接
5.快取
1. 一級快取 :基於SqlSession
- 也叫本地快取:SqlSession 預設情況下開啟了一級快取
2.二級快取: 基於Mapper
- 需要手動開啟,顯示開啟全域性快取
<setting name="cacheEnable" value="true"/>
在mapper.xml中使用二級快取
也可以自定義引數
<cache/>
3.自定義快取
Ehcache
- 導包
<dependency>
<groupId>org.mybatis.caches</groupId>
<artifactId>mybatis-ehcache</artifactId>
<version>1.2.1</version>
</dependency>
- 在mapper.xml中配置
<cache type="org.mybatis.caches.ehcache.EhcacheCache"></cache>
小結
- 快取順序
二級快取 —》 一級快取 —》 資料庫
相關文章
- MyBatis 框架系列之基礎初識MyBatis框架
- mybatis基礎03(介面中的多個引數處理)MyBatis
- 03 shell基礎
- 03 - Python 基礎Python
- mybatis----基礎MyBatis
- MyBatis基礎:MyBatis快取(5)MyBatis快取
- MyBatis基礎:MyBatis入門(1)MyBatis
- Python基礎03 序列Python
- Python基礎(03):列表Python
- MyBatis基礎:MyBatis動態SQL(3)MyBatisSQL
- Mybatis的基礎配置MyBatis
- mybatis的基礎搭建MyBatis
- mybatis基礎之一MyBatis
- mybatis基礎之二MyBatis
- Mybatis基礎知識MyBatis
- MyBatis-03(CRUD)MyBatis
- MyBatis-03-environmentMyBatis
- MyBatis基礎:MyBatis關聯查詢(4)MyBatis
- MyBatis基礎:MyBatis資料基本操作(2)MyBatis
- Docker_03 映象-基礎操作Docker
- Mybatis 基礎xml對映MyBatisXML
- MyBatis入門基礎(一)MyBatis
- MyBatis基礎:MyBatis呼叫儲存過程(6)MyBatis儲存過程
- vue 基礎入門筆記 03Vue筆記
- Java EE之旅03 JS基礎(上)JavaJS
- Python基礎教程03 - 序列 (sequence)Python
- 【Java基礎】03選擇結構Java
- EF框架基礎框架
- PHP快速上手(03):PHP語言基礎PHP
- PHP基礎教程-03 搭建PHP環境PHP
- Python 快速教程(基礎篇03):序列Python
- drf之框架基礎框架
- Java基礎-集合框架Java框架
- MyBatis 基礎搭建及架構概述MyBatis架構
- 關於mybatis,需要掌握的基礎MyBatis
- mybatis入門基礎(九)----逆向工程MyBatis
- Mybatis框架MyBatis框架
- 03 . Vue基礎之計算屬性,元件基礎定義和使用Vue元件