日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java中的mybatis作用_mybatis作用、基本使用、小结

發(fā)布時間:2023/12/14 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中的mybatis作用_mybatis作用、基本使用、小结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1. MyBatis

1.1. 作用

MyBatis是持久層框架,它是支持JDBC的!簡化了持久層開發(fā)!

使用MyBatis時,只需要通過接口指定數(shù)據(jù)操作的抽象方法,然后配置與之關(guān)聯(lián)的SQL語句,即可完成!

持久化存儲:在程序運(yùn)行過程中,數(shù)據(jù)都是在內(nèi)存(RAM,即內(nèi)存條)中的,內(nèi)存中的數(shù)據(jù)不是永久存儲的,例如程序可以對這些數(shù)據(jù)進(jìn)行銷毀,或者由于斷電也會導(dǎo)致內(nèi)存中所有數(shù)據(jù)丟失!而把數(shù)據(jù)存儲到硬盤中的某個文件中,會使得這些數(shù)據(jù)永久的存儲下來,常見做法是存儲到數(shù)據(jù)庫中,當(dāng)然,也可以使用其它技術(shù)把數(shù)據(jù)存儲到文本文件、XML文件等其它文件中!

1.2. 基本使用

1.2.1. 創(chuàng)建項目

使用此前相同的創(chuàng)建流程即可!注意:請檢查有沒有多余的配置,如果有,請刪除,例如在spring.xml是否存在攔截器的配置!

此次使用MyBatis框架,所以,需要添加新的依賴:

org.mybatis

mybatis

3.4.6

如果下載的依賴jar包是損壞的,應(yīng)該先關(guān)閉Eclipse,然后刪除對應(yīng)的jar包文件,再次啟動Eclipse,對項目點(diǎn)擊右鍵,選擇Maven > Update Project,并且在彈出的對話框中勾選Force Update ...選項即可。

MyBatis是一個獨(dú)立的框架,即只添加該依賴就可以實(shí)現(xiàn)持久層編程,但是,開發(fā)過程相對比較繁瑣,而實(shí)際應(yīng)用中,通常會與Spring、SpringMVC一起使用,整合使用時,可以簡化大量的配置,使得開發(fā)更加簡便!整合時,還需要添加相關(guān)依賴:

org.mybatis

mybatis-spring

1.3.2

整合的SSM框架是基于JDBC的,所以,還需要添加spring-jdbc的依賴:

org.springframework

spring-jdbc

3.2.8.RELEASE

添加以上依賴時,直接將此前的spring-webmvc的依賴代碼復(fù)制一次,將spring-webmvc改成spring-jdbc即可!凡是Spring官方(Group ID是org.springframework)推出的以spring-作為前綴的依賴,必須使用相同的版本,否則,可能存在不兼容的風(fēng)險!

在實(shí)現(xiàn)過程中,肯定得先建立與數(shù)據(jù)庫的連接,然后再繼續(xù)編程,所以,還應(yīng)該添加數(shù)據(jù)源管理的依賴,即數(shù)據(jù)庫連接池的依賴:

commons-dbcp

commons-dbcp

1.4

由于本次將使用MySQL數(shù)據(jù)庫,所以,還需要該數(shù)據(jù)庫的連接驅(qū)動的依賴:

mysql

mysql-connector-java

5.1.8

1.2.2. 創(chuàng)建數(shù)據(jù)庫與數(shù)據(jù)表

創(chuàng)建數(shù)據(jù)庫tedu_mybatis:

CREATE DATABASE tedu_mybatis;

創(chuàng)建數(shù)據(jù)表t_user:

CREATE TABLE t_user(

id INT AUTO_INCREMENT,

username VARCHAR(20) UNIQUE NOT NULL,

password VARCHAR(20) NOT NULL,

age INT,

phone VARCHAR(20) ,

email VARCHAR(30),

PRIMARY KEY(id)

) DEFAULT CHARSET=UTF8;

1.2.3. 配置數(shù)據(jù)源

在src\main\resources下創(chuàng)建db.properties文件,用于配置與數(shù)據(jù)庫連接相關(guān)的信息:

url=jdbc:mysql://localhost:3306/tedu_mybatis?useUnicode=true&characterEncoding=utf8

driver=com.mysql.jdbc.Driver

username=root

password=root

initialSize=2

maxActive=10

以上配置的值以自己使用的數(shù)據(jù)庫為準(zhǔn)!

