最近,再找工做,仍是一個菜鳥的我,感受找個工做仍是比較困難,一個契機,公司給發了一個面試題,以下java
這也讓我對Mybatis
有了一個入門的瞭解git
上述Demo地址github
Mybatis
簡介官網對Mybatis
的介紹:面試
MyBatis
是支持定製化 SQL
、存儲過程以及高級映射的優秀的持久層框架。MyBatis
避免了幾乎全部的 JDBC
代碼和手工設置參數以及抽取結果集。MyBatis
使用簡單的 XML
或註解來配置和映射基本體,將接口和 Java
的 POJOs
(Plain Old Java Objects
,普通的 Java
對象)映射成數據庫中的記錄。數據庫
官網地址mybatis
提到Mybatis
就會想到Hibernate
;
Hibernate
與Mybatis
又有什麼區別呢!
Hibernate
與Mybatis
區別1. mybatis
自己就很小且簡單,即學即用,比較靈活app
2. 能夠進行更爲細緻的SQL
優化,能夠減小查詢字段(不須要使用JsonView
)。框架
3. 編寫SQL
語句時工做量很大,尤爲是字段多、關聯表多時,更是如此。
4. 不太容易適應快速數據庫修改,對SQL
語句編寫能力要求高學習
5. SQL
語句依賴於數據庫,致使數據庫移植性差,不能更換數據庫。優化
1. 功能強大,數據庫無關性好,開發速度很快,效率高。
2. Hibernate
能夠自動生成SQL
語句,自動執行,不須要編寫的SQL語句。
3. 使用Hibernate
,移植性好(只要使用Hibernate標準開發,更換數據庫時,只須要配置相應的配置文件就能夠了,不須要作其它任務的操做)
4. 缺點就是學習門檻不低,比較複雜,要學到精通門檻更高。
hibernate
是全自動,而mybatis
是半自動
Mybatis
配置// 對應的xml配置文件 mybatis.mapper-locations=classpath:mapper/*Mapper.xml // 對應的實體包 mybatis.type-aliases-package=com.example.demo.entity // 開啓debug模式,打印SQL語句 logging.level.com.example.demo.mapper=debug
Mybatis
映射關係<resultMap id="goodResultMap" type="com.example.demo.entity.Good④"> <id property="id③" column="p_id②"/> <result property="name③" column="name1②"/> <result property="description③" column="description②"/> <result property="stock③" column="stock②"/> <association property="unit" javaType="Unit"> <id property="id" column="c_id②"/> </association> </resultMap> <select id="findById⑤" resultMap="goodResultMap"> SELECT good.id① AS p_id, good.description①, good.`name`① AS name1, good.stock①, good.unit_id① AS c_id, FROM good LEFT OUTER JOIN unit ON good.unit_id = unit.id WHERE good.id = #{id⑥,jdbcType=INTEGER}; </select>
① 既查詢須要返回的字段名稱,對應數據表
② 對應AS後的名稱(至關於把name
起了一個別名叫name1
,既name1
與②對應);若是沒有起別名既與原來數據表中名稱一致
③ 對應④實體裏邊的字段名稱
⑤ 對應倉庫層的方法名稱,如Good findById(@Param("id")⑥ Long id);
⑥ 對應傳入的參數id
Mybatis
註解同時Mybatis
也提供了一些註解
在使用@Select
註解查詢時,只能對單表進行查詢,要想查詢關聯表須要映射註解
對於註解還只是瞭解層面,沒有使用過註解進行關係映射,只是使用簡單的單表CRUD
要一生跟本身的無知做鬥爭,活到老,學到老,學海無涯!!