第5章 Spring Boot訪問SQL數(shù)據(jù)庫_第1頁
第5章 Spring Boot訪問SQL數(shù)據(jù)庫_第2頁
第5章 Spring Boot訪問SQL數(shù)據(jù)庫_第3頁
第5章 Spring Boot訪問SQL數(shù)據(jù)庫_第4頁
第5章 Spring Boot訪問SQL數(shù)據(jù)庫_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第5章SpringBoot訪問

SQL數(shù)據(jù)庫第5章SpringBoot訪問SQL數(shù)據(jù)庫5.1

配置數(shù)據(jù)源5.2

使用JdbcTemplate5.3

使用SpringDataJPA5.4

整合MyBatis25.1配置數(shù)據(jù)源數(shù)據(jù)庫分為兩種,即關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫。關(guān)系型數(shù)據(jù)庫是指通過關(guān)系模型組織數(shù)據(jù)的數(shù)據(jù)庫,并且可以利用外鍵等保持一致性,如MySQL、Oracle、SQLServer等;而非關(guān)系型數(shù)據(jù)庫其實不像是數(shù)據(jù)庫,更像是一種以key-value模式存儲對象的結(jié)構(gòu),如Redis、MangoDB等。

SpringFramework為訪問SQL數(shù)據(jù)庫提供了廣泛的支持。從直接使用JdbcTemplate進(jìn)行JDBC訪問到完全的對象關(guān)系映射(objectrelationalmapping)技術(shù),比如Hibernate、Mybatis。SpringData提供了更多級別的功能,直接從接口創(chuàng)建的Repository實現(xiàn),并使用了約定從方法名生成查詢。本節(jié)講解SpringBoot如何使用MySQL、SQLServer、Oracle等不同的關(guān)系型數(shù)據(jù)庫。

35.1配置數(shù)據(jù)源1.使用MySQL數(shù)據(jù)庫在SpringBoot中使用MySQL數(shù)據(jù)庫,以MySQL8.0為例,在pom.xml文件中添加依賴,并在perties文件中配置數(shù)據(jù)源信息。(1)在pom.xml文件中添加MySQL依賴,代碼如下所示。

(2)在perties配置文件中配置數(shù)據(jù)源信息,代碼如下所示。4<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<scope>runtime</scope></dependency>

#數(shù)據(jù)庫驅(qū)動spring.datasource.driver-class-name=

com.mysql.cj.jdbc.Driver#數(shù)據(jù)庫地址spring.datasource.url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC#數(shù)據(jù)庫用戶名spring.datasource.username=root#數(shù)據(jù)庫密碼spring.datasource.password=1234565.1配置數(shù)據(jù)源2.使用SQLServer數(shù)據(jù)庫

在SpringBoot中使用SQLServer數(shù)據(jù)庫。(1)在pom.xml文件中添加SQLServer依賴,代碼如下所示。

(2)在perties配置文件中配置數(shù)據(jù)源信息,代碼如下所示。5<dependency>

<groupId>com.microsoft.sqlserver</groupId>

<artifactId>mssql-jdbc</artifactId>

<scope>runtime</scope></dependency>

spring.datasource.driver-class-name=

com.microsoft.sqlserver.jdbc.SQLServerDriverspring.datasource.url=jdbc:sqlserver://localhost:1433;DatabaseName=testspring.datasource.username=saspring.datasource.password=1234565.1配置數(shù)據(jù)源3.使用Oracle數(shù)據(jù)庫在SpringBoot中使用Oracle數(shù)據(jù)庫。(1)在pom.xml文件中添加Oracle依賴,代碼如下所示。

(2)在perties配置文件中配置數(shù)據(jù)源信息,代碼如下所示。6<dependency>

<groupId>com.oracle.database.jdbc</groupId>

<artifactId>ojdbc8</artifactId>

<scope>runtime</scope></dependency>

spring.datasource.driver-class-name=

oracle.jdbc.driver.OracleDriverspring.datasource.url=jdbc:oracle:thin:@localhost:1521:testspring.datasource.username=adminspring.datasource.password=1234565.2使用JdbcTemplate

