真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

30分鐘入門MyBatis

本文旨在用最通俗的語(yǔ)言講述最枯燥的基本知識(shí)

西湖網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)公司,西湖網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為西湖成百上千提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的西湖做網(wǎng)站的公司定做!

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

文章提綱:

  1. 什么是MyBatis

  2. MyBatis的引入

  3. MyBatis的配置

  4. MyBatis的SQL語(yǔ)法

  5. 運(yùn)行原理和實(shí)操一波

1. 什么是MyBatis

MyBatis的前身是Apache的一個(gè)開源項(xiàng)目ibatis,后來遷移到Google code就改名為MyBatis。

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

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

2. MyBatis的引入

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


1
http://central.maven.org/maven2/org/mybatis/mybatis/3.4.6/mybatis-3.4.6.jar
  1. 如果為maven構(gòu)建的項(xiàng)目,則只需要在pom.xml中加入以下依賴然后reimport一下即可:


1

<

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


1
// https://mvnrepository.com/artifact/org.mybatis/mybatis
2 compile group: 'org.mybatis', name: 'mybatis', version: '3.4.6'

3. MyBatis的配置和初始化

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


 1


2 3         PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
4 < configuration >
5     
6      < properties >
7         
8          < property   name = "driver"   value = "com.MySQL.cj.jdbc.Driver" >
9          < property   name = "url"   value = "jdbc:mysql://rm-wz9b714vle01fg8ijmo.mysql.rds.aliyuncs.com/change_hair" >
10     
11     
12      < environments   default = "development" >
13        
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             
22         
23     
24     
25      < mappers >
26         
27          < mapper   resource = "mapper/UserMapper.xml" />
28     
29

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

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

  2. settings標(biāo)簽:用于設(shè)置一些改變MyBatis運(yùn)行時(shí)行為的配置

  3. environments標(biāo)簽:用于配置成適應(yīng)多種環(huán)境

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

下面分別對(duì)每個(gè)標(biāo)簽做簡(jiǎn)單講解:

1.properties標(biāo)簽

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


1
 

<

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

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


1

<

dataSource
 

type
=

"POOLED"
>
2     < property   name = "driver"   value = "${driver}" />
3            
2.settings標(biāo)簽

settings標(biāo)簽中的每一個(gè)setting都是用于調(diào)整mybatis的運(yùn)行行為,我們?cè)谛枰褂闷渲心承﹕etting時(shí)加入即可,其常用的配置以及各個(gè)setting的解釋如下:


 1

<

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

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


 1

<

environments
 

default
=

"development"
>
2   #定義一個(gè)名稱為development的環(huán)境配置
3    < environment   id = "development" >
4     #設(shè)置事務(wù)管理器的類型,有JDBC和MANAGED梁總
5      < transactionManager   type = "JDBC" >
6        < property   name = "..."   value = "..." />
7     
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     
15   
16

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

4.mappers

mappers標(biāo)簽實(shí)際上是用于高速mybatis從哪找到我們寫好的SQL語(yǔ)句,也就是映射文件。當(dāng)我們寫好一個(gè)表對(duì)應(yīng)的mapper.xml時(shí),我們只需要在mappers下增加一個(gè)mapper即可。

mappers查找mapper的方式有多種:

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

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


1

<

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

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


1

<

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

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


1

<

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

如果你的mapper不在項(xiàng)目中,而是放到了其他文件內(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

5. MyBatis的SQL語(yǔ)法

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


1


2
3 < mapper   namespace = "com.xxx.dao.XxxMapper" >
4

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

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

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

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


1

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

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


1


2
3 < mapper   namespace = "com.xxx.dao.XxxMapper" >
4   < select   id = "selectUserByName"   parameterType = "String"   resultType = "hashmap" >
5   select * from user where name = #{name}
6
7

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

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

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

這些標(biāo)簽都是我們?cè)诰帉慡QL語(yǔ)句中的必備標(biāo)簽,下面一一描述他們的使用。

1. select標(biāo)簽

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


 1

<

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

 1

<

update
2   #必填,唯一標(biāo)識(shí)符,和 mapper 接口中的方法一一對(duì)應(yīng)
3    id = "updateUser"
4   #選填,默認(rèn)值為  unset ,用于傳入?yún)?shù)的類型設(shè)置
5    parameterType = "com.xxx.entity.User"
6   #是否清除緩存,為 true 時(shí)本地緩存和二級(jí)緩存都會(huì)被清除
7    flushCache = "true" >
8
9  #編寫update的SQL語(yǔ)句...
10
11
3. insert標(biāo)簽

 1

<

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

 1

<

delete
2   #必填,唯一標(biāo)識(shí)符,和 mapper 接口中的方法一一對(duì)應(yīng)
3    id = "updateUser"
4   #選填,默認(rèn)值為  unset ,用于傳入?yún)?shù)的類型設(shè)置
5    parameterType = "com.xxx.entity.User"
6   #是否清除緩存,為 true 時(shí)本地緩存和二級(jí)緩存都會(huì)被清除
7    flushCache = "true" >
8
9  #編寫delete的SQL語(yǔ)句...
10
11
5. sql標(biāo)簽

SQL節(jié)點(diǎn)用來編寫那些可以被重用的SQL代碼段,當(dāng)我們用SQL編寫好一個(gè)代碼段之后,就可以在其他語(yǔ)句使用。

我們都知道,在寫滿了SQL之后,如果要修改表名,是一件很痛苦的事情,因?yàn)楸砻紝懙搅薙QL語(yǔ)句中了,但是在mybatis中,我們可以利用sql標(biāo)簽來定義好表名,如果在所有的SQL中引入這個(gè)代碼塊即可:


1

<

sql
 

id
=

"TABLE_NAME"
>
user


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

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

6. resultMap標(biāo)簽

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


1
 

<

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

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


 1
 

<

resultMap
 

id
=

"XXXResult"
 

type
=

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

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


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     

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


1

<

select
 

id
=

"selectUserByName"
 

resultMap
=

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

上面的例子只用到resultMap中最常用的兩個(gè)子標(biāo)簽: 、。還有很多其它的標(biāo)簽可以寫成高級(jí)的resultMap,由于篇幅較長(zhǎng),而文章旨在入門,因此在此暫不對(duì)每個(gè)標(biāo)簽舉例子解釋,有興趣的可以自行百度。

6. 運(yùn)行原理和實(shí)操一波

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

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

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

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

由于mybatis的運(yùn)行原理非常復(fù)雜,遠(yuǎn)遠(yuǎn)不是30分鐘能掌握的,因此在此只是概括為最大的四個(gè)過程:

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

  2. 通過sqlSessionFactory獲取SqlSession

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

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

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

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

這個(gè)簡(jiǎn)單,不多描述。
其中pom中的依賴為:


 1

<

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


 1


2 3         PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
4 < configuration >
5     
6      < properties >
7         
8          < property   name = "driver"   value = "com.mysql.cj.jdbc.Driver" >
9          < property   name = "url"   value = "jdbc:mysql://10.9.0.111/test" >
10     
11     
12      < environments   default = "development" >
13        
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             
22         
23     
24     
25      < mappers >
26         
27          < mapper   resource = "mapper/UserMapper.xml" />
28     
29
  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的實(shí)體類(注意:為了簡(jiǎn)化代碼,getter和serter已經(jīng)去掉,實(shí)操時(shí)自行補(bǔ)上):


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


2
3 < mapper   namespace = "UserMapper" >
4      < select   id = "getUserByName"   resultType = "User" >
5         select  * from  user where  name =#{name}
6     
7
  1. 啟動(dòng)mybatis執(zhí)行SQL

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


 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)建一個(gè)SqlSessionFactory
7             SqlSessionFactory sqlSessionFactory =  new  SqlSessionFactoryBuilder().build(inputStream);
8 //            3. 從SqlSessionFactory中獲取一個(gè)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的測(cè)試項(xiàng)目,如果有問題或者需要源碼請(qǐng)關(guān)注公眾號(hào)留言或加微信:sisi-ceo,我們一起來征服寫代碼這做大山~



網(wǎng)站標(biāo)題:30分鐘入門MyBatis
網(wǎng)頁(yè)網(wǎng)址:http://weahome.cn/article/gssgis.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部