如何使用 Mybatis 实现数据库 CURD 操作?
作者?|?阿文,責編 | 郭芮
頭圖 | CSDN 下載自東方IC
出品 | CSDN(ID:CSDNnews)
MyBatis 是一款優秀的持久層框架,它支持自定義 SQL、存儲過程以及高級映射。MyBatis 免除了幾乎所有的 JDBC 代碼以及設置參數和獲取結果集的工作。MyBatis 可以通過簡單的 XML 或注解來配置和映射原始類型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 對象)為數據庫中的記錄。
在傳統的JDBC 實現中,我們需要把查詢過程寫在java 類中,這樣非常不便于后期維護,而使用Mybatis 則可以將查詢語句配置在配置文件中,只需要維護好映射關系即可, 下面我們就來一起看雪如何去使用Mybatis吧。
準備工作
首先,你需要準備以下軟件:
idea
maven
mysql
創建數據庫并插入數據
首先,我們創建一個mybatis_db 的數據庫,然后創建一個表 t_user,在這個表中我們插入幾條數據,如下所示:
mysql>?create?database?mybatis_db; Query?OK,?1?row?affected?(0.01?sec)mysql>?use?mybatis_db; Database?changed mysql>?create?table?t_user(->?id?int(32)?primary?key?auto_increment,->?username?varchar(50),->?jobs?varchar(50),->?phone?varchar(16)); Query?OK,?0?rows?affected,?1?warning?(0.01?sec)mysql>?insert?into?t_user?values(1,"zhangsan","teacher","13142767333"); Query?OK,?1?row?affected?(0.01?sec)mysql>?insert?into?t_user?values(2,"lisi","engineer","13142767334"); Query?OK,?1?row?affected?(0.01?sec)mysql>?insert?into?t_user?values(3,"wangwu","pilot","12342767334"); Query?OK,?1?row?affected?(0.00?sec)mysql>配置pom.xml 下載jar包
我們創建一個maven工程,并配置pom.xml 下載mybatis 和mysql-connect-java 的jar包,目前mybatis 的最新版本是3.5.4。
?<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.4</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.19</version></dependency>整個工程的目錄如下:
配置mybatis-config
接下來,我們在 idea 的resource 中創建一個mybatis-config.xml 的配置文件(如果沒有你需要在src\main目錄點擊右鍵創建一個目錄,創建的時候選擇resource即可),內容如下,具體不需要過多解釋,該配置文件主要是定義JDBC相關的參數包括使用的驅動、mysql 訪問地址、用戶名和密碼以及通過mappers 定義一個mybatis 的映射文件。
<?xml?version="1.0"?encoding="UTF-8"?> <!DOCTYPE?configuration?PUBLIC?"-//mybatis.org//DTD?Config?3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration><environments?default="mysql"><environment?id="mysql"><transactionManager?type="JDBC"?/><dataSource?type="POOLED"><property?name="driver"?value="com.mysql.jdbc.Driver"?/><property?name="url"?value="jdbc:mysql://192.168.10.128:3306/mybatis_db"?/><property?name="username"?value="root"?/><property?name="password"?value="123456"?/></dataSource></environment></environments><mappers><mapper?resource="UserMapper.xml"?/></mappers> </configuration>創建user類
接下里我們創建對于的User類,并生成get和set以及toString 方法,在idea 中,我們在IDE中右鍵選擇Generate 然后選擇Getter 和Setter 以及toString() 全選即可快速生成對應的get和set方法。
最終結果如下:
package?com.mybatis;public?class?User?{private?Integer?id;private?String?username;private?String?jobs;private?String?phone;public?Integer?getId()?{return?id;}public?String?getUsername()?{return?username;}public?String?getJobs()?{return?jobs;}public?String?getPhone()?{return?phone;}public?void?setId(Integer?id)?{this.id?=?id;}public?void?setUsername(String?username)?{this.username?=?username;}public?void?setJobs(String?jobs)?{this.jobs?=?jobs;}public?void?setPhone(String?phone)?{this.phone?=?phone;}@Overridepublic?String?toString()?{return?"User{"?+"id="?+?id?+",?username='"?+?username?+?'\''?+",?jobs='"?+?jobs?+?'\''?+",?phone='"?+?phone?+?'\''?+'}';} }創建測試類
配置UserMapper.xml
接下里,我們創建映射文件UserMapper.xml 然后需要制定一個namespace就是 UserMapper,接著寫一個select 語句,定義id和參數類型以及resultType,resultMap是指描述如何從數據庫結果集中加載對象,是最復雜也是最強大的元素。
<?xml?version="1.0"?encoding="UTF-8"?> <!DOCTYPE?mapper?PUBLIC?"-//mybatis.org//DTD?Mapper?3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper?namespace="UserMapper"><!--根據用戶編號獲取用戶信息?--><select?id="findUserById"?parameterType="Integer"?resultType="com.mybatis.User">select?*?from?t_user?where?id=#{id}</select> </mapper>然后我們創建一個測試類,根據id來查詢用戶:
package?com.mybatis;import?java.io.InputStream; import?org.apache.ibatis.io.Resources; import?org.apache.ibatis.session.SqlSession; import?org.apache.ibatis.session.SqlSessionFactory; import?org.apache.ibatis.session.SqlSessionFactoryBuilder; import?org.junit.jupiter.api.Test;/***?@Auth:?xxxx*?@E-mail:?xxx*?@title:?MybatisTest*?@projectName:?mybatis*?@description:?TODO?描述信息*?@Date?2020/4/7?9:15?下午**/ public?class?MybatisTest?{@Testpublic?void?findUserByIdTest()?throws?Exception?{String?resource?=?"mybatis-config.xml";InputStream?inputStream?=?Resources.getResourceAsStream(resource);SqlSessionFactory?sqlSessionFactory?=?new?SqlSessionFactoryBuilder().build(inputStream);SqlSession?sqlSession?=?sqlSessionFactory.openSession();User?user?=?sqlSession.selectOne("findUserById",?1);System.out.println(user.toString());sqlSession.close();}}如果我們希望進行模糊查詢,則在UserMapper.xml 中定義:
<select?id="findUserByName"?parameterType="String"?resultType="com.mybatisdemo.User">select?*?from?t_user?where?username?like?concat('%','${value}','%')</select>使用like concat('%','${value}','%') 是為了防止sql 注入帶來的安全隱患。
然后在測試類中新建一個方法進行測試:
??@Testpublic?void?findUserByNameTest()?throws??Exception?{String?resource?=?"mybatis-config.xml";InputStream?inputStream?=?Resources.getResourceAsStream(resource);SqlSessionFactory?sqlSessionFactory?=?new?SqlSessionFactoryBuilder().build(inputStream);SqlSession?sqlSession?=?sqlSessionFactory.openSession();List<User>?users?=?sqlSession.selectList("findUserByName","g");for?(User?user:users){System.out.println(user.toString());}sqlSession.close();}如圖所示:
接下來我們測試下添加新用戶,首先我們在UserMapper.xml 中定義一個insert元素:
<insert?id="addUser"?parameterType="com.mybatisdemo.User"?>insert?into?t_user(username,jobs,phone)?value?(#{username},#{jobs},#{phone}) </insert>然后來寫測試接口:
????@Testpublic?void?addUser()?throws?Exception?{String?resource?=?"mybatis-config.xml";InputStream?inputStream?=?Resources.getResourceAsStream(resource);SqlSessionFactory?sqlSessionFactory?=?new?SqlSessionFactoryBuilder().build(inputStream);SqlSession?sqlSession?=?sqlSessionFactory.openSession();User?user?=?new?User();user.setUsername("beiluo");user.setJobs("DevOps");user.setPhone("1314566666");int?rows?=?sqlSession.insert("addUser",user);if?(rows?>0){System.out.println("Success?add?"+?rows?+"data!");}else{System.out.println("add?data?fail!");}sqlSession.commit();sqlSession.close();}如下所示:
接下來測試更新:
?<update?id="updateUserInfo"?parameterType="com.mybatisdemo.User">update?t_user?set?username=#{username},jobs=#{jobs},phone=#{phone}?where?id?=#{id} </update>然后寫個測試類:
?@Testpublic?void?updateUserinfo()?throws??Exception?{String?resource?=?"mybatis-config.xml";InputStream?inputStream?=?Resources.getResourceAsStream(resource);SqlSessionFactory?sqlSessionFactory?=?new?SqlSessionFactoryBuilder().build(inputStream);SqlSession?sqlSession?=?sqlSessionFactory.openSession();User?user?=?new?User();user.setId(1);user.setUsername("jike");user.setJobs("qa");user.setPhone("13142764432");int?rows?=?sqlSession.update("updateUserInfo",user);if?(rows?>0){System.out.println("Success?update?"+?rows?+" data!");}else{System.out.println("update?data?fail!");}sqlSession.commit();sqlSession.close();}執行后如下所示:
最后,我們測試下刪除功能:
?<delete?id="deleteUser"?parameterType="com.mybatisdemo.User"?>delete?from?t_user?where?id=#{id} </delete>測試類如下:
@Testpublic?void?deleteUser()?throws?Exception?{String?resource?=?"mybatis-config.xml";InputStream?inputStream?=?Resources.getResourceAsStream(resource);SqlSessionFactory?sqlSessionFactory?=?new?SqlSessionFactoryBuilder().build(inputStream);SqlSession?sqlSession?=?sqlSessionFactory.openSession();int?rows?=?sqlSession.delete("deleteUser",1);if?(rows?>0){System.out.println("Success?delete?"+?rows?+" data!");}else{System.out.println("delete?data?fail!");}sqlSession.commit();sqlSession.close();}執行結果如下:
同時,歡迎所有開發者掃描下方二維碼填寫《開發者與AI大調研》,只需2分鐘,便可收獲價值299元的「AI開發者萬人大會」在線直播門票!
推薦閱讀:如何成功構建大規模 Web 搜索引擎架構? “出道” 5 年采用率達 78%,Kubernetes 的成功秘訣是什么? 一群阿里人如何用 10 年自研洛神云網絡平臺?技術架構演進全揭秘!拿下 Gartner 容器產品第一,阿里云打贏云原生關鍵一戰! 大話卷積神經網絡CNN,小白也能看懂的深度學習算法教程,全程干貨建議收藏! 朱廣權李佳琦直播掉線,1.2 億人在線等 “抗疫”新戰術:世衛組織聯合IBM、甲骨文、微軟構建了一個開放數據的區塊鏈項目! 真香,朕在看了!總結
以上是生活随笔為你收集整理的如何使用 Mybatis 实现数据库 CURD 操作?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一文告诉你,如何在 Kubernetes
- 下一篇: 小网站的容器化(上)