Mybatis入門指南之實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)增刪改查
前言
我們關(guān)于Spring和Spring MVC的學(xué)習(xí)也有一段時(shí)間了,都還沒有進(jìn)行過數(shù)據(jù)庫(kù)的操作,而在實(shí)際項(xiàng)目中數(shù)據(jù)庫(kù)是必不可少的部分,所以我們接下來將來學(xué)習(xí)Mybatis框架來對(duì)數(shù)據(jù)庫(kù)進(jìn)行一些操作。
MyBatis
簡(jiǎn)介
Mybatis原本是apache的一個(gè)開源項(xiàng)目iBatis, 2010年這個(gè)項(xiàng)目由apache software foundation遷移到了google code,并且改名為MyBatis,2013年11月遷移到Github。Mybatis是一個(gè)實(shí)現(xiàn)了數(shù)據(jù)持久化的開源框架,簡(jiǎn)單理解就是對(duì)JDBC進(jìn)行封裝封裝再封裝。
所以當(dāng)看到iBatis的時(shí)候我們就應(yīng)該知道,iBatis就是Mybatis?,F(xiàn)在還有很多我們引入的包名還是寫的是iBatis。
優(yōu)點(diǎn)
- 與JDBC相比,減少了50%以上的代碼量?!?/li>
- Mybatis是最簡(jiǎn)單的持久化框架,小巧并且簡(jiǎn)單易學(xué)。
- Mybatis靈活,不會(huì)對(duì)應(yīng)用程序或者數(shù)據(jù)庫(kù)的現(xiàn)有設(shè)計(jì)強(qiáng)加任何影響,SQL寫在XML里,從程序代碼中徹底分離,降低耦合度,便于統(tǒng)一管理和優(yōu)化,可重用?!?/li>
- 提供XML標(biāo)簽,支持編寫動(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ǔ)句的編寫工作量較大。
- SQL語(yǔ)句依賴于數(shù)據(jù)庫(kù),導(dǎo)致數(shù)據(jù)庫(kù)移植性差,不能隨意更換數(shù)據(jù)庫(kù)。
搭建第一個(gè)Mybatis程序
新建項(xiàng)目。
自定義項(xiàng)目名,我這里定義為myBatisDemo。
引入pom.xml依賴。
<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依賴、mysql依賴和lombok依賴。
lombok依賴我們前面就使用過,我們可以簡(jiǎn)化實(shí)體類的開發(fā)。而mybatis依賴和mysql依賴是我們數(shù)據(jù)庫(kù)的依賴。
新建數(shù)據(jù)庫(kù)數(shù)據(jù)表。
我們對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作首先就要有數(shù)據(jù)庫(kù)。所以我們來新建一個(gè)數(shù)據(jù)庫(kù)。我們這里使用工具創(chuàng)建,不需要手敲SQL命令。
新建一個(gè)數(shù)據(jù)庫(kù)名為test,庫(kù)中建一個(gè)名為Students的數(shù)據(jù)表。
現(xiàn)在我們的表中還沒有數(shù)據(jù),等下我們使用代碼來對(duì)數(shù)據(jù)庫(kù)進(jìn)行增刪改查的操作。
新建Student實(shí)體類。
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í)體類中的屬性要對(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)、路徑、用戶名和密碼。
創(chuàng)建StudentMapper.xml文件。
我們?cè)陂_發(fā)中需要為每個(gè)實(shí)體類創(chuàng)建mapper文件,我們需要在其中寫我們對(duì)該該實(shí)體類進(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
表示我們需要傳遞的值的類型。我們這里傳值使用#{}
的格式。
在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í)體類對(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接收查詢的數(shù)據(jù)再打印出來。
打印結(jié)果:
[Student(id=1, name=小剛, age=19), Student(id=2, name=小明, age=15), Student(id=3, name=小紅, age=17)]
查詢成功!
總結(jié)
關(guān)于Mybatis入門配置以及使用原生接口進(jìn)行增刪改查操作就是這樣,接下來的內(nèi)容我將來講解Mapper代理的方式進(jìn)行操作。喜歡的小伙伴們多多支持,你們的支持就是我更新的動(dòng)力。
到此這篇關(guān)于Mybatis入門指南之實(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-02Springboot集成Springbrick實(shí)現(xiàn)動(dòng)態(tài)插件的步驟詳解
這篇文章主要介紹了Springboot集成Springbrick實(shí)現(xiàn)動(dòng)態(tài)插件的詳細(xì)過程,文中的流程通過代碼示例介紹的非常詳細(xì),感興趣的同學(xué)可以參考一下2023-06-06spring data jpa如何只查詢實(shí)體部分字段
這篇文章主要介紹了spring data jpa如何只查詢實(shí)體部分字段的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06Spring Security基于數(shù)據(jù)庫(kù)實(shí)現(xiàn)認(rèn)證過程解析
這篇文章主要介紹了Spring Security基于數(shù)據(jù)庫(kù)實(shí)現(xiàn)認(rèn)證過程解析,文中通過示例代碼介紹的非常詳細(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