JDBC(JavaDataBaseConnectivity)是用于連接數(shù)據(jù)庫的規(guī)范,也就是用于執(zhí)行數(shù)據(jù)庫SQL語句的JavaAPI。JdbcTemplate是Spring對JDBC的封裝,目的是讓JDBC更加易于使用,替我們完成所有的JDBC底層工作。因此,對于數(shù)據(jù)庫的操作,不再需要每次都進(jìn)行連接、打開、關(guān)閉了。通過JdbcTemplate不需要進(jìn)行全局修改,就可以輕松地應(yīng)對開發(fā)人員常常要面對的增刪改查的操作。更為關(guān)鍵的是,JdbcTemplate對象也是通過自動配置機(jī)制注冊到Ioc容器中,自動化配置類是JdbcTemplateAutoConfiguration。在JdbcTemplate中,提供了大量的查詢和更新數(shù)據(jù)庫的方法,SpringJDBC就是使用這些方法來操作數(shù)據(jù)庫的,使用JdbcTemplate類可實現(xiàn)對數(shù)據(jù)表的數(shù)據(jù)進(jìn)行增刪改查操作。75.2.1JdbcTemplate增刪改的操作

update()方法可以完成增加、修改和刪除操作,其常用方法具體介紹如下。intupdate(Stringsql):該方法是最簡單的update方法重載形式,可以直接傳入SQL語句并返回受影響的行數(shù)。intupdate(PreparedStatementCreatorpsc):該方法執(zhí)行從PreparedStatementCreator返回的語句,然后返回受影響的行數(shù)。intupdate(Stringsql,PreparedStatementSetterpss):該方法通過PreparedStatementSetter設(shè)置SQL語句中的參數(shù),并返回受影響的行數(shù)。intupdate(Stringsql,Object...args):該方法使用Object...args設(shè)置SQL語句中的參數(shù),要求參數(shù)不能為空,并返回受影響的行數(shù)。85.2.1JdbcTemplate增刪改的操作下面通過示例講解使用JdbcTemplate的update()方法實現(xiàn)對MySQL數(shù)據(jù)庫中的數(shù)據(jù)表進(jìn)行增刪改的操作,步驟如下。

(1)在MySQL數(shù)據(jù)庫中,新建一個chapter05的數(shù)據(jù)庫,并在新建user數(shù)據(jù)表,輸入幾條記錄,其表結(jié)構(gòu)如圖5-1所示。(2)新建一個SpringBoot工程chapter05jdbctemplate,Group和Packagename為com.yzpc,在Dependencies依賴中選擇Web節(jié)點下的SpringWeb依賴和SQL節(jié)點下的JDBCAPI、MySQLDriver依賴,單擊Finish按鈕,如圖5-2所示。pom.xml文件中添加的依賴代碼,代碼如下所示。9<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency>5.2.1JdbcTemplate增刪改的操作

在項目的perties配置文件中配置數(shù)據(jù)庫基本連接信息,這樣JdbcTemplate才能正常連接到數(shù)據(jù)庫,如下所示。(3)在項目src/main/java/路徑下的com.yzpc包中,新建一個pojo包,并在該包中新建User實體類,代碼如下所示。(4)在項目src/main/java/路徑下的com.yzpc包中,新建一個dao包,并在該包中新建UserDao接口,并在接口中定義添加、修改、刪除用戶的方法,代碼如下所示。在com.yzpc.dao包中,新建一個impl包,在該包中創(chuàng)建UserDao接口的實現(xiàn)類UserDaoImpl,并在類中實現(xiàn)添加、修改和刪除的方法,這里已添加為例,代碼如下所示。10spring.datasource.driver-class-name=

com.mysql.cj.jdbc.Driverspring.datasource.url=jdbc:mysql://localhost:3306/chapter05?&serverTimezone=UTCspring.datasource.username=rootspring.datasource.password=123456packagecom.yzpc.pojo;publicclassUser{

privateintid;

privateStringusername;

privateStringpassword;

//此處省略構(gòu)造方法

//此處省略相應(yīng)屬性的setter/getter方法

//重寫toString方法

@Override

