溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

30分鐘入門MyBatis

發(fā)布時間:2020-08-07 22:04:03 來源:ITPUB博客 閱讀:168 作者:jaybril 欄目:MySQL數(shù)據(jù)庫

本文旨在用最通俗的語言講述最枯燥的基本知識

當項目框架SSH(spring、Struts、Hibernate)日落西山時,SSM(spring、SpringMVC、MyBatis)就大行其道,大部分項目都漸漸轉(zhuǎn)至SSM,因此 MyBatis 也成了Java程序員的必學知識,本文就mybatis的語法做一次小小的總結(jié),旨在讓讀者用最少的時間學會使用MyBatis。

文章提綱:

  1. 什么是MyBatis

  2. MyBatis的引入

  3. MyBatis的配置

  4. MyBatis的SQL語法

  5. 運行原理和實操一波

1. 什么是MyBatis

MyBatis的前身是Apache的一個開源項目ibatis,后來遷移到Google code就改名為MyBatis。

用網(wǎng)上已經(jīng)說爛了的話來說就是:

MyBatis是一款優(yōu)秀的持久層框架,它支持定制化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設(shè)置參數(shù)以及獲取結(jié)果集。MyBatis 可以使用簡單的 XML 或注解來配置和映射原生信息,將接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java對象)映射成數(shù)據(jù)庫中的記錄。

2. MyBatis的引入

  1. 如果是傳統(tǒng)的的項目,則直接下載相應jar包引入到項目中即可,下載地址為:



1

http://central.maven.org/maven2/org/mybatis/mybatis/3.4.6/mybatis-3.4.6.jar

  1. 如果為maven構(gòu)建的項目,則只需要在pom.xml中加入以下依賴然后reimport一下即可:



1


<

dependency

>


2    < groupId > org.mybatis </ groupId >
3    < artifactId > mybatis </ artifactId >
4    < version > x.x.x </ version >
5 </ dependency >
  1. 如果是gradle構(gòu)建的項目,則只需要在配置中添加以下代碼:



1

// https://mvnrepository.com/artifact/org.mybatis/mybatis

2 compile group: 'org.mybatis', name: 'mybatis', version: '3.4.6'

3. MyBatis的配置和初始化

在引入mybatis之后,接下來需要學習的mybatis的配置,雖然現(xiàn)在流行的框架像springboot等已經(jīng)不需要用XML方式進行配置,但作為一名新手,我們還是需要學習一些關(guān)于mybatis的配置的解釋,這樣有助于我們理解mybatis的原理。
mybatis的基本配置:



 1


<?xml version="1.0" encoding="UTF-8" ?>


2 <!DOCTYPE configuration
3         PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">

4 < configuration >
5      <!--properties用于定義一些屬性變量,以便在配置文件中調(diào)用-->
6      < properties >
7          <!--定義一個變量為driver的屬性,在下面就可以用${driver}來獲得其屬性值-->
8          < property   name = "driver"   value = "com.mysql.cj.jdbc.Driver" > </ property >
9          < property   name = "url"   value = "jdbc:mysql://rm-wz9b714vle01fg8ijmo.mysql.rds.aliyuncs.com/change_hair" > </ property >
10      </ properties >
11      <!--定義不同環(huán)境下的配置,便于區(qū)分生產(chǎn)、測試等環(huán)節(jié)的配置-->
12      < environments   default = "development" >
13         <!--定義一個環(huán)境下的配置-->
14          < environment   id = "development" >
15              < transactionManager   type = "JDBC" />
16              < dataSource   type = "POOLED" >
17                  < property   name = "driver"   value = "${driver}" />
18                  < property   name = "url"   value = "${url}" />
19                  < property   name = "username"   value = "root" />
20                  < property   name = "password"   value = "Blackeye100" />
21              </ dataSource >
22          </ environment >
23      </ environments >
24      <!--用于設(shè)置mapper文件的引入-->
25      < mappers >
26          <!--resource方式引入mapper文件-->
27          < mapper   resource = "mapper/UserMapper.xml" />
28      </ mappers >
29 </ configuration >

