mybatis是什么?
mybatis是一個持久層框架,是apache下的開源項目,前身是itbatis,是一個不完全的ORM框架,mybatis提供輸入和輸出的映射,需要程序員自己寫sql語句,mybatis重點對 sql語句的靈活操作。
適合用於:需求變化頻繁, 數據模型不固定的項目,例如:互聯網項目。
mybatis架構?
SqlMapConfig.xml(名稱不固定),配置內容:數據源、事務、properties、typeAliases、settings、mapper配置。
SqlSessionFactory--會話工廠,作用是創建SqlSession,實際開發中以單例模式管理 SqlSessionFactory。
SqlSession--會話,是一個面向用戶(程序員)的接口,使用mapper代理方法開發是不需要程序員直接調用sqlSession的方法。是線程不安全,最佳適用場合方法體內。
mybatis開發dao的方法:
1、原始dao開發方法,需要程序員編寫dao接口和實現類,此方法在當前企業中還有使用,因為ibatis使用的就是原始dao開發方法。
2、mapper代理方法,程序員只需要寫mapper接口(相當於dao接口),mybatis自動根據mapper接口和mapper接口對應的statement自動生成代理對象(接口實現類對象)。
開發需要遵循規則:
1)mapper.xml中namespace是mapper接口的全限定名
2)mapper.xml中statement的id為mapper接口方法名
3)mapper.xml中statement的輸入映射類型(parameterType)和mapper接口方法輸入參數類型一致
4) mapper.xml中statement的輸出映射類型(resultType)和mapper接口方法返回結果類型一致
resultType和resultMap都可以完成輸出映射:
resultType映射要求sql查詢的列名和輸出映射pojo類型的屬性名一致
resultMap映射時對sql查詢的列名和輸出映射pojo類型的屬性名作一個對應關系。
動態sql:
#{}和${}完成輸入參數的屬性值獲取,通過OGNL獲取parameterType指定pojo的屬性名。
#{}:占位符號,好處防止sql注入
${}:sql拼接符號
if
where
foreach
springmvc框架:
用戶請求url到DispatcherServlet前端控制器,相當於中央調度器,降低系統各組件之間耦合度
DispatcherServlet前端控制器通過HandlerMapping根據url找到Handler。
DispatcherServlet前端控制器通過HandlerAdapter處理器適配器執行Handler。
DispatcherServlet前端控制器拿着Handler返回的ModelAndView通過視圖解析器ViewResolver去進行視圖解析。
視圖解析:將程序中寫的邏輯視圖名,轉成真正的視圖(springmvc通過view表示各各不同類型的視圖)。
DispatcherServlet前端控制器調用View的渲染方法進行視圖渲染(將ModelAndView中的Model放到request域)。
要掌握springmvc的注解開發,企業中常用springmvc注解開發。
使用專門注解處理器映射器(RequestMappingHandlerMapping)和處理器適配器(RequestMappingHandlerAdapter)。
<mvc:annotation-driven/>可以代替上邊的處理器映射器和適配器的配置。
在Handler(Controller)中定義很多的方法,一個方法通過RequestMapping和url進行映射。
方法返回值:ModelAndView、string(jsp的邏輯視圖名)、void(通過response將數據輸出成json)
方法輸入參數(形參):springmvc需要將請求的key/value(串,id=001&type=t002)、解析、綁定到Handler(Controller)中方法的形參上。
springmvc默認支持多類型的參數綁定。
默認支持哪些類型:
HttpServletRequest、response、session、Model(用於將數據填充到request域)
@requestParam注解:用於綁定單個請求參數,常用於簡單類型參數(Integer、String 、Float。。。)綁定。
不用 @requestParam要求請求參數的名稱和方法形參名一致方可綁定。
對於簡單類型參數中的日期型,建議使用自定義參數綁定,對日期型數據個化定義日期的格式。
自定義參數綁定:建議使用Convertor進行參數綁定。
還可以綁定pojo、包裝的pojo。