MyBatis框架簡(jiǎn)介及入門案例詳解
前言
傳統(tǒng)的JDBC操作數(shù)據(jù)庫(kù)都是通過(guò)寫一個(gè)java類,在類中調(diào)用接口下的API執(zhí)行相應(yīng)的SQL,存在大量的硬編碼。試想,若是開(kāi)發(fā)一個(gè)日活度高的系統(tǒng),那SQL的變動(dòng)的非常大,就要我們?nèi)ハ鄳?yīng)的類中修改Java代碼,特別是進(jìn)行查詢操作時(shí)需要我們手動(dòng)將結(jié)果集封裝到實(shí)體類中,造成后期維護(hù)壓力山大
總而言之,缺點(diǎn)多多
MyBatis簡(jiǎn)介
mybatis是一個(gè)優(yōu)秀的基于java的持久層框架,它內(nèi)部封裝了jdbc,使開(kāi)發(fā)者只需要關(guān)注sql語(yǔ)句本身,而不需要花費(fèi)精力去處理加載驅(qū)動(dòng)、創(chuàng)建連接、創(chuàng)建statement等繁雜的過(guò)程。mybatis通過(guò)xml或注解的方式將要執(zhí)行的各種statement配置起來(lái),并通過(guò)java對(duì)象和statement中sql的動(dòng)態(tài)參數(shù)進(jìn)行映射生成最終執(zhí)行的sql語(yǔ)句
最后mybatis框架執(zhí)行sql并將結(jié)果映射為java對(duì)象并返回。采用ORM思想解決了實(shí)體和數(shù)據(jù)庫(kù)映射的問(wèn)題,對(duì)jdbc進(jìn)行了封裝,屏蔽了jdbc api底層訪問(wèn)細(xì)節(jié),使我們不用與jdbc api打交道,就可以完成對(duì)數(shù)據(jù)庫(kù)的持久化操作
快速入門
下面的配置文件在MyBatis的官網(wǎng)里都有,自己去復(fù)制過(guò)來(lái)粘貼到IDEA中更改對(duì)應(yīng)的信息即可,我寫出來(lái)的目的是為了保證文章的順序流暢(大家莫煩~)
1.導(dǎo)入MyBatis相關(guān)坐標(biāo)
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.29</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.10</version> </dependency>
2.數(shù)據(jù)庫(kù)中建立相應(yīng)的數(shù)據(jù)表,并編寫一個(gè)表中字段對(duì)應(yīng)的(Brand)實(shí)體類
3.編寫B(tài)randMapper映射文件
<?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="mapper.BrandMapper"> //Mapper代理開(kāi)發(fā): //定義與SQL映射文件同名的Mapper接口, //并且將Mapper接口和SQL映射文件放置在同一目錄下 //設(shè)置SQL映射文件的namespace屬性為Mapper接口全限定名 //在Mapper接口中定義方法,方法名就是SQL映射文件中sql語(yǔ)句的id,并保持參數(shù)類型和返回值類型一致 <select id="selAll" resultType="sqlTest.Brand"> select * from mybatis; </select> </mapper>
4.編寫封裝查詢結(jié)果對(duì)象的接口
public interface BrandMapper {<!--{C}%3C!%2D%2D%20%2D%2D%3E--> public List<Brand> selAll(); }
5編寫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> <typeAliases> <package name="sqlTest"/> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <!--數(shù)據(jù)庫(kù)連接信息--> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/pyq?useSSL=false"/> <property name="username" value="root"/> <property name="password" value="284650"/> </dataSource> </environment> </environments> <mappers> <mapper resource="mapper/userMapper.xml"/> <mapper resource="mapper/BrandMapper.xml"/> </mappers> </configuration>
6.編寫測(cè)試類,通過(guò)MyBatis實(shí)現(xiàn)查詢功能
public class MybatisDemo3 { public static void main(String[] args) throws IOException { //加載mybatis的核心配置文件,獲取sqlSessionFactory String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); //獲取sqlSession工廠對(duì)象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //獲取sqlSession對(duì)象,來(lái)執(zhí)行sql SqlSession sqlSession = sqlSessionFactory.openSession(); //獲取BrandMapper接口的代理對(duì)象 BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class); List<Brand> brands =brandMapper.selAll(); System.out.println(brands); //釋放資源 sqlSession.close(); } }
一頓操作下來(lái)好像也沒(méi)有簡(jiǎn)單多少,其實(shí)不然,初次編寫的配置文件都是持久化的屬性,以后的變更只需要在接口里寫出相應(yīng)的方法即可,避免了大量的硬編碼
映射文件
sql片段與resultMap
在進(jìn)行查詢操作時(shí),為了解決SQL表中字段名稱和實(shí)體類中的屬性名不一致導(dǎo)致的不能自動(dòng)封裝(查出為null)的問(wèn)題,我們可以通過(guò)"起別名"也可以通過(guò)SQL片段來(lái)對(duì)查詢的數(shù)據(jù)進(jìn)行定義修改,統(tǒng)一重復(fù)的操作
比如,在遇到表中的字段名稱不符合實(shí)體類中駝峰命名的規(guī)范時(shí)、要對(duì)查詢的數(shù)據(jù)進(jìn)行范圍限定時(shí)都可以通過(guò)sql片段來(lái)實(shí)現(xiàn),就像這樣:
<sql id="cut"> bracd_name as bracdName,company_name as compantName </sql> <select id="selAll" resultType="sqlTest.Brand"> select <include refid="cut"/> from mybatis; </select>
通過(guò)SQL片段實(shí)現(xiàn)了所謂的范圍查詢,單表重復(fù)起別名工作的統(tǒng)一,但是針對(duì)多次不同的查詢范圍我們需要多次定義SQL片段(不靈活),這也不是一件簡(jiǎn)單的事
于是resultMap幫我們解決了這個(gè)問(wèn)題:
<resultMap id="rm" type="brand"> <result column="bracd_name" property="bracdName"/> <result column="company_name" property="companyName"/> </resultMap> <select id="selAll" resultMap="rm"> select * from mybatis; </select>
通過(guò)id來(lái)設(shè)置唯一標(biāo)識(shí),type來(lái)指定映射類型,把表的列名column和實(shí)體類的屬性名通過(guò)result進(jìn)行映射,在我們的SQL中直接查詢所有即可,進(jìn)行不同的查詢操作也不需要重復(fù)定義片段或者取別名,就變得十分簡(jiǎn)單
MyBatis的增刪改查
1.添加操作
編寫Mapper接口,寫出添加的方法:
void add(Brand brand);
配置SQL映射文件:
<mapper> <insert id="add" > insert into mybatis(bracd_name,company_name,ordered,description,status) values (#{bracdName},#{companyName},#{ordered},#{description},#{status}); </insert> </mapper>
執(zhí)行方法:
SqlSession sqlSession = sqlSessionFactory.openSession(); BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class); brandMapper.add(brand);
2.修改操作
編寫Mapper接口,寫出修改的方法:
void update(Brand brand);
編寫映射文件:
<update id="update" parameterType="sqlTest.Brand"> update mybatis set bracd_name=#{bracdName},company_name=#{companyName},ordered=#{ordered},description=#{description},status=#{status} </update>
執(zhí)行方法:
SqlSession sqlSession = sqlSessionFactory.openSession(); BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class); int count= brandMapper.update(brand);
3.刪除操作
編寫Mapper接口,寫出刪除方法:
void deleteid(Brand brand);
編寫映射文件:
<delete id="deleteid" parameterType="brand"> delete from mybatis where id=#{id} </delete>
執(zhí)行方法:
SqlSession sqlSession = sqlSessionFactory.openSession(); BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class); int count= brandMapper.deleteid(id);
以上就是對(duì)MyBtias的初識(shí),后面還有很多高級(jí)功能等待整理
到此這篇關(guān)于MyBatisPlus框架簡(jiǎn)介及入門案例詳解的文章就介紹到這了,更多相關(guān)MyBatisPlus案例內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring?Cloud灰度部署實(shí)現(xiàn)過(guò)程詳解
這篇文章主要為大家介紹了Spring?Cloud灰度部署實(shí)現(xiàn)過(guò)程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06java實(shí)現(xiàn)稀疏矩陣的壓縮與解壓的方法
這篇文章主要介紹了java實(shí)現(xiàn)稀疏矩陣的壓縮與解壓 ,把該稀疏矩陣壓縮以三元組形式表示并以文件形式保存,再寫另一個(gè)程序讀取文件中的信息把壓縮后的三元組還原成原來(lái)的稀疏矩陣,需要的朋友可以參考下2022-03-03SpringBoot Shiro 權(quán)限注解不起作用的解決方法
本文主要介紹了SpringBoot Shiro 權(quán)限注解不起作用的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07Java基礎(chǔ)總結(jié)之Thymeleaf詳解
Thymeleaf是一種現(xiàn)代的基于服務(wù)器端的Java模板引擎技術(shù),也是一個(gè)優(yōu)秀的面向Java的XML、XHTML、HTML5頁(yè)面模板,它具有豐富的標(biāo)簽語(yǔ)言、函數(shù)和表達(dá)式,在使用Spring Boot框架進(jìn)行頁(yè)面設(shè)計(jì)時(shí),一般會(huì)選擇Thymeleaf模板,需要的朋友可以參考下2021-05-05JAVA正則表達(dá)式過(guò)濾文件的實(shí)現(xiàn)方法
這篇文章主要介紹了JAVA正則表達(dá)式過(guò)濾文件的實(shí)現(xiàn)方法的相關(guān)資料,希望通過(guò)本文大家能夠掌握理解這部分內(nèi)容,需要的朋友可以參考下2017-09-09通過(guò)Java壓縮JavaScript代碼實(shí)例分享
這篇文章主要介紹了通過(guò)Java壓縮JavaScript代碼實(shí)例分享,具有一定參考價(jià)值,需要的朋友可以了解下。2017-12-12SpringBoot中mapper.xml文件存放的兩種實(shí)現(xiàn)位置
這篇文章主要介紹了SpringBoot中mapper.xml文件存放的兩種實(shí)現(xiàn)位置,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01