publicStringtoString(){

return"User{"+"id="+id+",username='"+username+'\''+",password='"+password+'\''+'}';}}packagecom.yzpc.dao;importcom.yzpc.pojo.User;publicinterfaceUserDao{

publicintaddUser(Useruser);

publicintupdateUser(Useruser);

publicintdeleteUser(intid);}@RepositorypublicclassUserDaoImplimplementsUserDao{

@Autowired

privateJdbcTemplatejdbcTemplate;

@Override

publicintaddUser(Useruser){

returnjdbcTemplate.update("insertintouser(username,password)values(?,?)",user.getUsername(),user.getPassword());}

//省略updateUser()、deleteUser()方法}5.2.1JdbcTemplate增刪改的操作(5)在src/main/java/路徑下的com.yzpc包中,新建一個controller包,在該包中新建UserController類,并在該類中添加增加、刪除、修改的方法,這里以添加用戶功能為例,代碼如下所示。

(6)啟動項目,在瀏覽器中訪問http://localhost:8080/addUser,插入數(shù)據(jù)成功的話,可以看到控制臺輸出了相應(yīng)的提示信息,如圖5-3所示。在瀏覽器的頁面上也輸出了同樣的提示信息,如圖5-4所示。11@RestControllerpublicclassUserController{//使用@Autowired注解實現(xiàn)UserController對UserDao的依賴注入

@Autowired

privateUserDaouserDao;

@GetMapping("/addUser")

publicStringaddUser(){

intresult=userDao.addUser(newUser("yzpc1","yzpc1"));

Stringmessage;

if(result>0){

message=“成功往數(shù)據(jù)表中插入了

"+result+"條數(shù)據(jù)!";}else{

message="插入數(shù)據(jù)失??!";}

System.out.println(message);

returnmessage;}

//省略updateUser()、deleteUser()方法}5.2.2JdbcTemplate查詢的操作JdbcTemplate對JDBC的流程做了封裝,提供了大量的query()方法來處理各種對數(shù)據(jù)庫表的查詢操作,常用的query()方法如下:Listquery(Stringsql,PreparedStatementSetterpss,RowMapperrowMapper)

Listquery(Stringsql,Object[]args,RowMapperrowMapper)

queryForObject(Stringsql,Object[]args,RowMapperrowMapper)

queryForList(Stringsql,Object[]args,class<T>elementType)125.2.2JdbcTemplate查詢的操作下面我們嘗試一下從user表中查詢數(shù)據(jù),在UserDao接口中增加按照id查詢用戶的方法和查詢所有用戶的方法,在UserDaoImpl中具體實現(xiàn)兩個方法,其實現(xiàn)步驟如下:(1)在UserDao接口中,分別創(chuàng)建一個通過id查詢單個用戶信息和查詢所有用戶信息的方法,代碼如下所示。(2)在UserDao接口實現(xiàn)類UserDaoImpl中,實現(xiàn)接口中的方法,并使用query()方法分別進(jìn)行查詢,代碼如下所示。(3)在UserController類中,添加查詢方法getUserById()、getAllUser()來進(jìn)行查詢,代碼如下所示。13publicUsergetUserById(intid);publicList<User>getAllUser();//實例化BeanPropertyRowMapper對象,將結(jié)果集通過Java的反射機(jī)制映射到Java對象中RowMapper<User>rowMapper=newBeanPropertyRowMapper<User>(User.class);@OverridepublicUsergetUserById(intid){

Stringsql="select*fromuserwhereid=?";

returnjdbcTemplate.queryForObject(sql,rowMapper,id);}@OverridepublicList<User>getAllUser(){

Stringsql="select*fromUser";

returnjdbcTemplate.query(sql,rowMapper);}@GetMapping("/getUserById")publicUsergetUserById(intid){

Useruser;

user=userDao.getUserById(id);

if(user!=null){

System.out.println("查詢id為"+id+"的User對象為:"

+user);}

returnuser;}@GetMapping("/getAllUser")publicList<User>getAllUser(){

List<User>users=userDao.getAllUser();

if(users!=null){

System.out.println("所有User對象列表為:");

for(Useruser:users){//循環(huán)輸出結(jié)集合中對象

System.out.println(user);}}

returnusers;}5.2.2JdbcTemplate查詢的操作