這是一個標準的mybatis的配置文件,很多情況下,這個配置已經(jīng)足夠,但是為了在以后的使用有更好的認識,下面講解配置文件中configuration標簽下的常用子標簽:

  1. properties標簽:用于定義一些通用屬性,便于配置文件中使用

  2. settings標簽:用于設(shè)置一些改變MyBatis運行時行為的配置

  3. environments標簽:用于配置成適應多種環(huán)境

  4. mappers標簽:用于mapper映射器的設(shè)置

下面分別對每個標簽做簡單講解:

1.properties標簽

當我們需要把一些值作為一個變量被配置中使用時,就可以在properties標簽下增加一個property標簽,其中屬性name是指變量名稱,屬性value是值,如:



1

 

<

properties

>


2          < property   name = "driver"   value = "com.mysql.cj.jdbc.Driver" > </ property >
3   </ property >

定義好之后,就可以在配置文件中使用了,如:



1


<

dataSource

 

type

=

"POOLED"

>


2     < property   name = "driver"   value = "${driver}" />
3 </ dataSource >            
2.settings標簽

settings標簽中的每一個setting都是用于調(diào)整mybatis的運行行為,我們在需要使用其中某些setting時加入即可,其常用的配置以及各個setting的解釋如下:



 1


<

settings

>


2   #設(shè)置配置文件中的所有映射器已經(jīng)配置的任何緩存,默認false。
3    < setting   name = "cacheEnabled"   value = "true" />
4   #延遲加載的全局開關(guān)。當開啟時,所有關(guān)聯(lián)對象都會延遲加載,默認為false
5    < setting   name = "lazyLoadingEnabled"   value = "true" />
6   #是否允許單一語句返回多結(jié)果集,默認為true
7    < setting   name = "multipleResultSetsEnabled"   value = "true" />
8   #是否使用列標簽代替列名,默認為true
9    < setting   name = "useColumnLabel"   value = "true" />
10   #是否允許JDBC支持自動生成主鍵,默認為false
11    < setting   name = "useGeneratedKeys"   value = "false" />
12   #指定 MyBatis 應如何自動映射列到字段或?qū)傩?
13    < setting   name = "autoMappingBehavior"   value = "PARTIAL" />
14   #指定發(fā)現(xiàn)自動映射目標未知列(或者未知屬性類型)的行為,默認NONE
15   #NONE: 不做任何反應
16   #WARNING: 輸出提醒日志
17   #FAILING: 映射失敗 (拋出 SqlSessionException)
18    < setting   name = "autoMappingUnknownColumnBehavior"   value = "WARNING" />
19   #配置默認的執(zhí)行器。默認為SIMPLE
20   #SIMPLE 就是普通的執(zhí)行器;
21   #REUSE 執(zhí)行器會重用預處理語句; 
22   #BATCH 執(zhí)行器將重用語句并執(zhí)行批量更新
23    < setting   name = "defaultExecutorType"   value = "SIMPLE" />
24   #設(shè)置超時時間,它決定驅(qū)動等待數(shù)據(jù)庫響應的秒數(shù)。 
25    < setting   name = "defaultStatementTimeout"   value = "25" />
26   #為驅(qū)動的結(jié)果集獲取數(shù)量(fetchSize)設(shè)置一個提示值  
27    < setting   name = "defaultFetchSize"   value = "100" />
28   #是否允許在嵌套語句中使用分頁。如果允許使用則設(shè)置為false。
29    < setting   name = "safeRowBoundsEnabled"   value = "false" />
30   #是否開啟自動駝峰命名規(guī)則(camel case)映射,默認為false
31    < setting   name = "mapUnderscoreToCamelCase"   value = "false" />
32 </ settings >
3. environments

