說明: 整理自互聯網、自己學習使用。
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 還有哪些標簽?
來自京東