創(chuàng)建類BookTypeDAOImpl實現(xiàn)接口BookTypeDAO,這里要通過MyBatis實現(xiàn)數(shù)據(jù)訪問功能,內(nèi)容如下:
package com.zhangguo.Spring61.dao; import java.util.List; import org.apache.ibatis.session.SqlSession; import com.zhangguo.Spring61.entities.BookType; import com.zhangguo.Spring61.mapping.BookTypeDAO; /** * 實現(xiàn)圖書類型數(shù)據(jù)訪問 * */ public class BookTypeDAOImpl implements BookTypeDAO { @Override public List<BookType> getAllBookTypes() { //獲得會話對象 SqlSession session=MyBatisUtil.getSession(); try { //通過MyBatis實現(xiàn)接口BookTypeDAO,返回實例 BookTypeDAO bookTypeDAO=session.getMapper(BookTypeDAO.class); return bookTypeDAO.getAllBookTypes(); } finally { session.close(); } } }
2.7、測試運行
新建一個JUnit Test Case測試用例,如下所示:
測試用例TestBookTypeDAOImpl.java文件如下:
package com.zhangguo.Spring61.test; import static org.junit.Assert.*; import java.util.List; import org.junit.BeforeClass; import org.junit.Test; import com.zhangguo.Spring61.dao.BookTypeDAOImpl; import com.zhangguo.Spring61.entities.BookType; import com.zhangguo.Spring61.mapping.BookTypeDAO; public class TestBookTypeDAOImpl { static BookTypeDAO bookTypeDao; @BeforeClass public static void beforeClass() { bookTypeDao=new BookTypeDAOImpl(); } @Test public void testGetAllBookTypes() { List<BookType> booktypes=bookTypeDao.getAllBookTypes(); for (BookType bookType : booktypes) { System.out.println(bookType); } assertNotNull(booktypes); } }
測試結(jié)果:
2.8、整合log4j2
上面的測試雖然通過,但是有一個錯誤提示“ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.”,大意是:日志記錄器沒有找到log4j2的配置文件。在源碼的根目錄下創(chuàng)建一個log4j2.xml配置文件,文件內(nèi)容如下所示:
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="off" monitorInterval="1800"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" /> </Console> </Appenders> <Loggers> <Root level="debug"> <AppenderRef ref="Console" /> </Root> </Loggers> </Configuration>
再運行就會發(fā)現(xiàn)log4j2已經(jīng)在運行了,從控制臺可以看到MyBatis的運行狀態(tài)信息:
程序向數(shù)據(jù)庫發(fā)送的SQL請求,及數(shù)據(jù)庫向程序響應(yīng)的結(jié)果就清楚了。
三、使用Spring4.X整合MyBatis3.X初級版
在MyBatis的github官網(wǎng)(https://github.com/mybatis/spring)中有一個叫MyBatis Spring Adapter(MyBatis-Spring)的庫,暫且翻譯成:MyBatis Spring適配器,它的作用是:原話:“MyBatis-Spring adapter is an easy-to-use Spring3 bridge for MyBatis sql mapping framework.”,就是了為更容易的將MyBatis與Spring整合,充分發(fā)揮二兩結(jié)合的優(yōu)勢,它相當于一個橋。
什么是:MyBatis-Spring?
MyBatis-Spring會幫助你將MyBatis代碼無縫地整合到Spring中。使用這個類庫中的類,Spring將會加載必要的MyBatis工廠類和session類。這個類庫也提供一個簡單的方式來注入MyBatis數(shù)據(jù)映射器和SqlSession到業(yè)務(wù)層的bean中。而且它也會處理事務(wù),翻譯MyBatis的異常到Spring的DataAccessException異常(數(shù)據(jù)訪問異常,譯者注)中。最終,它并不會依賴于MyBatis,Spring或MyBatis-Spring來構(gòu)建應(yīng)用程序代碼。
3.1、修改pom.xml添加依賴
為了將Spring與MyBatis整合完成,需要依賴MyBatis,因為在上面的示例中已依賴完成,這里就不再需要,主要需依賴的是Spring核心,AOP,JDBC,MyBatis-Spring等jar包。具體的依賴結(jié)果pom.xml文件如下所示:
<project xmlns="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.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zhangguo</groupId> <artifactId>Spring061</artifactId> <version>0.0.1</version> <packaging>war</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <spring.version>4.3.0.RELEASE</spring.version> </properties> <dependencies> <!--mysql數(shù)據(jù)庫驅(qū)動 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> <!--log4j日志包 --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.6.1</version> </dependency> <!-- mybatis ORM框架 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.1</version> </dependency> <!-- JUnit單元測試工具 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> </dependency> <!--mybatis-spring適配器 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.0</version> </dependency> <!--Spring框架核心庫 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <!-- aspectJ AOP 織入器 --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.9</version> </dependency> <!--Spring java數(shù)據(jù)庫訪問包,在本例中主要用于提供數(shù)據(jù)源 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> </dependencies> </project>
3.2、創(chuàng)建Spring上下文初始化配置文件
該文件取名為ApplicationContext.xml主要原因是“約束優(yōu)于配置”的理由,使用Web監(jiān)聽器加載Spring時會默認找該名稱的文件。在文件中我們可像以前學(xué)習(xí)Spring一樣配置IOC與AOP,只不過這里整合了一些MyBatis內(nèi)容。文件內(nèi)容如下:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd"> <!--1定義一個jdbc數(shù)據(jù)源,創(chuàng)建一個驅(qū)動管理數(shù)據(jù)源的bean --> <bean id="jdbcDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/db2" /> <property name="username" value="root" /> <property name="password" value="root" /> </bean> <!--2創(chuàng)建一個sql會話工廠bean,指定數(shù)據(jù)源--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="jdbcDataSource" /><!-- 指定數(shù)據(jù)源 --> <property name="configLocation" value="classpath:MyBatisCfg.xml"></property> <!-- 指定配置文件 --> </bean> <!--3創(chuàng)建一個booTypeDAO--> <bean id="bookTypeDao" class="org.mybatis.spring.mapper.MapperFactoryBean"> <!--指定映射文件 --> <property name="mapperInterface" value="com.zhangguo.Spring61.mapping.BookTypeDAO"></property> <!-- 指定sql會話工廠--> <property name="sqlSessionFactory" ref="sqlSessionFactory"></property> </bean> <!--下面的配置暫時未使用 --> <context:component-scan base-package="com.zhangguo"> </context:component-scan> <aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy> </beans>
從上面的代碼可以看到分別創(chuàng)建了一個驅(qū)動管理數(shù)據(jù)源的對象,會話工廠與實現(xiàn)數(shù)據(jù)訪問的對象通過Spring IOC完成,而不再是硬編碼。第2段配置與下面的代碼功能基本類似:
private static SqlSessionFactory factory=null; public static SqlSessionFactory getSqlSessionFactory(){ if(factory==null){ // 獲得環(huán)境配置文件流 InputStream config = MyBatisUtil.class.getClassLoader().getResourceAsStream("MyBatisCfg.xml"); // 創(chuàng)建sql會話工廠 factory = new SqlSessionFactoryBuilder().build(config); } return factory; }
第3段配置與下面的java代碼基本類似:
SqlSession session = MyBatisUtil.getSession(); try { BookTypeDAO bookTypeDAO = session.getMapper(BookTypeDAO.class); return bookTypeDAO.getAllBookTypes(); } finally { session.close(); }
3.3、測試運行
package com.zhangguo.Spring61.test; import static org.junit.Assert.assertNotNull; import java.util.List; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.zhangguo.Spring61.entities.BookType; import com.zhangguo.Spring61.mapping.BookTypeDAO; public class TestMyBatisSpring01 { @Test public void test01() { //初始化容器 ApplicationContext ctx=new ClassPathXmlApplicationContext("ApplicationContext.xml"); //獲得bean BookTypeDAO bookTypeDao=ctx.getBean("bookTypeDao",BookTypeDAO.class); //訪問數(shù)據(jù)庫 List<BookType> booktypes=bookTypeDao.getAllBookTypes(); for (BookType bookType : booktypes) { System.out.println(bookType); } assertNotNull(booktypes); } }
運行結(jié)果:
小結(jié):此處的整合還是相對基礎(chǔ),更完善的整合內(nèi)容將在后面的章節(jié)實現(xiàn)。另外在MyBatisCfg.xml文件中可以刪除運行環(huán)境中數(shù)據(jù)源配置部分的內(nèi)容,如下圖所示。我們當前的示例使用的是Spring提供的數(shù)據(jù)源,其實也可以使用一第三方的數(shù)據(jù)源管理,如C3P0,Druid(德魯伊,阿里巴巴開發(fā))等。
以上所述是小編給大家介紹的Spring整合MyBatis(Maven+MySQL)圖文教程詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對服務(wù)器之家網(wǎng)站的支持!
原文鏈接:http://www.cnblogs.com/best/archive/2016/07/04/5638827.html