MyBatis框架簡(jiǎn)介及入門案例詳解
前言
傳統(tǒng)的JDBC操作數(shù)據(jù)庫(kù)都是通過(guò)寫一個(gè)java類,在類中調(diào)用接口下的API執(zhí)行相應(yīng)的SQL,存在大量的硬編碼。試想,若是開發(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,使開發(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代理開發(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?boot?使用?@Scheduled?注解和?TaskScheduler?接口實(shí)現(xiàn)定時(shí)任務(wù)
這篇文章主要介紹了spring?boot?使用?@Scheduled?注解和?TaskScheduler?接口實(shí)現(xiàn)定時(shí)任務(wù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06
SpringBoot使用DevTools實(shí)現(xiàn)后端熱部署的過(guò)程詳解
在Spring Boot項(xiàng)目中,Spring Boot官方提供你了Devtools熱部署模塊,通過(guò)maven的方式導(dǎo)入就能使用,本文主要SpringBoot通過(guò)DevTools實(shí)現(xiàn)熱部署,感興趣的朋友一起看看吧2023-11-11
Spring主配置文件(applicationContext.xml) 導(dǎo)入約束詳解
在本篇文章里我們給各位整理的是關(guān)于Spring主配置文件(applicationContext.xml) 導(dǎo)入約束的相關(guān)知識(shí)點(diǎn)內(nèi)容,需要參考下。2019-08-08
Java ArrayList中存放引用數(shù)據(jù)類型的方式
這篇文章主要介紹了Java ArrayList中存放引用數(shù)據(jù)類型的方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
Java 基于AQS實(shí)現(xiàn)自定義同步器的示例
這篇文章主要介紹了Java 基于AQS實(shí)現(xiàn)自定義同步器的示例,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下2021-03-03
Log4j定時(shí)打印日志及添加模塊名配置的Java代碼實(shí)例
這篇文章主要介紹了Log4j定時(shí)打印日志及添加模塊名配置的Java代碼實(shí)例,Log4j是Apache的一個(gè)開源Java日志項(xiàng)目,需要的朋友可以參考下2016-01-01
Java實(shí)現(xiàn)Excel百萬(wàn)級(jí)數(shù)據(jù)導(dǎo)入功能的示例代碼
這篇文章主要為大家詳細(xì)介紹了Java如何實(shí)現(xiàn)Excel百萬(wàn)級(jí)數(shù)據(jù)導(dǎo)入功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考下2024-04-04
Java 的雙重分發(fā)與 Visitor 模式實(shí)例詳解
這篇文章主要介紹了Java 的雙重分發(fā)與 Visitor 模式實(shí)例詳解,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-07-07

