研究資料庫-如何使用mybatis
前言
為了更好的理解 mybatis 這個框架的使用方式,我取樣無其他框架的 Demo 直接使用 mybatis ,來學習 mybatis 的使用。讓程式碼是如何呼叫的,結構清晰的展示出來,知道哪裡做了關聯,哪裡做了輸入輸出,而且還透過為什麼要使用框架,沒有框架之前是怎樣,使用框架時解決了什麼問題,都一一做解釋。

思考
使用 Java 程式碼連線資料庫,會有這樣一個問題,就是我是連線一次就斷開,還是一直保持連線的狀態,首先我先來看這份程式碼
import java.sql.*;
public class connectdt {//此類為連線資料庫的類
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost/emp";
static final String USER = "root";
static final String PASS = "123456";
String struser = "username", strpass = "password", strtable1 = "admindt", strtable2 = "books",ID="id";
Connection conn = null;
Statement stmt = null;
public connectdt() {
try {
Class.forName(JDBC_DRIVER);// 工程要連線額外的jar包
conn = DriverManager.getConnection(DB_URL, USER, PASS);
stmt = conn.createStatement();
} catch (Exception ee) {
ee.printStackTrace();
}
}
}
以上是一份很正常的 JDBC 連線程式碼,那好,我們下次再運算元據庫的時候是再連線一次(再次呼叫),還是說這份連線可以一直保持連線的狀態,不需要再次連線。很顯然,我這份程式碼每次使用資料庫都會連線一次,有好處也有壞處,好處就是,如果你長時間不使用資料庫的連線,我這份程式碼就顯得很優雅,因為沒有造成浪費,壞處就是如果頻繁使用,一旦出現頻繁的關閉和開啟,就會造成浪費。
- 只連一次就關閉
public class addook extends JFrame implements ActionListener{
JLabel label[]={new JLabel("ISBN"),new JLabel("書名"),new JLabel("出版社"),new JLabel("庫存")};
JTextField field[]={new JTextField(),new JTextField(),new JTextField(),new JTextField()};
JButton submit=new JButton("新增");
String namepattern = "[u4e00-u9fa5]{4,15}";//4到15位漢字
String sql="";
connectdt jdbc = new connectdt();// 連線資料庫類
Statement stmt = jdbc.stmt;
public addook(){…//此處省略數行程式碼
public void init(){…//此處省略數行程式碼
public void actionPerformed(ActionEvent e) {
try {
if(e.getSource()==submit){
sql="insert into books (ISBN,TITLE,PUBLISH,STOCK) values('"+strT[0]+"','"+strT[1]+"','"+strT[2]+"',"+strT[3]+");";
rs.close();//關閉
stmt.close();//關閉
dispose();
}
}catch (Exception ee) {
ee.printStackTrace();
}
}
}
是自己管理還是交給封裝性更好的程式碼來管理呢?於是連線池出現。
連線池
- 持久連線
連線池是維護的資料庫連線的快取,以便在將來需要對資料庫的請求時可以重用這些連線。連線池用於增強在資料庫上執行命令的效能。為每個使用者開啟和維護資料庫連線,尤其是對動態資料庫驅動網站的請求應用,成本高昂,浪費資源。在連線池中,建立連線後,將其放置在池中,並再次使用它,因此不必建立新的連線。如果使用了所有連線,則會建立一個新連線並將其新增到池中。連線池還減少了使用者必須等待建立與資料庫的連線的時間。
使用連線池
在使用連線池之後,我們發現很多時候寫一份SQL難以滿足我們的需求,會出現頻繁更新SQL語句的情況,比如更新操作,有的時候我們需要更新三個引數,寫一個更新的SQL語句:
UPDATE pssm_goods_category set name='辦公用品1',category_level1='701',category_level2='0' WHERE id=49;
當更新一個引數的時候需要寫另一個語句:
UPDATE pssm_goods_category set name='辦公用品1',category_level1='701' WHERE id=49;
如果有50個引數呢?於是出現了動態SQL的概念
<update id="updateGoodsCategoryByTargetItem" parameterType="com.supermarket.pssmsys.entity.GoodsCategory"
>
UPDATE pssm_goods_category
<set>
<if test="targetItem.name!=null">name=#{targetItem.name},</if>
<if test="targetItem.categoryLevel1>0">category_level1=#{targetItem.categoryLevel1},</if>
<if test="targetItem.categoryLevel2>0">category_level2=#{targetItem.categoryLevel2},</if>
<if test="targetItem.createTime!=null">create_time=#{targetItem.createTime},</if>
<if test="targetItem.editTime!=null">edit_time=#{targetItem.editTime}</if>
</set>
WHERE
id = #{targetItem.id}
</update>
MyBatis
- 持久框架
MyBatis就支援動態SQL,意味著寫一份SQL就可以支援多種使用方式。
MyBatis是一個Java持久化框架,它透過XML描述符或註解把物件與儲存過程或SQL語句關聯起來。
與其他的物件關係對映框架不同,MyBatis並沒有將Java物件與資料庫表關聯起來,而是將Java方法與SQL語句關聯。MyBatis允許使用者充分利用資料庫的各種功能,例如儲存過程、檢視、各種複雜的查詢以及某資料庫的專有特性。如果要對遺留資料庫、不規範的資料庫進行操作,或者要完全控制SQL的執行,MyBatis是一個不錯的選擇。
與JDBC相比,MyBatis簡化了相關程式碼:SQL語句在一行程式碼中就能執行。MyBatis提供了一個對映引擎,宣告式的把SQL語句執行結果與物件樹對映起來。透過使用一種內建的類XML表示式語言,或者使用Apache Velocity整合的外掛,SQL語句可以被動態的生成。
如何使用MyBatis
public class Main {
public static void main(String[] args) throws IOException {
//mybatis的配置檔案
String resource = "mybatis-config.xml";
//使用類載入器載入mybatis的配置檔案(它也載入關聯的對映檔案)
InputStream is = Main.class.getClassLoader().getResourceAsStream(resource);
//構建sqlSession的工廠
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
//建立能執行對映檔案中sql的sqlSession
SqlSession session = sessionFactory.openSession();
/**
* 對映sql的標識字串,
* com.caeser.service.BookMapper是BookMapper.xml檔案中mapper標籤的namespace屬性的值,
* getTITLE是select標籤的id屬性值,透過select標籤的id屬性值就可以找到要執行的SQL
*/
String statement = "com.caeser.entity.Books.getTITLE";//對映sql的標識字串
BookMapper bookMapper = session.getMapper(BookMapper.class);
//執行查詢返回一個唯一user物件的sql
Books books = bookMapper.getBook(1);
System.out.println(books.getTITLE());
session.close();
}
}
結尾
前半段的程式碼來自我很久之前的一份圖書管理系統的原始碼,很多大學新生都在研究使用我的那份程式碼,我感到很榮幸。後半段的程式碼來自畢設專案,使用了MyBatis 的動態SQL,很方便的實現了一份程式碼多種場合的複用。
最近一段時間可能會比較忙吧,我會盡量寫點有用的東西,也開始逐步學習前端的知識,不過我發現,前端的知識很零碎,沒有那麼多的長篇大論,這需要引起的重視,注重積累,以前我總以為前端沒什麼邏輯,學習起來就是在背誦的感覺,慢慢的我覺得前端也挺好玩的了。
資料庫方面有很長的路要走,雙12了,也快年底了,各位2019年的願望完成了多少呀?
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4729/viewspace-2824501/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Mybatis連線資料庫MyBatis資料庫
- Mybatis資料庫驅動MyBatis資料庫
- 使用dbunit測試spring + mybatis的資料庫應用SpringMyBatis資料庫
- MyBatis-04-資料庫配置MyBatis資料庫
- Mybatis配置資料庫連線MyBatis資料庫
- Mybatis學習01:利用mybatis查詢資料庫MyBatis資料庫
- 如何在MySQL資料庫中使用use來切換資料庫?MySql資料庫
- Mybatis實現分包定義資料庫MyBatis資料庫
- Java MyBatis 插入資料庫返回主鍵JavaMyBatis資料庫
- Spring Boot MyBatis配置多種資料庫Spring BootMyBatis資料庫
- MyBatis Java 和 資料庫 資料型別對應表MyBatisJava資料庫資料型別
- Spring Boot入門(七):使用MyBatis訪問MySql資料庫(xml方式)Spring BootMyBatisMySql資料庫XML
- MyBatis框架的使用解析!資料庫相關API的基本介紹MyBatis框架資料庫API
- C++編譯SQLite資料庫以及如何使用加密資料庫SQLCipherC++編譯SQLite資料庫加密
- 如何使用ChatGPT模擬MySQL資料庫ChatGPTMySql資料庫
- mybatis oracle資料庫批次插入資料,忽略主鍵重複MyBatisOracle資料庫
- mybatis怎麼實現insert into多個資料-oracle資料庫MyBatisOracle資料庫
- MyBatis使用Zookeeper儲存資料庫的配置,可動態重新整理MyBatis資料庫
- Spring Boot入門(六):使用MyBatis訪問MySql資料庫(註解方式)Spring BootMyBatisMySql資料庫
- 如何使用 IDEA 資料庫工具連線 TDengine?Idea資料庫
- 如何快速使用摩杜雲資料庫RDSMySQL?資料庫MySql
- 【Falsk 使用資料庫】---- 資料庫基本操作資料庫
- 資料庫連線分析(1)-從JDBC到MyBatis資料庫JDBCMyBatis
- MyBatis:使用MyBatis Generator快速完成Springboot專案資料層開發MyBatisSpring Boot
- 2019資料庫趨勢研究:誰是最受青睞的資料庫?資料庫
- MySQL資料庫中timediff()函式,在瀚高資料庫中如何替換使用?MySql資料庫函式
- Oracle資料庫中convert()函式,在瀚高資料庫中如何替換使用?Oracle資料庫函式
- 如何使用命令列工具檢查資料庫?命令列資料庫
- 教你如何使用flask實現ajax資料入庫Flask
- 如何使用MySQL資料庫來分析Apache日誌?MySql資料庫Apache
- 如何使用Java Streams進行資料庫查詢?Java資料庫
- 使用Mybatis批量插入大量資料的實踐MyBatis
- 成功使用Eclipse匯入專案,並實驗Mybatis操作了資料庫內容。EclipseMyBatis資料庫
- mybatis 實體類排除資料庫欄位對映MyBatis資料庫
- mybatis實現MySQL資料庫的增刪改查MyBatisMySql資料庫
- mysql資料庫全家桶(安裝與如何寫sql,如何使用)MySql資料庫
- python如何將資料插入資料庫Python資料庫
- 如何在Nuxt3.0中使用MongoDB資料庫UXMongoDB資料庫