(4)重新運(yùn)行項目,在瀏覽器中訪問http://localhost:8080/getUserById?id=10001,根據(jù)id查詢用戶控制臺輸出結(jié)果,如圖5-9所示。

訪問http://localhost:8080/getAllUser,查詢所有用戶控制臺輸出結(jié)果,如圖5-10所示。

如果查詢一個不存在的數(shù)據(jù),例如http://localhost:8080/getUserById?id=10006,控制臺拋出了錯誤異常,如圖5-11所示。145.2.2JdbcTemplate查詢的操作

查看DataAccessUtils源代碼,看到nullableSingleResult在查到空集合的時候,默認(rèn)拋出了EmptyResultDataAccessException異常,代碼如下所示。修改getUserById()方法代碼,在方法體內(nèi)捕獲EmptyResultDataAccessException異常,代碼修改如下所示。重新啟動項目,測試方法和前面一致。同樣,對于getAllUser()方法,去執(zhí)行查詢查詢操作時,假設(shè)數(shù)據(jù)表中沒有數(shù)據(jù),也會拋出EmptyResultDataAccessException,在getAllUser()方法體內(nèi)補(bǔ)獲異常的方法和在getUserById()方法體中基本一致。15@Nullablepublicstatic<T>TnullableSingleResult(@NullableCollection<T>results)throwsIncorrectResultSizeDataAccessException

