1. 什么是框架
是一套規(guī)范,可以理解成半成品軟件,開發(fā)者在它基礎(chǔ)上進(jìn)行使用。
2. 框架的作用
封裝了一些冗余重用率低的代碼,使用反射與動(dòng)態(tài)代理機(jī)制實(shí)現(xiàn)代碼的通用性。
3. 常見的框架
- 表現(xiàn)層
a. Struts2
b. Spring MVC
- 持久層
a. Hibernate
b. Spring JDBC
c. Mybatis
- 全棧
a. Spring
4. Mybatis
4.1 出現(xiàn)背景
4.1.1 傳統(tǒng)的JDBC操作
@Override
public User userLogin(User user) {
//創(chuàng)建QueryRunner的對象
QueryRunner qr = new QueryRunner(DruidUtils.getDataSource());
//創(chuàng)建sql語句查詢表中是否存在該用戶
String sql = "select *from `lagou_user` where name=? and password=?";
User resultuser=new User();
try {
resultuser = qr.query(sql, new BeanHandler<User>(User.class), user.getName(),user.getPassword());
if (resultuser==null){
return null;
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return resultuser;
}
可能出現(xiàn)的問題
- a. 數(shù)據(jù)庫頻繁的創(chuàng)建連接、關(guān)閉連接,造成系統(tǒng)資源浪費(fèi)
- b. 在進(jìn)行curd操作中有許多sql語句硬編碼問題,sql語句的改變需要重新部署項(xiàng)目
- c. 查詢得出的結(jié)果需要手動(dòng)封裝到相對應(yīng)的Java Bean對象
4.1.2 解決的方案
針對上述的問題,提出一些解決思路
- a. 針對硬編碼的sql語句抽取到xml配置文件中
- b. 采用配置文件配置數(shù)據(jù)庫,使用數(shù)據(jù)庫連接池進(jìn)行連接資源
- c. 使用反射、內(nèi)省等底層技術(shù),自動(dòng)將實(shí)體類和表中的屬性字段互相映射起來
4.2 Mybatis簡介
是一個(gè)基于ORM的半自動(dòng)輕量型的持久層框架,對使用JDBC操作數(shù)據(jù)庫進(jìn)一步封裝,讓開發(fā)人員只關(guān)注SQL語句本身;
主要完成了驅(qū)動(dòng)注冊、創(chuàng)建連接、創(chuàng)建curd聲明、手動(dòng)設(shè)置參數(shù)、結(jié)果檢索等繁雜的代碼編程。
半自動(dòng)與全自動(dòng)
本質(zhì)區(qū)別:需不需要編寫SQL語句,全自動(dòng)的話就是框架可以自動(dòng)生成SQL語句,例如Hibernate
缺點(diǎn):全自動(dòng)由于自動(dòng)生成SQL語句,無法進(jìn)行SQL語句的優(yōu)化,數(shù)據(jù)量大的時(shí)候容易出現(xiàn)慢查詢
輕量型
本質(zhì):啟動(dòng)加載消耗系統(tǒng)資源的多少。
4.3 ORM思想
全稱 Object Relational Mapping,對象關(guān)系映射
- Object:實(shí)體對象,就是程序中的一個(gè)Java Bean
- Relational:關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)庫中的一張表
- Mapping:映射,通過XML或者注解將實(shí)體對象與表中的結(jié)果對應(yīng)起來
4.3.1 作用
將實(shí)體變化轉(zhuǎn)為SQL腳本,通過執(zhí)行腳本繼而改變數(shù)據(jù)表,從而達(dá)到映射的作用
4.4 Mybatis作用
Mybatis就是采用ORM的思想,對JDBC進(jìn)行封裝,屏蔽了JDBC API底層訪問的實(shí)現(xiàn)細(xì)節(jié),使得開發(fā)人員不需要和JDBC API進(jìn)行打交道,就可以完成數(shù)據(jù)庫的持久化操作。