environments是為了配置多環(huán)境數(shù)據(jù)源而生,在我們定義好了各種環(huán)境之后,只需要在代碼中設(shè)置從哪個環(huán)境中加載數(shù)據(jù)源即可,或者修改environments標簽中的default也可以達到切換環(huán)境的效果。
environments的基本配置如下:



 1


<

environments

 

default

=

"development"

>


2   #定義一個名稱為development的環(huán)境配置
3    < environment   id = "development" >
4     #設(shè)置事務(wù)管理器的類型,有JDBC和MANAGED梁總
5      < transactionManager   type = "JDBC" >
6        < property   name = "..."   value = "..." />
7      </ transactionManager >
8     #數(shù)據(jù)源設(shè)置
9      < dataSource   type = "POOLED" >
10        < property   name = "driver"   value = "${driver}" />
11        < property   name = "url"   value = "${url}" />
12        < property   name = "username"   value = "${username}" />
13        < property   name = "password"   value = "${password}" />
14      </ dataSource >
15    </ environment >
16 </ environments >

當我們需要增加一個環(huán)境配置時,只需要復制粘貼一份environment,修改其中屬性的值即可。

4.mappers

mappers標簽實際上是用于高速mybatis從哪找到我們寫好的SQL語句,也就是映射文件。當我們寫好一個表對應的mapper.xml時,我們只需要在mappers下增加一個mapper即可。

mappers查找mapper的方式有多種:

1. 根據(jù)mapper.xml文件定位:

這些mapper.xml在resources中的某個文件夾xxx中,則用resource屬性設(shè)置



1


<

mappers

>


2 < mapper   resource = "xxx/AMapper.xml" />
3 < mapper   resource = "xxx/BMapper.xml" />
4 </ mappers >
2. 根據(jù)映射器接口實現(xiàn)類的完全限定類名:

當我們在這些mapper.xml設(shè)置好了namespace之后,我們可以通過映射器接口實現(xiàn)類的全路徑類來設(shè)置,如在AMapper.xml設(shè)置namespace為com.xxx.dao.AMapper類之后,我們在這里可以使用class屬性指定查找的mapper,但前提是:
AMapper.xml和AMapper.java必須在同一個包下。



1


<

mappers

>


2 < mapper   class  = "com.xxx.dao.AMapper" />
3 < mapper   class  = "com.xxx.dao.BMapper" />
4 </ mappers >
3. 包映射

有人會說,如果我們表有很多,這樣一行一行的寫不是很費勁嗎,mybatis為了便于使用,提供了package的方式引入映射器,但前提
所有的mapper.xml和mapper.java必須在同一個包下。



1


<

mappers

>


2    < package   name = "org.xxx.dao" />
3 </ mappers >
4. URL映射:

如果你的mapper不在項目中,而是放到了其他文件內(nèi),mybatis提供了通過URL的方式引入mapper.xml。



1


<

mappers

>


2    < mapper   url = "C:///test/mappers/AMapper.xml" />
3    < mapper   url = "C:///test/mappers/BMapper.xml" />
4 </ mappers >

5. MyBatis的SQL語法

在現(xiàn)有的框架下編寫代碼,多數(shù)情況下都不需要理會mybatis底層的東西,而大量的工作都集中在編寫mapper文件上。因此學會在mybatis下編寫SQL語句是非常有必要的,我們首先來看一個標準的mapper文件的格式:



1


<?xml version="1.0" encoding="UTF-8"?>


2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3 < mapper   namespace = "com.xxx.dao.XxxMapper" >
4 </ mapper >

可以看出,一個mapper文件的根結(jié)構(gòu)是mapper標簽開始,而mapper標簽中的namespace有什么用呢?他應該怎么寫?

我們知道,有一種編程思想叫做面向接口編程,就是把業(yè)務(wù)需求中具體邏輯實現(xiàn)和接口分開,對外只暴露接口,通過接口實現(xiàn)業(yè)務(wù)。而在業(yè)務(wù)需求變化時,僅需要修改實現(xiàn)類,而不需要變動現(xiàn)有的對接代碼,降低對系統(tǒng)的影響。

