所有的持久層框架
1.jdbc--都做了封裝
2.Sql--有的做了封裝
封裝了一半的就是半自動框架。
兩樣都封裝了就是全自動框架。
前身是ibatis 、開源。
輕量級框架。
1.xml
a) 數據庫配置文件
b) 接口、實體、sql語句之間的配置關系。
2.java類、接口
SqlsessionFactory
SqlSession:封裝jdbc的連接 維護持久層到數據庫的會話。
連接池:管理連接 。 如何管理?
讀寫分離。
02--
表達式不要寫在sql語句里面,會影響查詢效率。
在mybatis映射層中 map作為參數的時候只能單獨存在。
<!-- namespace 命名空間,實際上就是相當于我們的程序中的包,
1、用于分類
2、保證命名空間內部的文件都是唯一的-->
Sql標簽 :
把相同的代碼進行封裝。
<sql id=”eg”>where user_name like concat(#{map.name},’%’) </>
在需要用到的地方使用 include標簽進行引用
Select name form t_emp <include refid=”eg”></>
動態sql:
<foreach>
</foreach>
<where>標簽會直接忽略掉緊隨其后的and或者 or。
<if>
<if test=”條件表達式 --map.name != null ”> 標簽 ---//如果傳遞的參數的map,那//么test里面的表達式只能取鍵來進行比較,不能使用#、$
user_name like concat(#{map.name},’%’) -- 滿足條件后添加sql內容
</>
<trim PRefix=”where” prefixOverides=”and|or” suffix=”order by” suffixOverides=”and|or” >標簽 在不使用where標簽的時候使用。
//prefix 前綴
//suffixOverides 后綴
user_name like concat(#{map.name},’%’)
</trim>
Id desc;
Switch
<set >標簽
<if test=’”user.name != null”> 條件語句后需要添加”,” ,如果是最后一個條件 會自動去掉”,”
User_name =#{user.name},
</>
<if test=’”user.sex!= null”>
User_name =#{user.sex},
</>
<if test=’”user.age!= null”>
User_name =#{user.age} ,
</>
</>
對象中包含對象要取值就用
對象.對象.屬性
Mybatis支持一個標簽內寫多條sql
在配置時要添加 allowMultiQuery
1.繼承 子類與父類
2.實現 接口
3.關聯
4.組合、聚合--整體與部分的關系 組合整體消亡個體隨之消亡 聚合整體消亡,個體繼續存在。
5.依賴 使用與被使用的關系
關系--在一定范圍內有效。
關聯關系。
對象包含對象時添加配置:
<association property=”屬性(javabean中對應的字段)” type=”屬性的類型” > 關聯關系是1 就是單獨的一個對象
<> 屬性1
<> 屬性2
</>
全局開啟延遲加載
<seting name =”lazyLoadingEnabled
” value=”true”>
<seting>
<association property=”屬性(javabean中對應的字段)”
javatype=”屬性的類型”
//Fetchtype=”lazy”;--延遲加載。
Select=”請求路徑.對應sql的id”
Column=”結果集里面對應的值”
>
刪除時先刪和自己有關系的。
同時執行多條sql語句的時候 ,受影的結果是最后一條語句影響的行數。
1.預加載,聯表查詢。
2.及時加載。先查自己,再查與之有關聯的數據
3.延遲加載,懶加載。使用的時候再加載。--內部實現代理模式。Fetchtype=”lazy”
<collection property=” ” javatype =”” select=”” column =””>
</>
新聞熱點
疑難解答