{

if(CollectionUtils.isEmpty(results)){

thrownewEmptyResultDataAccessException(1);}elseif(results.size()>1){

thrownewIncorrectResultSizeDataAccessException(1,results.size());}else{

returnresults.iterator().next();}}@GetMapping("/getUserById")publicUsergetUserById(intid){

Useruser=null;

try{user=userDao.getUserById(id);

if(user!=null){

System.out.println("查詢id為"+id+"的User對象為:"+user);}}catch(EmptyResultDataAccessExceptione){

System.err.println("未查詢到id為

"+id+"的記錄!");

returnnull;}

returnuser;}5.3使用SpringDataJPA

5.3.1SpringDataJPA介紹

SpringData是Spring的一個子項目,旨在統(tǒng)一和簡化各類型數(shù)據(jù)的持久化存儲方式,而不局限于是關(guān)系型數(shù)據(jù)還是非關(guān)系型數(shù)據(jù)庫。JPA(JavaPersistenceAPI)即Java的持久層的API,用于對象的持久化,它是一個非常強(qiáng)大的ORM持久化的解決方案。JPA是一個規(guī)范化接口,封裝了Hibernate的操作作為默認(rèn)實現(xiàn),讓用戶不通過任何配置即可完成數(shù)據(jù)庫的操作。SpringData在JPA規(guī)范的基礎(chǔ)上,充分利用其優(yōu)點,提出了SpringDataJPA模塊對具有ORM關(guān)系數(shù)據(jù)進(jìn)行持久化操作。JPA、SpringData和Hibernate關(guān)系,如圖5-12所示。165.3.1SpringDataJPA介紹

SpringDataJPA是Spring在ORM框架、JPA規(guī)范的基礎(chǔ)上封裝的一套新的JPA應(yīng)用規(guī)范,也是靠Hibernate等ORM框架實現(xiàn)的一種解決方案。它提供了增刪改查等功能,可以使用較少的代碼實現(xiàn)數(shù)據(jù)操作,同時還易于擴(kuò)展。SpringDataJPA是Spring提供的一套對JPA操作更加高級的封裝,是在JPA規(guī)范下的專門用來進(jìn)行數(shù)據(jù)持久化的解決方案。SpringDataJPA通過基于JPA的Repository極大地簡化了JPA的寫法,在幾乎不寫實現(xiàn)的情況下,實現(xiàn)數(shù)據(jù)庫的訪問和操作。使用SpringDataJPA建立數(shù)據(jù)訪問層十分方便,只需要定義一個繼承JpaRepository接口的接口即可。繼承了JpaRepository接口的自定義訪問接口,具有JpaRepository接口的所有數(shù)據(jù)訪問操作方法,JpaRepository接口的源代碼如下所示。17@NoRepositoryBeanpublicinterfaceJpaRepository<T,ID>extendsPagingAndSortingRepository<T,ID>,QueryByExampleExecutor<T>{List<T>findAll(); //查找所有實體List<T>findAll(Sortvar1); //排序、查找所有實體List<T>findAllById(Iterable<ID>var1);//返回指定一組ID實體<SextendsT>List<S>saveAll(Iterable<S>var1);//保存集合

voidflush(); //執(zhí)行緩存與數(shù)據(jù)庫同步<SextendsT>SsaveAndFlush(Svar1);//強(qiáng)制執(zhí)行持久化

voiddeleteInBatch(Iterable<T>var1);

//刪除一個實體集合

voiddeleteAllInBatch(); //刪除所有實體TgetOne(IDvar1);//返回ID對應(yīng)的實體。若不存在,則返回空值

//查詢滿足Example的所有對象<SextendsT>List<S>findAll(Example<S>var1);

//查詢滿足Example的所有對象,并且進(jìn)行排序返回<SextendsT>List<S>findAll(Example<S>var1,Sortvar2);}5.3.1SpringDataJPA介紹

JpaRepository接口繼承了PagingAndSortingRepository接口、QueryByExampleExecutor接口,JpaRepository接口的繼承關(guān)系,如圖5-13所示。JpaRepository接口繼承關(guān)系中涉及的接口進(jìn)行說明:Repository接口是SpringDataJPA提供的用于自定義Repository接口的頂級父接口,該接口中沒有聲明任何方法。CrudRepository接口是Repository的繼承接口之一,包含了一些基本的CRUD方法。PagingAndSortingRepository接口繼承CrudRepository接口的同時,提供了分頁和排序兩個方法。QueryByExampleExecutor接口是進(jìn)行條件封裝查詢的頂級父接口,允許通過Example實例執(zhí)行復(fù)雜條件查詢。185.3.2整合SpringDataJPA下面通過示例來講解SpringBoot整合SpringDataJPA,步驟如下:(1)新建一個SpringBoot工程chapter05jpa,Group和Packagename為com.yzpc,在Dependencies依賴中選擇Web節(jié)點下的SpringWeb依賴和SQL節(jié)點下的SpringDataJPA、MySQLDriver依賴,單擊Finish按鈕,如圖5-14所示。pom.xml中自動添加的依賴代碼,如下所示。

(2)在perties配置文件中加入數(shù)據(jù)庫配置,與5.2.1小節(jié)第(2)步中介紹的一致。新建一個chapter05jpa的數(shù)據(jù)庫,接下來設(shè)置JPA的基本配置,如下所示。19<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!--省略Web中SpringWeb依賴和SQL中的MySQlDriver依賴代碼-->#省略數(shù)據(jù)庫配置的設(shè)置,參看5.2.1小節(jié)第(2)步,數(shù)據(jù)庫使用chapter05jpa#JPA對應(yīng)的數(shù)據(jù)庫類型spring.jpa.database=mysql#在控制臺打印SQLspring.jpa.show-sql=true#update:項目啟動,加載Hibernate時,根據(jù)實體類類更新數(shù)據(jù)庫中的表#validate:在加載Hibernate時,驗證創(chuàng)建數(shù)據(jù)表的結(jié)構(gòu)#create:每次加載Hibernate時,重新創(chuàng)建數(shù)據(jù)表結(jié)構(gòu),造成數(shù)據(jù)丟失#create-drop:加載Hibernate時創(chuàng)建,退出時刪除表結(jié)構(gòu)#none:啟動時不做任何操作spring.jpa.hibernate.ddl-auto=create5.3.2整合SpringDataJPA

(3)在項目的src/mian/java/路徑下的com.yzpc包中,新建一個pojo包,并在該包中新建一個User實體類,添加JPA對應(yīng)的注解進(jìn)行映射配置,代碼如下所示。(4)在項目的src/mian/java/路徑下的com.yzpc包中,新建一個repository包,并在該包中新建一個用于對數(shù)據(jù)庫表user進(jìn)行操作的接口UserRepository,代碼如下所示。(5)在項目的src/mian/java/路徑下的com.yzpc包中,新建一個controller包,并在該包中新建一個用于測試的類UserController,這里以存儲用戶和添加用戶為例,代碼如下所示。205.3.2整合SpringDataJPA(6)啟動項目,在控制臺輸出Hibernate的相關(guān)語句,如圖5-15所示。這是因為,在perties配置文件中spring.jpa.hibernate.ddl-auto的值設(shè)置為create,即通過Hibernate實現(xiàn)數(shù)據(jù)表單的創(chuàng)建。通過SQLyog工具,查看數(shù)據(jù)庫,發(fā)現(xiàn)user數(shù)據(jù)表已經(jīng)創(chuàng)建,但并沒有記錄,下面分別來測試相應(yīng)的方法實現(xiàn)。訪問http://localhost:8080/saveUser,查看控制臺,如圖5-16所示;查看數(shù)據(jù)表,如圖5-17所示。

訪問http://localhost:8080/addUser?username=sj&password=sj,查看控制臺輸出。就可以看到一條insert的插入語句,查看數(shù)據(jù)表,發(fā)現(xiàn)增加了一條記錄,查看數(shù)據(jù)表,如圖所示。215.3.2整合SpringDataJPA

訪問http://localhost:8080/updateUser?id=4&username=sss&password=sss,查看數(shù)據(jù)表發(fā)現(xiàn)id為4的記錄的username和password字段都已經(jīng)修改為sss,如圖所示。

訪問http://localhost:8080/deleteUser?id=4,查看數(shù)據(jù)表,id為4記錄已經(jīng)被刪除,如圖所示。

訪問http://localhost:8080/getUserById?id=3,網(wǎng)頁頁面輸出id為3的記錄,如圖所示;查看控制臺,輸出相關(guān)信息,如圖所示。

訪問http://localhost:8080/getAllUser,查詢所有用戶信息,網(wǎng)頁頁面顯示查詢的所有用戶,如圖所示;控制臺輸出查詢的所有用戶,如圖所示。225.3.2整合SpringDataJPA

訪問http://localhost:8080/findUserById?id=2,這里調(diào)用的是UserRepository接口中的自定義的方法,查詢id為2的用戶信息,控制臺輸出該用戶,如圖所示。

訪問http://localhost:8080/findUserByName?username=admin,查詢username為admin的用戶信息,控制臺輸出,如圖所示。

訪問http://localhost:8080/findMaxIdUser,查詢最大id號的用戶信息,控制臺輸出,如圖所示。

如果數(shù)據(jù)表中沒有記錄,或者要操作的條件不存在,可能會出現(xiàn)異常,大家可以參考5.2小節(jié)中對于相關(guān)異常的處理。235.4整合MyBatisMyBatis和JPA一樣,也是一款優(yōu)秀的持久層框架,它支持定制化SQL、存儲過程以及高級映射,避免了幾乎所有的JDBC代碼和手動設(shè)置參數(shù)以及獲取結(jié)果集。5.4.1基于XML配置的方式整合MyBatis下面通過具體的示例來講解SpringBoot整合MyBatis,具體步驟如下。(1)新建一個SpringBoot工程chapter05mybatis,Group和Packagename為com.yzpc,在Dependencies依賴中選擇Web節(jié)點下的SpringWeb依賴和SQL節(jié)點下的MyBatisFramework、MySQLDriver依賴。pom.xml中自動添加的依賴代碼,如下所示。

在perties配置文件中加入數(shù)據(jù)庫連接配置,與5.2.1小節(jié)第(2)步中介紹的一致。24<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.0</version></dependency><!--省略Web中SpringWeb依賴和SQL中的MySQlDriver依賴代碼-->5.4.1基于XML配置的方式整合MyBatis(2)在MySQL中,創(chuàng)建一個名為chapter05mybatis的數(shù)據(jù)庫,在該數(shù)據(jù)庫中創(chuàng)建user數(shù)據(jù)表,并預(yù)先插入幾條測試數(shù)據(jù),相應(yīng)的SQL語句如下所示。(3)在項目的src/mian/java/路徑下的com.yzpc包中,新建一個pojo的包,并在該包中新建與數(shù)據(jù)表user對應(yīng)的實體類User,代碼如下所示。(4)在項目的src/mian/java/路徑下的com.yzpc包中,新建一個mapper的包,在并在該包中新建UserMapper的接口,代碼如下所示。25#創(chuàng)建數(shù)據(jù)庫CREATEDATABASEchapter05mybatis;#選擇使用數(shù)據(jù)庫USEchapter05mybatis;#創(chuàng)建user數(shù)據(jù)表并插入相關(guān)數(shù)據(jù)DROPTABLEIFEXISTSUSER;CREATETABLEUSER(idINT(10)NOTNULLAUTO_INCREMENT,usernameVARCHAR(20)DEFAULTNULL,passwordVARCHAR(20)DEFAULTNULL,PRIMARYKEY(id))ENGINE=INNODBDEFAULTCHARSET=utf8;INSERTINTOUSERVALUES(1,'admin','admin');INSERTINTOUSERVALUES(2,'yzpc','yzpc');INSERTINTOUSERVALUES(3,'my','my');packagecom.yzpc.pojo;publicclassUser{

privateintid;

privateStringusername;

privateStringpassword;

//此處省略相應(yīng)屬性的setter/getter方法

//此處省略構(gòu)造方法

//重寫toString方法}packagecom.yzpc.mapper;importcom.yzpc.pojo.User;importorg.apache.ibatis.annotations.Mapper;importjava.util.List;@Mapper //表明該接口是一個MyBatis中的MapperpublicinterfaceUserMapper{

publicintaddUser(Useruser);

publicintupdateUser(Useruser);

publicintdeleteUser(intid);

publicUsergetUserById(intid);

publicList<User>getAllUser();}5.4.1基于XML配置的方式整合MyBatis(5)在src/main/resources/路徑下新建mapper目錄,并在該目錄下,新建UserMapper.xml文件,對應(yīng)前面UserMapper接口的方法,#{}用來代替接口中的參數(shù),實體類中的屬性可以直接通過#{實體類屬性名}獲取,內(nèi)容如下所示。UserMapper.xml放在resources目錄下,這樣就不用擔(dān)心打包時被忽略了,但是放在resources目錄下,又不能自動被掃描到,此時在perties中添加mybatis掃描mapper的路徑,需要在perties配置文件中指定位置,代碼如下所示。UserMapper.xml除了放在resources目錄下,還可以是直接放在UserMapper所在的com.yzpc.mapper包下,該包下的UserMapper.xml會被自動掃描到,需要在pom.xml文件中再添加如下配置。26<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC“-////DTDMapper3.0//EN”

“/dtd/mybatis-3-mapper.dtd”>

<!--此處與接口類地址對應(yīng)-->

<mappernamespace=“com.yzpc.mapper.UserMapper”>

<!--此處與接口方法名對應(yīng),指定參數(shù)類型與返回結(jié)果類型-->

<insertid=“addUser”parameterType=“com.yzpc.pojo.User”>

insertintouser(username,password)values(#{username},#{password})

</insert>

<!--省略updateUser、deleteUser、getUserById--

>

<selectid="getAllUser"resultType="com.yzpc.pojo.User">

select*fromuser

</select>

</mapper>#指定映射xml文件位置#classpath對應(yīng)resources,*.xml表示配置mapper下所有xml文件mybatis.mapper-locations=classpath:mapper/*.xml<build><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes></resource><resource><directory>src/main/resources</directory></resource></resources></build>5.4.1基于XML配置的方式整合MyBatis(6)在項目的src/mian/java/路徑下的com.yzpc包中,新建controller包,在該包中新建UserController類,并在該類中添加增刪改查的方法,這里增加用戶為例,代碼如下所示。(7)啟動項目,在瀏覽器地址欄中,依次訪問增刪改查的請求,相應(yīng)請求如下。增加用戶:http://localhost:8080/addUser修改用戶:http://localhost:8080/updateUser刪除用戶:http://localhost:8080/deleteUser/4查詢用戶:http://localhost:8080/getUserById?id=3查詢所有用戶:http://localhost:8080/getAllUser

瀏覽器和控制臺上輸出了相應(yīng)信息,控制臺的運(yùn)行結(jié)果,如圖所示。27@RestControllerpublicclassUserController{

@Autowired

User

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論