而mybatis正是基于這樣的思想,在namespace中指定該mapper對應的接口之后,不需要編寫接口實現(xiàn)類,mybatis會通過該綁定自動幫你找到對應要執(zhí)行的SQL語句。

如:在com.xxx.dao中創(chuàng)建一個XxxMapper.java的接口,需要編寫一根據(jù)用戶查詢用戶信息的方法。



1


package

 com.xxx.dao;

2 public   interface   XxxMapper    {
3    //根據(jù)姓名查詢一條用戶信息
4    Map  selectUserByName (@Param( "name" )  String name) ;
5 }

此時我們就可以在mapper.xml中設(shè)置namespace對應到上面的接口來:



1


<?xml version="1.0" encoding="UTF-8"?>


2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3 < mapper   namespace = "com.xxx.dao.XxxMapper" >
4   < select   id = "selectUserByName"   parameterType = "String"   resultType = "hashmap" >
5   select * from user where name = #{name}
6 </ select >
7 </ mapper >

而在具體的業(yè)務(wù)實現(xiàn)類中,則是這樣使用的:



1


@Service


2 public   class   XxxServiceImpl   implements   CustomerInfoService   {
3      @Resource
4      private   XxxMapper xxxMapper= null ;
5      @Override
6      public  Map  getUser (String name)   {
7          return  xxxMapper.selectUserByName(name);
8     }
9 }

可以看出,從編寫SQL語句到最終業(yè)務(wù)調(diào)用SQL語句的過程中,我們并沒有給XxxMapper接口編寫任何的實現(xiàn)類,這就是基于接口編程的思想,mybatis已經(jīng)把這些事情都處理好了,我們只需要在namespace中把SQL映射文件和接口類對應起來,就可以使用了。

知道根節(jié)點mapper怎么設(shè)置之后,接下來我們需要學習如何在mapper節(jié)點里編寫SQL語句,在mapper標簽后,mybatis提供了很多語義化的標簽以便于我們編寫SQL語句和配置映射文件,下面是幾個非常常用子標簽:

1. select:用于編寫查詢語句的標簽
2. update:用于編寫update語句的標簽
3. insert:用于編寫insert語句的標簽
4. delete:用于編寫delete語句的標簽
5. sql:編寫語句塊的標簽,可被其它語句引用
6. resultMap:定義數(shù)據(jù)庫結(jié)果和實體屬性的映射關(guān)系

這些標簽都是我們在編寫SQL語句中的必備標簽,下面一一描述他們的使用。

1. select標簽

在一個項目中,大部分功能都涉及到查詢,因此mybatis也為select元素配備了非常多的屬性,一下僅列出最常用的幾個屬性以及作用解釋:



 1


<

select


2   #必填,唯一標識符,和 mapper 接口中的方法一一對應
3    id = "selectUser"
4   #選填,默認值為  unset ,用于傳入?yún)?shù)的類型設(shè)置
5    parameterType = "String"
6   #選填,語句查詢結(jié)果返回的期望類型, resultType  和  resultMap 不能同時使用
7    resultType = "HashMap"
8   #選填,語句查詢結(jié)果返回的數(shù)據(jù)集,可以對應實體類和和 resultMap 定義的 ID 。
9    resultMap = "com.xxx.entity.User"
10   #是否清除緩存,為 true 時本地緩存和二級緩存都會被清除
11    flushCache = "false"
12   #是否啟用緩存,為 true 時查詢結(jié)果會被放入二級緩存
13    useCache = "true"   >

14
15  #SQL語句編寫....
16
17   </ select >
2. update標簽


 1


<

update


2   #必填,唯一標識符,和 mapper 接口中的方法一一對應
3    id = "updateUser"
4   #選填,默認值為  unset ,用于傳入?yún)?shù)的類型設(shè)置
5    parameterType = "com.xxx.entity.User"
6   #是否清除緩存,為 true 時本地緩存和二級緩存都會被清除
7    flushCache = "true" >

8
9  #編寫update的SQL語句...
10
11 </ update >
3. insert標簽


 1


<

insert


2   #必填,唯一標識符,和 mapper 接口中的方法一一對應
3    id = "updateUser"
4   #選填,默認值為  unset ,用于傳入?yún)?shù)的類型設(shè)置
5    parameterType = "com.xxx.entity.User"
6   #是否清除緩存,為 true 時本地緩存和二級緩存都會被清除
7    flushCache = "true"
8   #是否取出由數(shù)據(jù)庫內(nèi)部生成的主鍵,默認為 false
9     useGeneratedKeys = "false"   
10    #選填,設(shè)置了之后,會通過 getGeneratedKeys 的返回值或者通過  insert 語句的 selectKey 子元素設(shè)置它的鍵值。
11     keyProperty = "id"
12   >

13
14  #編寫insert的SQL語句...
15
16 </ insert >
4. delete標簽


 1


<

delete


2   #必填,唯一標識符,和 mapper 接口中的方法一一對應
3    id = "updateUser"
4   #選填,默認值為  unset ,用于傳入?yún)?shù)的類型設(shè)置
5    parameterType = "com.xxx.entity.User"
6   #是否清除緩存,為 true 時本地緩存和二級緩存都會被清除
7    flushCache = "true" >

8
9  #編寫delete的SQL語句...
10
11 </ delete >
5. sql標簽

SQL節(jié)點用來編寫那些可以被重用的SQL代碼段,當我們用SQL編寫好一個代碼段之后,就可以在其他語句使用。

我們都知道,在寫滿了SQL之后,如果要修改表名,是一件很痛苦的事情,因為表名都寫到了SQL語句中了,但是在mybatis中,我們可以利用sql標簽來定義好表名,如果在所有的SQL中引入這個代碼塊即可:



1


<

sql

 

id

=

"TABLE_NAME"

>

user

</

sql

>


2
3 #在語句中用include的方式把表名動態(tài)化
4 < select   id = "selectUserByName" >
5 select * from 
6 < include   refid = "TABLE_NAME"  />
7  where name = #{name}
8 </ select >

類似的用法還有非常多,比如把查詢字段一致的可以用sql塊統(tǒng)一定義,然后在需要的地方調(diào)用…需要我們在實際使用過程,靈活運用這些標簽來減輕SQL的代碼量和降低復雜度。

6. resultMap標簽

resultMap標簽用于表示數(shù)據(jù)庫查詢結(jié)果和實體對象的映射關(guān)系,它是映射文件中中所復雜的一個標簽,常用的屬性有兩個:



1

 

<

resultMap

 

2   #定義這個 resultMap 的唯一標識
3    id = "XXXResult"
4   #返回值的全限定類名,或類型別名 
5    type = "com.xxx.entity.User" >
 
6
7      #子節(jié)點....
8
9    </ resultMap >

而它的子節(jié)點則就非常多了:



 1

 

<

resultMap

 

id

=

"XXXResult"

 

type

=

"java.util.HashMap"

>

 

2     #constructor:類在實例化時,用來注入結(jié)果到構(gòu)造方法中
3      < constructor >
4       #idArg:ID參數(shù);標記結(jié)果作為ID可以幫助提高整體效能
5        < idArg />
6       #arg:注入到構(gòu)造方法的一個普通結(jié)果
7        < arg />
8      </ constructor >
9     #一個 ID 結(jié)果;標記出作為 ID 的結(jié)果可以幫助提高整體性能        
10      < id />
11     #注入到字段或 JavaBean 屬性的普通結(jié)果
12      < result />
13     #一個復雜類型的關(guān)聯(lián);許多結(jié)果將包裝成這種類型
14      < association   property = "" />
15     #一個復雜類型的集合
16      < collection   property = "" />
17     # 使用結(jié)果值來決定使用哪個 resultMap
18      < discriminator   javaType = "" >
19        #基于某些值的結(jié)果映射
20         < case   value = "" > </ case >
21      </ discriminator > !
22    </ resultMap >

如查詢要把查詢結(jié)果的字段用駝峰的寫法映射,可以定義一個resultMap,吧對象和實體屬性一一對應起來:



1


<

resultMap

 

id

=

"UserResultMap"

 

type

=

"java.util.HashMap"

>


2          < id   column = "id"   property = "id" />
3          < result   column = "nick_name"   property = "nickName" />
4          < result   column = "gmt_created"   property = "gmtCreated" />
5          < result   column = "gmt_modified"   property = "gmtModified" />
6      </ resultMap >

在SQL用就可以直接使用這個resultMap作為返回類型:



1


<

select

 

id

=

"selectUserByName"

 

resultMap

=

"UserResultMap"

>


2     select id,nick_name,gmt_created,gmt_modified from user where name =#{name}
3 </ select >

上面的例子只用到resultMap中最常用的兩個子標簽: <id>、<result>。還有很多其它的標簽可以寫成高級的resultMap,由于篇幅較長,而文章旨在入門,因此在此暫不對每個標簽舉例子解釋,有興趣的可以自行百度。

6. 運行原理和實操一波

看完一波語法之后,腦子處于似懂非懂的狀態(tài),好像都是在講配置文件和mapper的使用。當我們學會了編寫這些mapper之后,究竟應該怎么使用它?
到這里我們就不得不提一下mybatis的運行過程了,先了解幾個mybatis提供的接口/類:

  1. SqlSessionFactoryBuilder : SqlSessionFactory的構(gòu)造器,用于創(chuàng)建SqlSessionFactory,采用了Builder設(shè)計模式。

  2. SqlSessionFactory:SqlSession工廠類,以工廠形式創(chuàng)建SqlSession對象,采用了Factory工廠設(shè)計模式。

  3. SqlSession:執(zhí)行SQL的接口

由于mybatis的運行原理非常復雜,遠遠不是30分鐘能掌握的,因此在此只是概括為最大的四個過程:

  1. 加載配置創(chuàng)建SqlSessionFacotry

  2. 通過sqlSessionFactory獲取SqlSession

  3. SqlSession查找和轉(zhuǎn)化Mapper

  4. SqlSession執(zhí)行mapper中的SQL語句

知道了運行流程之后,我們就可以實操一波了,雖然主流的開發(fā)框架都已經(jīng)看不見這些東西了,但作者還是決定拋棄一切框架,只用maven構(gòu)建一個空白項目進行實操:

  1. 在idea上創(chuàng)建一個maven項目,并且在pom中引入mybatis和mysql依賴

這個簡單,不多描述。
其中pom中的依賴為:



 1


<

dependencies

>


2          < dependency >
3              < groupId > org.mybatis </ groupId >
4              < artifactId > mybatis </ artifactId >
5              < version > 3.2.7 </ version >
6          </ dependency >
7          < dependency >
8              < groupId > mysql </ groupId >
9              < artifactId > mysql-connector-java </ artifactId >
10              < version > 6.0.6 </ version >
11          </ dependency >
12      </ dependencies >
  1. 在resources中創(chuàng)建一個名為mybatis-config.xml的配置文件,內(nèi)容為:



 1


<?xml version="1.0" encoding="UTF-8" ?>


2 <!DOCTYPE configuration
3         PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">

