面試題整理之Mybatis


說明: 整理自互聯網、自己學習使用。

1.介紹下Mybatis?(什么是Mybatis?)

  • mybatis是一個ORM框架,主要承擔着與數據庫交互的任務。內部封裝了jdbc,使用者無需關注驅動加載、創建連接、創建statement等與業務無關的過程,只需要關注sql語句本身。mybatis支持原生的sql,可以嚴格控制sql語句的性能。
  • mybatis 支持使用xml和注解來實現對象和和數據庫表的映射, 避免了jdbc代碼和手動設置參數和結果集。
  • 可以將各種要執行的statement配置起來, 通過java對象和sql中的動態參數映射成最終的sql語句, 並且可以將mybatis執行的結果集映射出java對象進行返回。
  • 適合對性能要求高, 需求變化較多的項目。是一個靈活的DAO層解決方案。

2.Mybatis有哪些優點

  • 基於sql語句編程, 靈活性高。 不會對現有的程序或者數據庫造成影響。
  • xml語句中編寫sql可以很好的實現與java代碼的解耦。
  • 支持動態SQL語句的編寫。
  • 與各種數據庫兼容性高。
  • 可以與Spring、SpringBoot很好的集成。
  • 提供對象關系映射標簽, 支持對象關系組件維護。

3.Mybatis的缺點

  • 手寫原生sql, 對sql的功底要求高。
  • sql依賴數據庫, 可移植性差, 不好隨意切換數據庫。

4.MyBatis與Hibernate有哪些不同?

  • Hibernate不完全是一個ORM框架, mybatis 需要程序員手寫sql。
  • mybatis只需關注sql, 可以對sql進行優化, 適合對關系數據模型要求不高的軟件開發。
  • hibernate 對象關系映射能力較強, 數據庫無關性好。但需要額外的學習hql..

5.Mybatis中#{}${}的區別是什么?

  • #{}是參數占位符, 是對具體參數的預處理,Mybatis會將sql語句中的#{}替換成?,然后在sql執行之前調用PrepareStatement的參數設置方法, 按序給?占位符設置參數值。比如:ps.sestInt(0,parameterValue) 至於#{item.name} 的取值方式則是使用反射方式從參數對象中獲取item對象的name屬性值, 相當於parm.getItem().getName() 使用#{}可以有效的防止SQL注入, 提高系統的安全性。
  • ${} 可以理解為是替換{}內部變量的值。是Properties文件中的變量占位符, 可以用於標簽屬性或者sql內部, 屬於靜態的文本替換, ${driver} 會被靜態替換為com.mysql.jdbc.Driver

6.當實體類的屬性名和字段名的不一樣怎么辦? 如何處理

  • 如果只是下划線和駝峰命名的區別直接開啟駝峰命名規則用的多
  • 如果不止這個區別
    • 在sql 語句中定義字段名的別名, 使得字段名的別名和實體類的屬性名一致即可。
    <select id=”selectorder” parametertype=”int” resultetype=”com.xx.domain.order”>
        select order_id id, order_no orderno ,order_price price form orders where order_id=#{id};
    </select>
    
    • 使用<resultMap> 標簽來映射字段名和實體類的屬性名。
    <select id="getOrder" parameterType="int" resultMap="orderresultmap">
        select * from orders where order_id=#{id}
    </select>
    
    <resultMap type=”me.gacl.domain.order” id=”orderresultmap”>
        <!–用 id 屬性來映射主鍵字段–>
        <id property=”id” column=”order_id”>
        <!–用 result 屬性來映射非主鍵字段,property 為實體類屬性名,column
        為數據表中的屬性–>
        <result property = “orderno” column =”order_no”/>
        <result property=”price” column=”order_price” />
    </reslutMap>
    

7.如何使用模糊查詢?

  • 在Java代碼中直接添加通配符
String name = "%洋%";

List<Person> persons = PersonMapper.selectLike(name);
<select id=”selectLike”>
select * from foo where bar like #{value}
</select>
  • 在sql語句中拼接通配符, 會引起sql注入。
<select id=”selectlike”>
    select * from foo where bar like "%"#{value}"%"
</select>

8.xml文件中, 除了常見的 select、insert、update、delete 還有哪些標簽?

來自京東


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM