持久層框架------Mybatis篇(1)

  有了足夠的內力支持,今天咱們就踏上新的招數修煉之路,學習持久層框架祕籍之一(Mybatis大法)祕籍記錄地: https://mybatis.org/mybatis-3/zh/index.html ,祕籍中詳細記錄瞭如何使用Mybatis與數據庫交互,事務的實現方案,面向接口編程,xml映射,動態sql等等,今天主要給你們演示,讓你們學會如何使用該招數。html

  在前文中,使用JDBC與數據庫作交互時,咱們用到了一個mysql的數據庫驅動包,此次,咱們雖然使用Mybatis招數來與數據庫交互,可是他的核心心法仍是JDBC,因此,驅動包必不可少(mysql-connector-java-8.0.11.jar),另外,既然使用Mybatis,除了數據庫驅動包,天然還要引入咱們Mybatis本身的jar包,jar包裏包括了Mybtis不少封裝好的方法,供修行者使用(mybatis-3.4.1.jar),選包時,注意兩個包的版本選擇,避免衝突引發走火入魔,在這裏很少闡述。java

  下載好兩個包以後,咱們建立一個java項目,將包引入項目中,而且建立一些備用包路徑,具體項目結構以下圖:mysql

咱們在lib中引入剛剛下載的兩個jar包,在conf中準備寫一些Mybatis的配置信息,dao中主要定義一些接口,未來會在mapper.xml映射文件中用到。dto放一些咱們測試功能時,用到的一些java對象(pojo,實體類)。sql

那麼,項目結構已經建好,咱們如何開始一個Mybatis版的holleworld呢,咱們打開祕籍的入門篇,以下圖:數據庫

從祕籍中咱們能夠看出,要想運行一個Mybatis項目,首先咱們須要建立一個xml文件,進而從xml中獲取一個叫作SqlSessionFactory的對象,那麼,咱們就在咱們剛剛創建好的項目中的conf文件夾下創建一個叫作mybatis-conf.xml的文件做爲mybatis的全局配置文件(配置文件名字能夠隨便取),將祕籍中的xml內容粘貼到咱們創建的全局配置文件中:編程

在全局配置文件中,涉及到幾個重要的標籤:session

<configuration/>全局配置標籤,全部的標籤都要在此標籤內去寫;mybatis

<properties/>引入外部配置標籤,經過resource或者url屬性來指定外部配置的地址來引用,一般在配置數據源引入數據庫信息時使用app

<environments default**="development"**>數據庫環境配置,該標籤下能夠存在多個environment標籤,default屬性值須要填寫environment標籤中的id值,做爲默認環境運行框架

<dataSource type**="POOLED"**>標籤下來定義數據庫的數據源,選擇不一樣的數據庫,配置略有不一樣

<mappers>註冊映射文件,完成數據庫表和java中實體類的對應關係

有了全局配置文件,咱們就要按着祕籍繼續往下進行了:從配置文件中獲取SqlSessionFactory對象,一樣,仍是在祕籍中將這段代碼粘出到main函數中

//加載mybatis的全局配置文件,建立sqlSessionFactory工廠 String resource = "conf/mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

咱們如今有了SqlSessionFactory這個類了,看名字能夠看出,他是一個工廠類,既然有了工廠類,接下來,我確定須要該工廠類下的某一個實現對象類,繼續往下看~:

果真,咱們須要經過工廠類獲取SqlSession對象:

SqlSession session = sqlSessionFactory.openSession();

   獲取了SqlSession對象以後,又產生了分支,有兩個分支能夠繼續往下進行,在祕籍中也能夠看出,一個是用SqlSession對象直接調用sql語句,一個是經過獲取mapper映射接口來實現sql的執行,一般使用第一種方式的都是老前輩了,有些落後,咱們推薦的仍是第二種實現方式,經過定義接口,完成接口與映射配置文件的契合來實現~因此咱們在這裏使用第二種方式,若是對第一種感興趣的話能夠去祕籍中本身探索。

   既然決定用經過接口的方式來完成sql的執行,那麼咱們就要在dao文件夾下創建一個接口,在接口中根據需求,新建兩個方法,咱們創建兩個方法,一個是根據城市id來查詢城市信息,一個是新增城市~

SysCity這個實體類對應這咱們數據庫中的表,SysCity中的字段,對應這數據庫表裏的屬性,在這裏有一個小常識,數據庫表的屬性名要和實體類的字段名徹底一致,可是咱們平時命名時,一般數據庫屬性用下劃線的方式命名(last_name),而實體類的字段一般使用駝峯命名法(lastName),若是發生這種狀況,有兩種解決方案,一個是在Mybatis的全局配置文件中加入<settings>標籤,配置 mapUnderscoreToCamelCase ,祕籍中有記載,另外一種就是經過在映射配置文件中的resultMap標籤來自定義給他們完成映射,本人習慣使用第一種,由於很規範,很整潔,可是大部分公司都會使用第二種,這個就各有看法了~

有了接口,接下來,咱們要建立一個Mapper.xml映射配置文件,來完成他與接口的映射,同時編寫sql語句

其中mapper標籤中的namespace的值要填寫咱們接口的類路徑,每個sql標籤的id值要填寫接口裏的方法名,這個resultMap標籤就是咱們剛提到的,自定義映射結果集,若是符合駝峯轉化規則,能夠省略,在sql標籤中,編寫sql語句~這樣,就完成了接口與xml的映射

最後一步,咱們經過SqlSession對象獲取接口實例,調用接口方法來實現sql的執行

try (SqlSession session = sqlSessionFactory.openSession()) { SysCityDao mapper = session.getMapper(SysCityDao.class); SysCity city= mapper.selectOne(101); }

   至此,一個Mybatis版的helloworld就完成了,他爲咱們省去了JDBC編程中的不少重複性的工做,好比加載驅動,創建鏈接,關閉鏈接等...固然Mybatis的魅力不只如此,他還能經過在接口上方直接使用註解來完成sql執行(省去了映射配置文件,不過複雜的項目不推薦,sql與java代碼融合),主鍵生成策略,反向生成工具,事務控制等~本文咱們只是根據祕籍,強行運行出了一個Mybatis項目,可是其中的一些重要的屬性都沒有詳細講解,好比在映射配置文件中sql標籤中,有一個叫paramterType的參數,他是用來接咱們接口傳來的參數使用的,在下一節,咱們主要來學習一下這個參數的正確使用方式以及最佳實現~

  好了,感受有些筋疲力盡了,休息一下吧,吸取一下今天所修煉的內容,融會貫通以後,在進行接下來的試煉~

相關文章
相關標籤/搜索