4 < configuration >
5      <!--properties用于定義一些屬性變量,以便在配置文件中調(diào)用-->
6      < properties >
7          <!--定義一個變量為driver的屬性,在下面就可以用${driver}來獲得其屬性值-->
8          < property   name = "driver"   value = "com.mysql.cj.jdbc.Driver" > </ property >
9          < property   name = "url"   value = "jdbc:mysql://10.9.0.111/test" > </ property >
10      </ properties >
11      <!--定義不同環(huán)境下的配置,便于區(qū)分生產(chǎn)、測試等環(huán)節(jié)的配置-->
12      < environments   default = "development" >
13         <!--定義一個環(huán)境下的配置-->
14          < environment   id = "development" >
15              < transactionManager   type = "JDBC" />
16              < dataSource   type = "POOLED" >
17                  < property   name = "driver"   value = "${driver}" />
18                  < property   name = "url"   value = "${url}" />
19                  < property   name = "username"   value = "root" />
20                  < property   name = "password"   value = "test100" />
21              </ dataSource >
22          </ environment >
23      </ environments >
24      <!--用于設(shè)置mapper文件的引入-->
25      < mappers >
26          <!--resource方式引入mapper文件-->
27          < mapper   resource = "mapper/UserMapper.xml" />
28      </ mappers >
29 </ configuration >
  1. 創(chuàng)建表結(jié)構(gòu):



 1


DROP

 

TABLE

 

IF

 

EXISTS

 

`user`

;

2 CREATE   TABLE   `user`  (
3    `id`   int ( 11 NOT   NULL  AUTO_INCREMENT,
4    `name`   varchar ( 255 DEFAULT   NULL ,
5    `gmt_created`   varchar ( 255 DEFAULT   NULL ,
6    `gmt_modified`   varchar ( 255 DEFAULT   NULL ,
7   PRIMARY  KEY  ( `id` )
8 ENGINE = InnoDB  AUTO_INCREMENT= 2   DEFAULT   CHARSET =utf8mb4;
9 -- 插入一條數(shù)
10 INSERT   INTO   `user`   VALUES  ( '1' 'hello mybatis' null null );
  1. 在java下創(chuàng)建User.java的實體類(注意:為了簡化代碼,getter和serter已經(jīng)去掉,實操時自行補上):



1


public

 


class

 

User

 

{

2      private  Integer id;
3      private  String name;
4      private  String gmtCreated;
5      private  String gmtModified;
6     //getter 和 setter...
7 }
  1. 在java下創(chuàng)建UserMapper.java的映射類:



1


public

 


interface

 

UserMapper

 

{

2      User  getUserByName (@Param( "name" )  String name) ;
3 }
  1. 在resources下創(chuàng)建mapper文件夾,在mapper下創(chuàng)建UserMapper的xml文件:



1


<?xml version="1.0" encoding="UTF-8"?>


2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3 < mapper   namespace = "UserMapper" >
4      < select   id = "getUserByName"   resultType = "User" >
5         select  * from  user where  name =#{name}
6      </ select >
7 </ mapper >
  1. 啟動mybatis執(zhí)行SQL

根據(jù)上面的運行流程,就可以編寫一個測試類:



 1

 


public

 

static

  

void

 

main


(String args[])


{

2          try  {
3             String resource =  "mybatis-config.xml" ;
4 //           1. 獲取配置文件的輸入流
5             InputStream inputStream = Resources.getResourceAsStream(resource);
6 //            2. 讀取配置文件并用SqlSessionFactoryBuilder創(chuàng)建一個SqlSessionFactory
7             SqlSessionFactory sqlSessionFactory =  new  SqlSessionFactoryBuilder().build(inputStream);
8 //            3. 從SqlSessionFactory中獲取一個SqlSession
9              SqlSession s=  sqlSessionFactory.openSession();
10 //             4. 查找映射SQL文件
11              UserMapper mapper=s.getMapper(UserMapper.class);
12 //             5.執(zhí)行CURD操作
13             User user=mapper.getUserByName( "hello mybatis" );
14
15              if (user!= null ){
16                 System.out.print( "查詢成功,我的名次是:" +user.getName());
17             }
18
19         } catch  (Exception e){
20             e.printStackTrace();
21         }
22     }

查看輸出:



1

查詢成功,我的名次是:hello mybatis

大功告成!有興趣的讀者可以根據(jù)上面的過程,編寫屬于自己的原生態(tài)mybatis的測試項目,如果有問題或者需要源碼請關(guān)注公眾號留言或加微信:sisi-ceo,我們一起來征服寫代碼這做大山~



向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI