close
以下內容來源於推薦學java,關注每日乾貨及時送達
前情回顧

到本文,我們已經學習了 SSM 框架中的 MyBatis 和 Spring 兩大核心內容,本文介紹如何將兩者結合起來在項目中使用,這也是實際開發中常用的操作,必須掌握,下面開始擼碼~

集成步驟第一步:創建數據庫、數據表

數據庫各位跟隨自己愛好建就行,數據表我這裡是 programmer,字段有這幾個:

id 主鍵,varchar(64)、自動增長、不為null
name 姓名,varchar(125)
age 年齡,int
第二步:新建項目,完成基本配置

新建基於 maven 的 Java項目,完成如下配置:

pom.xml 文件中主要是依賴:

<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.javafirst</groupId><artifactId>spring-mybatis</artifactId><version>1.0-SNAPSHOT</version><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version></dependency><!--MySQL驅動--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.25</version></dependency><!--MyBatis依賴--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.7</version></dependency><!--Spring依賴--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.14</version></dependency><!--MyBatis集成Spring--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.3</version></dependency><!--Spring事務--><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>5.3.14</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>1.2.6</version></dependency><!--阿里數據庫連接池druid--><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.8</version></dependency></dependencies><build><resources><resource><directory>src/main/java</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>false</filtering></resource></resources></build></project>

以上配置基本是固定的,用到什麼依賴就在這裡配置即可。

第三步:創建實體類

這個和我們之前學習過,就是創建和表中字段對應Java實體類對象,代碼如下:

packagecom.javafirst.daomain;/***desc:數據表對應的實體類*<p>*author:推薦學java*<p>*weChat:studyingJava*/publicclassProgrammer{privateIntegerid;privateStringname;privateIntegerage;publicIntegergetId(){returnid;}publicvoidsetId(Integerid){this.id=id;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicIntegergetAge(){returnage;}publicvoidsetAge(Integerage){this.age=age;}@OverridepublicStringtoString(){return"Programmer信息:{"+"id="+id+",name='"+name+'\''+",age="+age+'}';}}第四步:創建dao接口和mapper文件

這一步其實還屬於 MyBatis 的配置,需要注意的是我這裡將接口和對應的 mapper 文件沒有放在同一個目錄(package)下,這裡不同會引起MyBatis 配置文件中給JavaBean對象起別名的配置有區別,看個人習慣,我習慣將class和xml分開。

ProgrammerDao.java 代碼如下:

/***desc:MyBatis對應的dao層,操作SQL使用*<p>*author:推薦學java*<p>*weChat:studyingJava*/publicinterfaceProgrammerDao{intaddProgrammer(Programmerprogrammer);List<Programmer>selectAllProgrammer();}

這個應該不陌生,使我們學習 MyBatis 的時候用到的,這裡定義的接口,實際會映射到去執行 Mapper 中的 SQL 語句。

ProgrammerMapper.xml 代碼如下:

<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.javafirst.dao.ProgrammerDao"><insertid="addProgrammer">insertintoprogrammer(`name`,age)values(#{name},#{age})</insert><selectid="selectAllProgrammer"resultType="com.javafirst.daomain.Programmer">select*fromprogrammer</select></mapper>

該類在 resource 目錄下的 mapper 文件夾下。

第五步:完成MyBatis主配置文件

這個文件的位置在 resource 目錄下,名為 mybatis-config.xml ,其代碼如下:

<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEconfigurationPUBLIC"-//mybatis.org//DTDConfig3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><!--日誌--><settings><settingname="logImpl"value="STDOUT_LOGGING"/></settings><typeAliases><typeAliastype="com.javafirst.daomain.Programmer"alias="programmerDao"/><!--要求dao接口和mapper文件在同一文件夾下--><!--<packagename="com.javafirst.daomain"/>--></typeAliases><mappers><mapperresource="mapper/ProgrammerMapper.xml"/></mappers></configuration>

第四步中提到的不同之處就在這裡的 <typeAliases> 標籤裡面的內容了,各位看注釋或者看往期文章就明白了。

接下來的操作就和 Spring 相關了,可能細心的同學已經有疑惑了,我們的數據源去哪了,也就是連接數據庫的配置去哪了?能想到這一點,說明我們對學過的內容記憶的很好,其實,MyBatis 和 Spring 結合使用的時候,數據源是交給 Spring容器來處理的,相對我們單獨使用 MyBatis 更簡單輕鬆了,快往下看:

第六步:創建 Service 接口和實現類

定義 ProgrammerService 接口代碼如下:

publicinterfaceProgrammerService{intinsertProgrammer(Programmerprogrammer);List<Programmer>queryProgrammers();}

這步操作其實就是我們學習 Spring 的流程,會動態創建 Java 對象,然後通過相關設置方式來賦值。

實現類代碼:

/***desc:*author:推薦學java*<p>*weChat:studyingJava*/publicclassProgrammerServiceImplimplementsProgrammerService{privateProgrammerDaoprogrammerDao;publicvoidsetProgrammerDao(ProgrammerDaoprogrammerDao){this.programmerDao=programmerDao;}@OverridepublicintinsertProgrammer(Programmerprogrammer){returnprogrammerDao.addProgrammer(programmer);}@OverridepublicList<Programmer>queryProgrammers(){returnprogrammerDao.selectAllProgrammer();}}

這裡可以理解為代理對象的作用。

第七步:創建 Spring 的配置文件

這個應該很熟悉了,名為 applicationContext.xml 在 resource 目錄下,不同前面我們使用的是,這裡的內容有所變化:

<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsd"><!--使用屬性文件配置數據源中數據庫鏈接信息--><context:property-placeholderlocation="jdbc.properties"/><!--聲明數據源--><beanid="myDataSource"class="com.alibaba.druid.pool.DruidDataSource"init-method="init"destroy-method="close"><!--<propertyname="driver"value="com.mysql.jdbc.Driver"/>--><propertyname="url"value="${jdbc.url}"/><propertyname="username"value="${jdbc.username}"/><propertyname="password"value="${jdbc.password}"/></bean><!--聲明SQLSessionFactoryBean--><beanid="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean"><propertyname="dataSource"ref="myDataSource"/><propertyname="configLocation"value="classpath:mybatis-config.xml"/></bean><!--聲明MapperScannerConfigurer--><beanclass="org.mybatis.spring.mapper.MapperScannerConfigurer"><propertyname="sqlSessionFactoryBeanName"value="sqlSessionFactory"/><!--指定包名,包名是dao接口所在的包名MapperScannerConfigurer會掃描basePackage給定包中的所有接口,把每個接口都執行一次getMapper()方法,得到每個接口的dao對象創建好的dao對象放入到spring的容器中 dao默認對象的名稱:是接口名字的首字母小寫--><propertyname="basePackage"value="com.javafirst.dao"/><!--多個包下有實體,使用,分割--><!--<propertyname="basePackage"value="com.javafirst.dao,com.javafirst.dao2"/>--></bean><!--註冊自定義Service--><beanid="programmerService"class="com.javafirst.service.impl.ProgrammerServiceImpl"><propertyname="programmerDao"ref="programmerDao"/></bean></beans>

這裡其實主要有四小步工作,且這四步基本都是固定模式,我們在理解的基礎上把流程記下來就行,後面用就知道為什麼這麼寫了。

為了方便,我這裡將數據庫相關的配置信息放在了外部文件 jdbc.properties 中,這和我們前面學習 MyBatis 的時候引用外部配置文件是一樣的用法,該文件在 resource 目錄下,Spring配置文件中引用就是這裡的第一句代碼。

jdbc.properties 文件內容如下:

jdbc.url=jdbc:mysql://localhost:3306/spring_demojdbc.username=rootjdbc.password=root

下面說這四小步都代表什麼意思:

聲明數據源 :其實就是和數據庫建立鏈接,這個過程交給了 Spring容器來管理
聲明 SQLSessionFactoryBean :這個工作的意思就是讀取 MyBatis 主配置文件,講聲明的 javaBean 對象映射到 SqlSessionFactoryBean 管理器中。
聲明 MapperScannerConfigurer :會掃描給定包下的接口對象,將所有接口執行一次 getMapper() 後得到接口的 dao 對象,將這些對象交給 Spring容器管理。
註冊自定義Service :這是我們自定義的東西,也就是我們自己的業務層。
第八步:測試

到這裡其實有兩種測試可以進行,一種是測試Dao層是否能訪問數據庫,並進行相關操作,不經過我們的業務層。

@Testpublicvoidtest_addProgrammer(){Stringconfig="applicationContext.xml";ApplicationContextcontext=newClassPathXmlApplicationContext(config);ProgrammerDaoprogrammerDao=(ProgrammerDao)context.getBean("programmerDao");Programmerprogrammer=newProgrammer();programmer.setName("王重陽");programmer.setAge(102);programmerDao.addProgrammer(programmer);}

這一步測試不需要我們前面配置中的自定義Service 即可進行。需要注意的是Spring中添加記錄,已經不需要我們手動commit() 了。

第二種測試,就是我們 Spring 和 MyBatis 集成後的測試,代碼如下:

@Testpublicvoidtest_addProgrammer_spring(){Stringconfig="applicationContext.xml";ApplicationContextcontext=newClassPathXmlApplicationContext(config);ProgrammerServiceprogrammerService=(ProgrammerService)context.getBean("programmerService");Programmerprogrammer=newProgrammer();programmer.setName("周伯通");programmer.setAge(112);introw=programmerService.insertProgrammer(programmer);System.out.println("插入結果:"+row);}

結果大家自行驗證,看下數據表中這裡插入的值:

spring-mybatis-table

我們還定義了一個查詢功能,測試代碼如下:

/***Spring方式查詢記錄*/@Testpublicvoidtest_selectProgrammers_spring(){Stringconfig="applicationContext.xml";ApplicationContextcontext=newClassPathXmlApplicationContext(config);ProgrammerServiceprogrammerService=(ProgrammerService)context.getBean("programmerService");List<Programmer>programmers=programmerService.queryProgrammers();System.out.println("查詢結果:"+programmers);}

結果各位自己驗證哈,一般前面流程跑通,到這裡不會有問題。

最後,再看下我的項目結構:

spring-mybatis項目結構總結

本文將前面學習的 MyBatis 和 Spring 結合起來使用,掌握其流程和原理很重要,其實思考一下,結合起來反倒簡單多了,可能第一次接觸的時候,被各種流程性的東西搞的有點懵,但這並不妨礙我們後面的順利上手。

學編程,推薦首選Java語言,小編創建了一個專注Java的原創公眾號推薦學java,各位可以在微信搜索javaFirst 關注,一起開啟Java旅途!

推薦學java——Spring之AOP

推薦學java——Spring第一課

推薦學java——MyBatis高級

推薦學Java——第一個MyBatis程序

推薦學java——Maven初識
推薦學Java——數據表高級操作
推薦學Java——數據表操作
推薦學Java——初識數據庫
推薦學Java—應該了解的前端內容
一文回顧 Java 入門知識(下)
一文回顧 Java 入門知識(中)
一文回顧 Java 入門知識(上)

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 鑽石舞台 的頭像
    鑽石舞台

    鑽石舞台

    鑽石舞台 發表在 痞客邦 留言(0) 人氣()