以上配置需要被應(yīng)用到項目中,則在Spring的配置中通過可以讀取該文件:

location="classpath:db.properties" />

最后,需要把這些配置應(yīng)用到數(shù)據(jù)源(數(shù)據(jù)庫連接池)中,當(dāng)前項目使用的是Apache的commons-dbcp,則對應(yīng)的數(shù)據(jù)源是BasicDataSource類:

class="org.apache.commons.dbcp.BasicDataSource">

value="#{dbconfig.url}" />

value="#{dbconfig.driver}" />

value="#{dbconfig.username}" />

value="#{dbconfig.password}" />

value="#{dbconfig.initialSize}" />

value="#{dbconfig.maxActive}" />

完成以上配置后,可以測試到目前為止的配置是否正確,做法就是:獲取BasicDataSource的對象,調(diào)用它的getConnection()方法,嘗試在Java程序中獲取與數(shù)據(jù)庫的連接,如果能夠正常連接,則配置無誤,如配置有誤,將無法獲取連接:

@Test

public void getConnection() throws SQLException {

AbstractApplicationContext ac

= new ClassPathXmlApplicationContext(

"spring.xml");

BasicDataSource ds

= ac.getBean("dataSource", BasicDataSource.class);

Connection conn = ds.getConnection();

System.out.println(conn);

ac.close();

}

1.2.4. 通過MyBatis插入數(shù)據(jù)

MyBatis的編碼模式是:

創(chuàng)建接口,并聲明數(shù)據(jù)訪問的抽象方法;

配置與抽象方法對應(yīng)的XML映射。

首先,創(chuàng)建cn.tedu.mybatis.entity.User實(shí)體類,并添加與t_user數(shù)據(jù)表匹配的屬性。

通常,每張數(shù)據(jù)表都有一個與之匹配的實(shí)體類!

創(chuàng)建cn.tedu.mybatis.mapper.UserMapper接口,并在接口中聲明抽象方法:

Integer insert(User user);

在MyBatis中,執(zhí)行insert/update/delete操作時,均返回受影響的行數(shù),所以,設(shè)計抽象方法時,如果對應(yīng)的是這幾種操作,返回值均設(shè)計為Integer類型。

通常,一個完整的項目中,會存在許多MyBatis的映射文件,為了便于管理,會在src\main\resources下創(chuàng)建一個名為mappers的文件夾,然后,下載共享的SomeMapper.zip,將解壓得到的XML文件復(fù)制到剛才創(chuàng)建的mappers文件夾中:

其實(shí),在mappers下的映射文件的名稱并不重要!但是,為了便于管理,通常會使用與接口對應(yīng)的名稱,所以,將SomeMapper.xml重命名為UserMapper.xml。

所有映射文件中,根節(jié)點(diǎn)都是節(jié)點(diǎn),且該節(jié)點(diǎn)必須配置名為namespace的屬性,屬性值是對應(yīng)的Java接口,例如:

經(jīng)過以上配置,指定了XML映射文件與接口文件的對應(yīng)關(guān)系。

然后,在該文件內(nèi)部,使用各級子節(jié)點(diǎn)配置與抽象方法的對應(yīng)關(guān)系,子節(jié)點(diǎn)名稱的選取,取決于要執(zhí)行的操作的類型,例如要執(zhí)行的數(shù)據(jù)操作是insert類型,則使用節(jié)點(diǎn),這些節(jié)點(diǎn)都必須指定id屬性,屬性值是與之對應(yīng)的抽象方法的方法名:

在節(jié)點(diǎn)中,添加parameterType屬性,用于指定參數(shù)的類型,即抽象方法中的參數(shù)類型:

parameterType="cn.tedu.mybatis.entity.User">

然后,在節(jié)點(diǎn)內(nèi)部,編寫需要執(zhí)行的SQL語句:

parameterType="cn.tedu.mybatis.entity.User">

INSERT INTO t_user (

username, password,

age, phone, email

) VALUES (

#{username}, #{password},

#{age}, #{phone}, #{email}

)

執(zhí)行SQL語句時的參數(shù)值均使用#{}類似的語法,其中的名稱是User類中的屬性名:

1.2.5. 最后的配置

首先,需要配置SqlSessionFactoryBean,通過它指定數(shù)據(jù)源與XML映射的文件位置:

ref="dataSource" />

