Mybatis入門(mén)指南之實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)增刪改查
前言
我們關(guān)于Spring和Spring MVC的學(xué)習(xí)也有一段時(shí)間了,都還沒(méi)有進(jìn)行過(guò)數(shù)據(jù)庫(kù)的操作,而在實(shí)際項(xiàng)目中數(shù)據(jù)庫(kù)是必不可少的部分,所以我們接下來(lái)將來(lái)學(xué)習(xí)Mybatis框架來(lái)對(duì)數(shù)據(jù)庫(kù)進(jìn)行一些操作。
MyBatis
簡(jiǎn)介
Mybatis原本是apache的一個(gè)開(kāi)源項(xiàng)目iBatis, 2010年這個(gè)項(xiàng)目由apache software foundation遷移到了google code,并且改名為MyBatis,2013年11月遷移到Github。Mybatis是一個(gè)實(shí)現(xiàn)了數(shù)據(jù)持久化的開(kāi)源框架,簡(jiǎn)單理解就是對(duì)JDBC進(jìn)行封裝封裝再封裝。
所以當(dāng)看到iBatis的時(shí)候我們就應(yīng)該知道,iBatis就是Mybatis?,F(xiàn)在還有很多我們引入的包名還是寫(xiě)的是iBatis。
優(yōu)點(diǎn)
- 與JDBC相比,減少了50%以上的代碼量?!?/li>
- Mybatis是最簡(jiǎn)單的持久化框架,小巧并且簡(jiǎn)單易學(xué)?!?/li>
- Mybatis靈活,不會(huì)對(duì)應(yīng)用程序或者數(shù)據(jù)庫(kù)的現(xiàn)有設(shè)計(jì)強(qiáng)加任何影響,SQL寫(xiě)在XML里,從程序代碼中徹底分離,降低耦合度,便于統(tǒng)一管理和優(yōu)化,可重用?!?/li>
- 提供XML標(biāo)簽,支持編寫(xiě)動(dòng)態(tài)SQL語(yǔ)句(XML中使用if, else)?! ?/li>
- 提供映射標(biāo)簽,支持對(duì)象與數(shù)據(jù)庫(kù)的ORM字段關(guān)系映射(在XML中配置映射關(guān)系,也可以使用注解)。
缺點(diǎn)
- SQL語(yǔ)句的編寫(xiě)工作量較大。
- SQL語(yǔ)句依賴(lài)于數(shù)據(jù)庫(kù),導(dǎo)致數(shù)據(jù)庫(kù)移植性差,不能隨意更換數(shù)據(jù)庫(kù)。
搭建第一個(gè)Mybatis程序
新建項(xiàng)目。
自定義項(xiàng)目名,我這里定義為myBatisDemo。
引入pom.xml依賴(lài)。
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.9</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.30</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.24</version> </dependency>
我們需要引入mybatis依賴(lài)、mysql依賴(lài)和lombok依賴(lài)。
lombok依賴(lài)我們前面就使用過(guò),我們可以簡(jiǎn)化實(shí)體類(lèi)的開(kāi)發(fā)。而mybatis依賴(lài)和mysql依賴(lài)是我們數(shù)據(jù)庫(kù)的依賴(lài)。
新建數(shù)據(jù)庫(kù)數(shù)據(jù)表。
我們對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作首先就要有數(shù)據(jù)庫(kù)。所以我們來(lái)新建一個(gè)數(shù)據(jù)庫(kù)。我們這里使用工具創(chuàng)建,不需要手敲SQL命令。
新建一個(gè)數(shù)據(jù)庫(kù)名為test,庫(kù)中建一個(gè)名為Students的數(shù)據(jù)表。
現(xiàn)在我們的表中還沒(méi)有數(shù)據(jù),等下我們使用代碼來(lái)對(duì)數(shù)據(jù)庫(kù)進(jìn)行增刪改查的操作。
新建Student實(shí)體類(lèi)。
package com.xyj.entity; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor public class Student { private long id; private String name; private int age; }
我們實(shí)體類(lèi)中的屬性要對(duì)應(yīng)我們數(shù)據(jù)庫(kù)表中的字段。
配置Mybatis的配置文件。
在resources資源文件夾下面創(chuàng)建config.xml配置文件。
在comfig.xml文件中添加以下配置:
<?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="development"> <environment id="development"> <transactionManager type="JDBC"></transactionManager> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/test? useUnicode=true&characterEncoding=UTF-8"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> </configuration>
driver、url、username、password分別對(duì)應(yīng)數(shù)據(jù)庫(kù)驅(qū)動(dòng)、路徑、用戶(hù)名和密碼。
創(chuàng)建StudentMapper.xml文件。
我們?cè)陂_(kāi)發(fā)中需要為每個(gè)實(shí)體類(lèi)創(chuàng)建mapper文件,我們需要在其中寫(xiě)我們對(duì)該該實(shí)體類(lèi)進(jìn)行操作的SQL語(yǔ)句。
<?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="com.xyj.mapper.StudentMapper"> <!-- 增 --> <insert id="add" parameterType="com.xyj.entity.Student"> insert into students (id,name,age) values (#{id},#{name},#{age}) </insert> <!-- 刪 --> <delete id="delete" parameterType="int"> delete from students where id = #{id}; </delete> <!-- 改 --> <update id="update" parameterType="com.xyj.entity.Student"> update students set age = #{age} where id = #{id} </update> <!-- 查 --> <select id="query" resultType="com.xyj.entity.Student"> select * from students </select> </mapper>
在mapper文件中增刪改查對(duì)應(yīng)的標(biāo)簽為insert
、delete
、update
、select
。標(biāo)簽中id
是我們之后調(diào)用的名字,parameterType
表示我們需要傳遞的值的類(lèi)型。我們這里傳值使用#{}
的格式。
在config.xml中加入mapper。
<mappers> <mapper resource="com/xyj/mapper/StudentMapper.xml"></mapper> </mappers>
調(diào)用Mybitis原生接口進(jìn)行操作
public static void main(String[] args) { InputStream inputStream = Test.class.getClassLoader().getResourceAsStream("config.xml"); SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder(); SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream); SqlSession sqlSession = sqlSessionFactory.openSession(); }
我們首先使用輸入流對(duì)config.xml文件進(jìn)行讀取,然后使用sqlSessionFactoryBuilder
的build
方法創(chuàng)建sqlSessionFactory
,再用sqlSessionFactory
的openSession
方法創(chuàng)建sqlSession
。
增
Student student1 = new Student(1L,"小明",16); Student student2 = new Student(2L,"小紅",15); sqlSession.insert("com.xyj.mapper.StudentMapper.add",student1); sqlSession.insert("com.xyj.mapper.StudentMapper.add",student2); sqlSession.commit(); sqlSession.close();
調(diào)用sqlSession
的insert
方法,傳入第一個(gè)參數(shù)為我們實(shí)體類(lèi)對(duì)應(yīng)mapper文件中對(duì)應(yīng)的操作id
,第二個(gè)參數(shù)為數(shù)據(jù)。
我們執(zhí)行完sql之后還需要提交事務(wù),最后釋放資源。
執(zhí)行結(jié)果:
成功在數(shù)據(jù)表中添加了兩條數(shù)據(jù)。
刪
sqlSession.delete("com.xyj.mapper.StudentMapper.delete",2);
我們這里調(diào)用delete
方法,刪除id
為2的學(xué)生數(shù)據(jù)。
執(zhí)行結(jié)果:
刪除成功!
改
Student student = new Student(1L,"小剛",19); sqlSession.update("com.xyj.mapper.StudentMapper.update",student);
調(diào)用update
方法修改數(shù)據(jù)。
執(zhí)行結(jié)果:
修改數(shù)據(jù)成功!
查
我們?cè)偬砑觾蓷l數(shù)據(jù)。
List<Student> studentList = sqlSession.selectList("com.xyj.mapper.StudentMapper.query"); System.out.println(studentList);
我們用List接收查詢(xún)的數(shù)據(jù)再打印出來(lái)。
打印結(jié)果:
[Student(id=1, name=小剛, age=19), Student(id=2, name=小明, age=15), Student(id=3, name=小紅, age=17)]
查詢(xún)成功!
總結(jié)
關(guān)于Mybatis入門(mén)配置以及使用原生接口進(jìn)行增刪改查操作就是這樣,接下來(lái)的內(nèi)容我將來(lái)講解Mapper代理的方式進(jìn)行操作。喜歡的小伙伴們多多支持,你們的支持就是我更新的動(dòng)力。
到此這篇關(guān)于Mybatis入門(mén)指南之實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)增刪改查的文章就介紹到這了,更多相關(guān)Mybatis對(duì)數(shù)據(jù)庫(kù)增刪改查內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Springboot?JPA如何使用distinct返回對(duì)象
這篇文章主要介紹了Springboot?JPA如何使用distinct返回對(duì)象,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02Java線(xiàn)程中的notifyAll喚醒操作(推薦)
這篇文章主要介紹了Java線(xiàn)程中的notifyAll喚醒操作,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-03-03Springboot集成Springbrick實(shí)現(xiàn)動(dòng)態(tài)插件的步驟詳解
這篇文章主要介紹了Springboot集成Springbrick實(shí)現(xiàn)動(dòng)態(tài)插件的詳細(xì)過(guò)程,文中的流程通過(guò)代碼示例介紹的非常詳細(xì),感興趣的同學(xué)可以參考一下2023-06-06spring data jpa如何只查詢(xún)實(shí)體部分字段
這篇文章主要介紹了spring data jpa如何只查詢(xún)實(shí)體部分字段的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06Java多線(xiàn)程中的CountDownLatch解析
這篇文章主要介紹了Java多線(xiàn)程中的CountDownLatch解析,CountDownLatch是一個(gè)阻塞部分線(xiàn)程直到其他線(xiàn)程執(zhí)行完成后喚醒的同步計(jì)數(shù)器,核心是其內(nèi)部類(lèi)Sync繼承于AQS,同時(shí)也是利用的AQS的同步原理,也稱(chēng)之為閉鎖,需要的朋友可以參考下2023-11-11Spring Security基于數(shù)據(jù)庫(kù)實(shí)現(xiàn)認(rèn)證過(guò)程解析
這篇文章主要介紹了Spring Security基于數(shù)據(jù)庫(kù)實(shí)現(xiàn)認(rèn)證過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08web.xml詳解_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章給大家詳細(xì)介紹了web.xml的相關(guān)知識(shí),需要的朋友可以參考下2017-07-07實(shí)例分析java中重載與重寫(xiě)的區(qū)別
這篇文章主要介紹了實(shí)例分析java中重載與重寫(xiě)的區(qū)別,需要的朋友可以參考下2014-07-07