value="classpath:mappers/*.xml" />

以上配置中,XML映射文件的位置使用了mappers/*.xml,即:在mappers文件夾下的所有XML文件都應(yīng)該是MyBatis的映射文件,所以,后續(xù)使用時,不可以在這個文件夾中存放其它XML文件。

然后,還需要配置MapperScannerConfigurer,用于指定接口文件在哪里:

value="cn.tedu.mybatis.mapper" />

至此,配置完成!

1.2.6. 執(zhí)行單元測試

在src\test\java下創(chuàng)建測試類,并添加測試方法,以執(zhí)行測試:

@Test

public void insert() {

// 加載Spring配置文件,獲取Spring容器

AbstractApplicationContext ac

= new ClassPathXmlApplicationContext(

"spring.xml");

// 從Spring容器中獲取對象

// bean-id與接口名一致,首字母為小寫

UserMapper userMapper

= ac.getBean("userMapper", UserMapper.class);

// 測試功能

User user = new User();

user.setUsername("root");

user.setPassword("1234");

Integer rows = userMapper.insert(user);

System.out.println("rows=" + rows);

// 釋放資源

ac.close();

}

1.2.7. 小結(jié)

關(guān)于配置

使用MyBatis添加了一些新的依賴,及一些配置,這些屬于固定的一次性操作,在后續(xù)的項目中,每個項目中只需要做1次即可。

關(guān)于這些配置,需要記住配置的作用,及可能需要修改的位置,至少包括:

db.properties的文件名,因?yàn)樾枰褂盟?#xff1b;

在db.properties中配置的值,重點(diǎn)是數(shù)據(jù)庫名稱、訪問數(shù)據(jù)庫的密碼,在更換項目或更換計算機(jī)后都可能需要調(diào)整;

在配置SqlSessionFactoryBean時指定的映射文件的位置;

在配置MapperScannerConfigurer時指定的接口文件所在的包;

關(guān)于開發(fā)

每張數(shù)據(jù)表,都應(yīng)該有1個與之對應(yīng)的實(shí)體類;

每種數(shù)據(jù)(視為每個實(shí)體類)的處理都應(yīng)該有對應(yīng)的接口文件,例如項目中有User實(shí)體類,則應(yīng)該有UserMapper接口;

在接口中聲明抽象方法時,如果最終將執(zhí)行insert/delete/update操作,返回值類型應(yīng)該是Integer;

每個持久層接口,都應(yīng)該有對應(yīng)的XML映射文件,例如有UserMapper.java接口,就應(yīng)該有UserMapper.xml文件;

在配置XML文件內(nèi)部,根據(jù)執(zhí)行操作選擇節(jié)點(diǎn),如果執(zhí)行的是insert操作,則通過節(jié)點(diǎn)進(jìn)行配置;

在XML映射中,每個節(jié)點(diǎn)都必須配置id屬性,取值是接口中抽象方法的名稱,由于id具有唯一的特性,所以,在接口中聲明抽象方法時,不要使用重載;

在配置SQL語句時,使用#{}表示預(yù)編譯時的?對應(yīng)的值,括號中的名稱是參數(shù)名稱,或參數(shù)對象中的屬性名稱;

當(dāng)執(zhí)行delete/update時,配置的節(jié)點(diǎn)不需要指定parameterType屬性。

1.2.7. 刪除指定的數(shù)據(jù)

設(shè)置目標(biāo)為根據(jù)id刪除指定的數(shù)據(jù)。

先在接口中聲明抽象方法:

Integer deleteUserById(Integer id);

然后,在XML映射中配置以上方法對應(yīng)的節(jié)點(diǎn):

DELETE FROM t_user WHERE id=#{id}

然后,執(zhí)行單元測試:

@Test

public void deleteUserById() {

// 加載Spring配置文件,獲取Spring容器

AbstractApplicationContext ac

= new ClassPathXmlApplicationContext(

"spring.xml");

// 從Spring容器中獲取對象

// bean-id與接口名一致,首字母為小寫

UserMapper userMapper

= ac.getBean("userMapper", UserMapper.class);

// 測試功能

Integer id = 3;

Integer rows = userMapper.deleteUserById(id);

System.out.println("rows=" + rows);

// 釋放資源

ac.close();

}

-------------------------------

總結(jié)

以上是生活随笔為你收集整理的java中的mybatis作用_mybatis作用、基本使用、小结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。